Commit efc27697 authored by Henrique Nakashima's avatar Henrique Nakashima Committed by Commit Bot

Implement IntCachedFieldTrialParameter.

This allows caching int-typed field trial parameters for use
before native is loaded.

Bug: 1041865, 1012975
Change-Id: I9192d5fc7ee27dd617843e3afc5355d274d6e48f
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2086255Reviewed-by: default avatarXi Han <hanxi@chromium.org>
Commit-Queue: Henrique Nakashima <hnakashima@chromium.org>
Cr-Commit-Position: refs/heads/master@{#746850}
parent 121e16d2
...@@ -116,6 +116,7 @@ public class CachedFeatureFlags { ...@@ -116,6 +116,7 @@ public class CachedFeatureFlags {
private static Map<String, Boolean> sBoolValuesReturned = new HashMap<>(); private static Map<String, Boolean> sBoolValuesReturned = new HashMap<>();
private static Map<String, String> sStringValuesReturned = new HashMap<>(); private static Map<String, String> sStringValuesReturned = new HashMap<>();
private static Map<String, Integer> sIntValuesReturned = new HashMap<>();
private static String sReachedCodeProfilerTrialGroup; private static String sReachedCodeProfilerTrialGroup;
/** /**
...@@ -262,6 +263,17 @@ public class CachedFeatureFlags { ...@@ -262,6 +263,17 @@ public class CachedFeatureFlags {
parameter.getSharedPreferenceKey(), parameter.getDefaultValue()); parameter.getSharedPreferenceKey(), parameter.getDefaultValue());
} }
/**
* TODO(crbug.com/1012975): Move this to IntCachedFieldTrialParameter when
* CachedFeatureFlags is in chrome/browser/flags.
*
* @return the value of the field trial parameter that should be used in this run.
*/
public static int getValue(IntCachedFieldTrialParameter parameter) {
return getConsistentIntValue(
parameter.getSharedPreferenceKey(), parameter.getDefaultValue());
}
private static void cacheStartSurfaceVariation() { private static void cacheStartSurfaceVariation() {
String feature = ChromeFeatureList.getFieldTrialParamByFeature( String feature = ChromeFeatureList.getFieldTrialParamByFeature(
ChromeFeatureList.START_SURFACE_ANDROID, "start_surface_variation"); ChromeFeatureList.START_SURFACE_ANDROID, "start_surface_variation");
...@@ -358,6 +370,15 @@ public class CachedFeatureFlags { ...@@ -358,6 +370,15 @@ public class CachedFeatureFlags {
return value; return value;
} }
static int getConsistentIntValue(String preferenceName, int defaultValue) {
Integer value = sIntValuesReturned.get(preferenceName);
if (value == null) {
value = SharedPreferencesManager.getInstance().readInt(preferenceName, defaultValue);
sIntValuesReturned.put(preferenceName, value);
}
return value;
}
private static String getPrefForFeatureFlag(String featureName) { private static String getPrefForFeatureFlag(String featureName) {
String grandfatheredPrefKey = sNonDynamicPrefKeys.get(featureName); String grandfatheredPrefKey = sNonDynamicPrefKeys.get(featureName);
if (grandfatheredPrefKey == null) { if (grandfatheredPrefKey == null) {
...@@ -371,6 +392,7 @@ public class CachedFeatureFlags { ...@@ -371,6 +392,7 @@ public class CachedFeatureFlags {
public static void resetFlagsForTesting() { public static void resetFlagsForTesting() {
sBoolValuesReturned.clear(); sBoolValuesReturned.clear();
sStringValuesReturned.clear(); sStringValuesReturned.clear();
sIntValuesReturned.clear();
} }
@VisibleForTesting @VisibleForTesting
......
...@@ -9,6 +9,7 @@ android_library("java") { ...@@ -9,6 +9,7 @@ android_library("java") {
"android/java/src/org/chromium/chrome/browser/flags/BooleanCachedFieldTrialParameter.java", "android/java/src/org/chromium/chrome/browser/flags/BooleanCachedFieldTrialParameter.java",
"android/java/src/org/chromium/chrome/browser/flags/CachedFieldTrialParameter.java", "android/java/src/org/chromium/chrome/browser/flags/CachedFieldTrialParameter.java",
"android/java/src/org/chromium/chrome/browser/flags/ChromeFeatureList.java", "android/java/src/org/chromium/chrome/browser/flags/ChromeFeatureList.java",
"android/java/src/org/chromium/chrome/browser/flags/IntCachedFieldTrialParameter.java",
"android/java/src/org/chromium/chrome/browser/flags/StringCachedFieldTrialParameter.java", "android/java/src/org/chromium/chrome/browser/flags/StringCachedFieldTrialParameter.java",
] ]
deps = [ deps = [
......
// Copyright 2020 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
package org.chromium.chrome.browser.flags;
import org.chromium.chrome.browser.preferences.SharedPreferencesManager;
/**
* An int-type {@link CachedFieldTrialParameter}.
*/
public class IntCachedFieldTrialParameter extends CachedFieldTrialParameter {
private int mDefaultValue;
public IntCachedFieldTrialParameter(
String featureName, String variationName, int defaultValue) {
super(featureName, variationName, FieldTrialParameterType.INT, null);
mDefaultValue = defaultValue;
}
public int getDefaultValue() {
return mDefaultValue;
}
@Override
void cacheToDisk() {
int value = ChromeFeatureList.getFieldTrialParamByFeatureAsInt(
getFeatureName(), getParameterName(), getDefaultValue());
SharedPreferencesManager.getInstance().writeInt(getSharedPreferenceKey(), value);
}
}
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment