| Index: chrome/browser/browser_main.cc
|
| ===================================================================
|
| --- chrome/browser/browser_main.cc (revision 98422)
|
| +++ chrome/browser/browser_main.cc (working copy)
|
| @@ -165,6 +165,7 @@
|
| #include <commctrl.h>
|
| #include <shellapi.h>
|
|
|
| +#include "base/environment.h" // For PreRead experiment.
|
| #include "base/win/scoped_com_initializer.h"
|
| #include "base/win/windows_version.h"
|
| #include "chrome/browser/browser_trial.h"
|
| @@ -814,6 +815,20 @@
|
| }
|
| #endif // #if defined(USE_LINUX_BREAKPAD)
|
|
|
| +// This code is specific to the Windows-only PreReadExperiment field-trial.
|
| +void AddPreReadHistogramTime(const char* name, base::TimeDelta time) {
|
| + const base::TimeDelta kMin(base::TimeDelta::FromMilliseconds(1));
|
| + const base::TimeDelta kMax(base::TimeDelta::FromHours(1));
|
| + static const size_t kBuckets(100);
|
| +
|
| + // FactoryTimeGet will always return a pointer to the same histogram object,
|
| + // keyed on its name. There's no need for us to store it explicitly anywhere.
|
| + base::Histogram* counter = base::Histogram::FactoryTimeGet(
|
| + name, kMin, kMax, kBuckets, base::Histogram::kUmaTargetedHistogramFlag);
|
| +
|
| + counter->AddTime(time);
|
| +}
|
| +
|
| } // namespace
|
|
|
| namespace chrome_browser {
|
| @@ -2053,12 +2068,8 @@
|
| if (pool)
|
| pool->Recycle();
|
|
|
| - UMA_HISTOGRAM_CUSTOM_TIMES(
|
| - "Startup.BrowserOpenTabs",
|
| - base::TimeTicks::Now() - browser_open_start,
|
| - base::TimeDelta::FromMilliseconds(1),
|
| - base::TimeDelta::FromHours(1),
|
| - 100);
|
| + RecordPreReadExperimentTime("Startup.BrowserOpenTabs",
|
| + base::TimeTicks::Now() - browser_open_start);
|
|
|
| // TODO(mad): Move this call in a proper place on CrOS.
|
| // http://crosbug.com/17687
|
| @@ -2153,3 +2164,30 @@
|
| TRACE_EVENT_END_ETW("BrowserMain", 0, 0);
|
| return result_code;
|
| }
|
| +
|
| +// This code is specific to the Windows-only PreReadExperiment field-trial.
|
| +void RecordPreReadExperimentTime(const char* name, base::TimeDelta time) {
|
| + DCHECK(name != NULL);
|
| +
|
| + // This gets called with different histogram names, so we don't want to use
|
| + // the UMA_HISTOGRAM_CUSTOM_TIMES macro--it uses a static variable, and the
|
| + // first call wins.
|
| + AddPreReadHistogramTime(name, time);
|
| +
|
| +#if defined(OS_WIN)
|
| + // The pre-read experiment is Windows specific.
|
| + scoped_ptr<base::Environment> env(base::Environment::Create());
|
| +
|
| + // Only record the sub-histogram result if the experiment is running
|
| + // (environment variable is set, and valid).
|
| + std::string pre_read;
|
| + if (env->GetVar(chrome::kPreReadEnvironmentVariable, &pre_read) &&
|
| + (pre_read == "0" || pre_read == "1")) {
|
| + std::string uma_name(name);
|
| + uma_name += "_PreRead";
|
| + uma_name += pre_read == "1" ? "Enabled" : "Disabled";
|
| + AddPreReadHistogramTime(uma_name.c_str(), time);
|
| + }
|
| +#endif
|
| +}
|
| +
|
|
|