Commit 4f09c145 authored by Matthew Cary's avatar Matthew Cary Committed by Commit Bot

Android: register synthetic field trials correctly.

The previous registration in SetupMobileFieldTrials was too early;
the g_browser_process is not initialized yet. This registration works.

Bug: 932578
Change-Id: If45b6b88c1be4c1025f9ecd6ee8e5efc5685bc9d
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1473174Reviewed-by: default avatarDavid Roger <droger@chromium.org>
Reviewed-by: default avatarAlexei Svitkine <asvitkine@chromium.org>
Reviewed-by: default avatarFrançois Doray <fdoray@chromium.org>
Commit-Queue: Matthew Cary <mattcary@chromium.org>
Auto-Submit: Matthew Cary <mattcary@chromium.org>
Cr-Commit-Position: refs/heads/master@{#638075}
parent 0cb3b9b1
......@@ -13,6 +13,7 @@
#include "base/strings/string_util.h"
#include "base/time/time.h"
#include "build/build_config.h"
#include "chrome/browser/metrics/chrome_metrics_service_accessor.h"
#include "chrome/browser/metrics/chrome_metrics_service_client.h"
#include "chrome/browser/metrics/chrome_metrics_services_manager_client.h"
#include "chrome/browser/metrics/persistent_histograms.h"
......@@ -23,6 +24,8 @@
#include "components/version_info/version_info.h"
#if defined(OS_ANDROID)
#include "base/android/library_loader/library_loader_hooks.h"
#include "base/android/reached_code_profiler.h"
#include "chrome/browser/chrome_browser_field_trials_mobile.h"
#else
#include "chrome/browser/chrome_browser_field_trials_desktop.h"
......@@ -85,6 +88,33 @@ void ChromeBrowserFieldTrials::SetupFeatureControllingFieldTrials(
}
}
void ChromeBrowserFieldTrials::RegisterSyntheticTrials() {
#if defined(OS_ANDROID)
static constexpr char kEnabledGroup[] = "Enabled";
static constexpr char kDisabledGroup[] = "Disabled";
static constexpr char kOrderfileOptimizationTrial[] =
"AndroidOrderfileOptimization";
if (base::android::IsUsingOrderfileOptimization()) {
ChromeMetricsServiceAccessor::RegisterSyntheticFieldTrial(
kOrderfileOptimizationTrial, kEnabledGroup);
} else {
ChromeMetricsServiceAccessor::RegisterSyntheticFieldTrial(
kOrderfileOptimizationTrial, kDisabledGroup);
}
static constexpr char kReachedCodeProfilerTrial[] =
"ReachedCodeProfilerSynthetic";
if (base::android::IsReachedCodeProfilerEnabled()) {
ChromeMetricsServiceAccessor::RegisterSyntheticFieldTrial(
kReachedCodeProfilerTrial, kEnabledGroup);
} else {
ChromeMetricsServiceAccessor::RegisterSyntheticFieldTrial(
kReachedCodeProfilerTrial, kDisabledGroup);
}
#endif // defined(OS_ANDROID)
}
void ChromeBrowserFieldTrials::InstantiateDynamicTrials() {
// Persistent histograms must be enabled as soon as possible.
InstantiatePersistentHistograms();
......
......@@ -22,6 +22,7 @@ class ChromeBrowserFieldTrials : public variations::PlatformFieldTrials {
void SetupFeatureControllingFieldTrials(
bool has_seed,
base::FeatureList* feature_list) override;
void RegisterSyntheticTrials() override;
private:
// Instantiates dynamic trials by querying their state, to ensure they get
......
......@@ -5,48 +5,18 @@
#include "chrome/browser/chrome_browser_field_trials_mobile.h"
#include "build/build_config.h"
#include "chrome/browser/browser_process.h"
#if defined(OS_ANDROID)
#include "base/android/library_loader/library_loader_hooks.h"
#include "base/android/reached_code_profiler.h"
#include "base/base_switches.h"
#include "chrome/browser/browser_process.h"
#include "chrome/browser/metrics/chrome_metrics_service_accessor.h"
#include "chrome/browser/prerender/prerender_field_trial.h"
#endif
namespace chrome {
void SetupMobileFieldTrials() {
DCHECK(!g_browser_process);
#if defined(OS_ANDROID)
prerender::ConfigureNoStatePrefetch();
// For tests on some platforms, g_browser_process is not initialized yet.
if (g_browser_process) {
static constexpr char kEnabledGroup[] = "Enabled";
static constexpr char kDisabledGroup[] = "Disabled";
static constexpr char kOrderfileOptimizationTrial[] =
"AndroidOrderfileOptimization";
if (base::android::IsUsingOrderfileOptimization()) {
ChromeMetricsServiceAccessor::RegisterSyntheticFieldTrial(
kOrderfileOptimizationTrial, kEnabledGroup);
} else {
ChromeMetricsServiceAccessor::RegisterSyntheticFieldTrial(
kOrderfileOptimizationTrial, kDisabledGroup);
}
static constexpr char kReachedCodeProfilerTrial[] =
"ReachedCodeProfilerSynthetic";
if (base::android::IsReachedCodeProfilerEnabled()) {
ChromeMetricsServiceAccessor::RegisterSyntheticFieldTrial(
kReachedCodeProfilerTrial, kEnabledGroup);
} else {
ChromeMetricsServiceAccessor::RegisterSyntheticFieldTrial(
kReachedCodeProfilerTrial, kDisabledGroup);
}
}
#endif
}
......
......@@ -661,6 +661,9 @@ void ChromeBrowserMainParts::SetupMetrics() {
variations::SyntheticTrialsActiveGroupIdProvider::GetInstance());
// Now that field trials have been created, initializes metrics recording.
metrics->InitializeMetricsRecordingState();
chrome_feature_list_creator_->browser_field_trials()
->RegisterSyntheticTrials();
}
void ChromeBrowserMainParts::StartMetricsRecording() {
......
......@@ -10,7 +10,6 @@
#include "base/macros.h"
#include "build/build_config.h"
#include "chrome/browser/chrome_browser_field_trials.h"
#include "chrome/browser/chrome_process_singleton.h"
#include "chrome/browser/first_run/first_run.h"
#include "chrome/browser/process_singleton.h"
......@@ -138,8 +137,6 @@ class ChromeBrowserMainParts : public content::BrowserMainParts {
const base::CommandLine& parsed_command_line_;
int result_code_;
ChromeBrowserFieldTrials browser_field_trials_;
#if !defined(OS_ANDROID)
// Create StartupTimeBomb object for watching jank during startup.
std::unique_ptr<StartupTimeBomb> startup_watcher_;
......
......@@ -69,6 +69,10 @@ class ChromeFeatureListCreator {
}
const std::string& actual_locale() { return actual_locale_; }
ChromeBrowserFieldTrials* browser_field_trials() {
return browser_field_trials_.get();
}
private:
void CreatePrefService();
void ConvertFlagsToSwitches();
......
......@@ -85,7 +85,7 @@ class ChromeMetricsServiceAccessor : public metrics::MetricsServiceAccessor {
friend class ::CrashesDOMHandler;
friend class ::FlashDOMHandler;
friend void chrome::AttemptRestart();
friend void chrome::SetupMobileFieldTrials();
friend class ChromeBrowserFieldTrials;
// For ChromeWinClang.
friend class ChromeBrowserMainExtraPartsMetrics;
// For StackSamplingConfiguration.
......
......@@ -29,6 +29,10 @@ class PlatformFieldTrials {
bool has_seed,
base::FeatureList* feature_list) = 0;
// Register any synthetic field trials. Will be called later than the above
// methods, in particular after g_browser_process is available..
virtual void RegisterSyntheticTrials() {}
private:
DISALLOW_COPY_AND_ASSIGN(PlatformFieldTrials);
};
......
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