Index: chrome/browser/browser_main.cc |
=================================================================== |
--- chrome/browser/browser_main.cc (revision 95298) |
+++ 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" |
@@ -227,6 +228,48 @@ |
class NetLog; |
} // namespace net |
+// This code is specific to the Windows-only PreReadExperiment field-trial. |
+static 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); |
+} |
+ |
+// 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) |
+ static const char kEnvVar[] = "CHROME_PRE_READ_EXPERIMENT"; |
+ |
+ // The pre-read experiment is Windows specific. |
+ scoped_ptr<base::Environment> env(base::Environment::Create()); |
+ DCHECK(env.get() != NULL); |
+ |
+ // Only record the sub-histogram result if the experiment is running |
+ // (environment variable is set, and valid). |
+ std::string pre_read; |
+ if (env->GetVar(kEnvVar, &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 |
+} |
+ |
// BrowserMainParts ------------------------------------------------------------ |
BrowserMainParts::BrowserMainParts(const MainFunctionParams& parameters) |
@@ -2026,8 +2069,8 @@ |
if (pool) |
pool->Recycle(); |
- UMA_HISTOGRAM_MEDIUM_TIMES("Startup.BrowserOpenTabs", |
- base::TimeTicks::Now() - browser_open_start); |
+ RecordPreReadExperimentTime("Startup.BrowserOpenTabs", |
+ base::TimeTicks::Now() - browser_open_start); |
// TODO(mad): Move this call in a proper place on CrOS. |
// http://crosbug.com/17687 |