Skip to content

Commit d1de285

Browse files
committed
modified save to cache when RC fetches
1 parent f8b4b4d commit d1de285

File tree

3 files changed

+27
-21
lines changed

3 files changed

+27
-21
lines changed

firebase-perf/src/main/java/com/google/firebase/perf/config/ConfigResolver.java

Lines changed: 0 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -115,21 +115,11 @@ public void setMetadataBundle(ImmutableBundle bundle) {
115115

116116
/** Default API to call for whether performance monitoring is currently silent. */
117117
public boolean isPerformanceMonitoringEnabled() {
118-
saveExperimentFlagToDeviceCache();
119118
Boolean isPerformanceCollectionEnabled = getIsPerformanceCollectionEnabled();
120119
return (isPerformanceCollectionEnabled == null || isPerformanceCollectionEnabled == true)
121120
&& getIsServiceCollectionEnabled();
122121
}
123122

124-
// TODO: remove after _experiment_as_ttid is finished
125-
private void saveExperimentFlagToDeviceCache() {
126-
ExperimentTTID config = ExperimentTTID.getInstance();
127-
Optional<Boolean> rcValue = getRemoteConfigBoolean(config);
128-
if (rcValue.isAvailable()) {
129-
deviceCacheManager.setValue(config.getDeviceCacheFlag(), rcValue.get());
130-
}
131-
}
132-
133123
/** Returns whether developers have enabled Firebase Performance event collection. */
134124
@Nullable
135125
public Boolean getIsPerformanceCollectionEnabled() {

firebase-perf/src/main/java/com/google/firebase/perf/config/RemoteConfigManager.java

Lines changed: 21 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,8 @@
1414

1515
package com.google.firebase.perf.config;
1616

17+
import static com.google.firebase.perf.config.ConfigurationConstants.ExperimentTTID;
18+
1719
import android.content.Context;
1820
import android.content.pm.PackageInfo;
1921
import android.content.pm.PackageManager.NameNotFoundException;
@@ -53,6 +55,7 @@ public class RemoteConfigManager {
5355
private static final long MIN_APP_START_CONFIG_FETCH_DELAY_MS = 5000;
5456
private static final int RANDOM_APP_START_CONFIG_FETCH_DELAY_MS = 25000;
5557

58+
private final DeviceCacheManager cache;
5659
private final ConcurrentHashMap<String, FirebaseRemoteConfigValue> allRcConfigMap;
5760
private final Executor executor;
5861
private final long appStartTimeInMs;
@@ -65,29 +68,25 @@ public class RemoteConfigManager {
6568

6669
private RemoteConfigManager() {
6770
this(
71+
DeviceCacheManager.getInstance(),
6872
new ThreadPoolExecutor(
6973
/* corePoolSize= */ 0,
7074
/* maximumPoolSize= */ 1,
7175
/* keepAliveTime= */ 0L,
7276
TimeUnit.SECONDS,
7377
new LinkedBlockingQueue<Runnable>()),
74-
/* firebaseRemoteConfig= */ null // set once FirebaseRemoteConfig is initialized
75-
);
76-
}
77-
78-
RemoteConfigManager(Executor executor, FirebaseRemoteConfig firebaseRemoteConfig) {
79-
this(
80-
executor,
81-
firebaseRemoteConfig,
78+
/* firebaseRemoteConfig= */ null, // set once FirebaseRemoteConfig is initialized
8279
MIN_APP_START_CONFIG_FETCH_DELAY_MS
8380
+ new Random().nextInt(RANDOM_APP_START_CONFIG_FETCH_DELAY_MS));
8481
}
8582

8683
@VisibleForTesting
8784
RemoteConfigManager(
85+
DeviceCacheManager cache,
8886
Executor executor,
8987
FirebaseRemoteConfig firebaseRemoteConfig,
9088
long appStartConfigFetchDelayInMs) {
89+
this.cache = cache;
9190
this.executor = executor;
9291
this.firebaseRemoteConfig = firebaseRemoteConfig;
9392
this.allRcConfigMap =
@@ -315,7 +314,7 @@ private void triggerRemoteConfigFetchIfNecessary() {
315314
return;
316315
}
317316
if (allRcConfigMap.isEmpty()) { // Initial fetch.
318-
syncConfigValues(firebaseRemoteConfig.getAll());
317+
allRcConfigMap.putAll(firebaseRemoteConfig.getAll());
319318
}
320319
if (shouldFetchAndActivateRemoteConfigValues()) {
321320
triggerFirebaseRemoteConfigFetchAndActivateOnSuccessfulFetch();
@@ -342,6 +341,19 @@ protected void syncConfigValues(Map<String, FirebaseRemoteConfigValue> newlyFetc
342341
allRcConfigMap.remove(existingKey);
343342
}
344343
}
344+
345+
// Save to device cache upon successful RC fetchAndActivate
346+
ExperimentTTID flag = ExperimentTTID.getInstance();
347+
FirebaseRemoteConfigValue rcValue = allRcConfigMap.get(flag.getRemoteConfigFlag());
348+
if (rcValue != null) {
349+
try {
350+
cache.setValue(flag.getDeviceCacheFlag(), rcValue.asBoolean());
351+
} catch (Exception exception) {
352+
logger.debug("ExperimentTTID remote config flag has invalid value, expected boolean.");
353+
}
354+
} else {
355+
logger.debug("ExperimentTTID remote config flag does not exist.");
356+
}
345357
}
346358

347359
@VisibleForTesting

firebase-perf/src/test/java/com/google/firebase/perf/config/RemoteConfigManagerTest.java

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,7 @@ public final class RemoteConfigManagerTest extends FirebasePerformanceTestBase {
5252
@Mock private FirebaseRemoteConfig mockFirebaseRemoteConfig;
5353
@Mock private RemoteConfigComponent mockFirebaseRemoteConfigComponent;
5454
@Mock private Provider<RemoteConfigComponent> mockFirebaseRemoteConfigProvider;
55+
@Mock private DeviceCacheManager mockCacheManager;
5556

5657
private FakeScheduledExecutorService fakeExecutor;
5758

@@ -889,10 +890,13 @@ private RemoteConfigManager setupTestRemoteConfigManager(
889890
when(mockFirebaseRemoteConfig.getAll()).thenReturn(configs);
890891
if (initializeFrc) {
891892
return new RemoteConfigManager(
892-
fakeExecutor, mockFirebaseRemoteConfig, appStartConfigFetchDelayInMs);
893+
mockCacheManager, fakeExecutor, mockFirebaseRemoteConfig, appStartConfigFetchDelayInMs);
893894
} else {
894895
return new RemoteConfigManager(
895-
fakeExecutor, /* firebaseRemoteConfig= */ null, appStartConfigFetchDelayInMs);
896+
mockCacheManager,
897+
fakeExecutor,
898+
/* firebaseRemoteConfig= */ null,
899+
appStartConfigFetchDelayInMs);
896900
}
897901
}
898902

0 commit comments

Comments
 (0)