Skip to content

Commit f486088

Browse files
committed
Implementation with naive settings API
1 parent 5c11b8a commit f486088

File tree

2 files changed

+28
-0
lines changed

2 files changed

+28
-0
lines changed

firebase-firestore/src/main/java/com/google/firebase/firestore/FirebaseFirestoreSettings.java

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,13 +38,16 @@ public static final class Builder {
3838
private String host;
3939
private boolean sslEnabled;
4040
private boolean persistenceEnabled;
41+
42+
private boolean memoryLruGcEnabled;
4143
private long cacheSizeBytes;
4244

4345
/** Constructs a new {@code FirebaseFirestoreSettings} Builder object. */
4446
public Builder() {
4547
host = DEFAULT_HOST;
4648
sslEnabled = true;
4749
persistenceEnabled = true;
50+
memoryLruGcEnabled = false;
4851
cacheSizeBytes = DEFAULT_CACHE_SIZE_BYTES;
4952
}
5053

@@ -58,6 +61,7 @@ public Builder(@NonNull FirebaseFirestoreSettings settings) {
5861
sslEnabled = settings.sslEnabled;
5962
persistenceEnabled = settings.persistenceEnabled;
6063
cacheSizeBytes = settings.cacheSizeBytes;
64+
memoryLruGcEnabled = settings.memoryLruGcEnabled;
6165
}
6266

6367
/**
@@ -95,6 +99,12 @@ public Builder setPersistenceEnabled(boolean value) {
9599
return this;
96100
}
97101

102+
@NonNull
103+
public Builder setMemoryLruGcEnabled(boolean value) {
104+
this.memoryLruGcEnabled = value;
105+
return this;
106+
}
107+
98108
/**
99109
* Sets an approximate cache size threshold for the on-disk data. If the cache grows beyond this
100110
* size, Cloud Firestore will start removing data that hasn't been recently used. The size is
@@ -150,6 +160,7 @@ public FirebaseFirestoreSettings build() {
150160
private final String host;
151161
private final boolean sslEnabled;
152162
private final boolean persistenceEnabled;
163+
private final boolean memoryLruGcEnabled;
153164
private final long cacheSizeBytes;
154165

155166
/** Constructs a {@code FirebaseFirestoreSettings} object based on the values in the Builder. */
@@ -158,6 +169,7 @@ private FirebaseFirestoreSettings(Builder builder) {
158169
sslEnabled = builder.sslEnabled;
159170
persistenceEnabled = builder.persistenceEnabled;
160171
cacheSizeBytes = builder.cacheSizeBytes;
172+
memoryLruGcEnabled = builder.memoryLruGcEnabled;
161173
}
162174

163175
@Override
@@ -216,6 +228,10 @@ public boolean isPersistenceEnabled() {
216228
return persistenceEnabled;
217229
}
218230

231+
public boolean isMemoryLruGcEnabled() {
232+
return memoryLruGcEnabled;
233+
}
234+
219235
/**
220236
* Returns the threshold for the cache size above which the SDK will attempt to collect the least
221237
* recently used documents.

firebase-firestore/src/main/java/com/google/firebase/firestore/core/MemoryComponentProvider.java

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,9 @@
1717
import androidx.annotation.Nullable;
1818
import com.google.firebase.database.collection.ImmutableSortedSet;
1919
import com.google.firebase.firestore.local.IndexBackfiller;
20+
import com.google.firebase.firestore.local.LocalSerializer;
2021
import com.google.firebase.firestore.local.LocalStore;
22+
import com.google.firebase.firestore.local.LruGarbageCollector;
2123
import com.google.firebase.firestore.local.MemoryPersistence;
2224
import com.google.firebase.firestore.local.Persistence;
2325
import com.google.firebase.firestore.local.QueryEngine;
@@ -26,6 +28,7 @@
2628
import com.google.firebase.firestore.model.mutation.MutationBatchResult;
2729
import com.google.firebase.firestore.remote.AndroidConnectivityMonitor;
2830
import com.google.firebase.firestore.remote.RemoteEvent;
31+
import com.google.firebase.firestore.remote.RemoteSerializer;
2932
import com.google.firebase.firestore.remote.RemoteStore;
3033
import io.grpc.Status;
3134

@@ -64,6 +67,15 @@ protected AndroidConnectivityMonitor createConnectivityMonitor(Configuration con
6467

6568
@Override
6669
protected Persistence createPersistence(Configuration configuration) {
70+
if(configuration.getSettings().isMemoryLruGcEnabled()) {
71+
LocalSerializer serializer =
72+
new LocalSerializer(new RemoteSerializer(configuration.getDatabaseInfo().getDatabaseId()));
73+
LruGarbageCollector.Params params =
74+
LruGarbageCollector.Params.WithCacheSizeBytes(
75+
configuration.getSettings().getCacheSizeBytes());
76+
return MemoryPersistence.createLruGcMemoryPersistence(params, serializer);
77+
}
78+
6779
return MemoryPersistence.createEagerGcMemoryPersistence();
6880
}
6981

0 commit comments

Comments
 (0)