Index: chrome/browser/precache/precache_util.cc |
diff --git a/chrome/browser/precache/precache_util.cc b/chrome/browser/precache/precache_util.cc |
index 049155ba5122cea054071d7eb1b8884612c5a18d..407a5ef4583e97a2f6f94bd471466663808afdbb 100644 |
--- a/chrome/browser/precache/precache_util.cc |
+++ b/chrome/browser/precache/precache_util.cc |
@@ -4,8 +4,13 @@ |
#include "chrome/browser/precache/precache_util.h" |
+#include <string> |
+#include <vector> |
+ |
+#include "base/metrics/field_trial.h" |
#include "base/time/time.h" |
#include "chrome/browser/browser_process.h" |
+#include "chrome/browser/metrics/chrome_metrics_service_accessor.h" |
#include "chrome/browser/precache/precache_manager_factory.h" |
#include "chrome/browser/profiles/profile.h" |
#include "chrome/browser/profiles/profile_manager.h" |
@@ -21,6 +26,9 @@ class HttpResponseInfo; |
namespace { |
+const char kPrecacheSynthetic15D[] = "PrecacheSynthetic15D"; |
+const char kPrecacheSynthetic1D[] = "PrecacheSynthetic1D"; |
+ |
void UpdatePrecacheMetricsAndStateOnUIThread(const GURL& url, |
const GURL& referrer, |
base::TimeDelta latency, |
@@ -42,7 +50,8 @@ void UpdatePrecacheMetricsAndStateOnUIThread(const GURL& url, |
return; |
precache_manager->UpdatePrecacheMetricsAndState( |
- url, referrer, latency, fetch_time, info, size, is_user_traffic); |
+ url, referrer, latency, fetch_time, info, size, is_user_traffic, |
+ base::Bind(&precache::RegisterPrecacheSyntheticFieldTrial)); |
} |
} // namespace |
@@ -70,4 +79,25 @@ void UpdatePrecacheMetricsAndState(const net::URLRequest* request, |
data_use_measurement::IsUserRequest(*request), profile_id)); |
} |
+// |last_precache_time| is the last time precache task was run. |
+void RegisterPrecacheSyntheticFieldTrial(base::Time last_precache_time) { |
+ DCHECK_CURRENTLY_ON(content::BrowserThread::UI); |
+ |
+ std::vector<uint32_t> groups; |
+ base::TimeDelta time_ago = base::Time::Now() - last_precache_time; |
+ // Look up the current group name (e.g. Control or Enabled). |
+ std::string group_name = |
+ base::FieldTrialList::FindFullName(kPrecacheFieldTrialName); |
+ // group_name should only be empty if the Precache trial does not exist. |
+ if (!group_name.empty()) { |
+ // Register matching synthetic trials for 15-day and 1-day candidates. |
+ if (time_ago <= base::TimeDelta::FromDays(15)) |
+ ChromeMetricsServiceAccessor::RegisterSyntheticFieldTrial( |
+ kPrecacheSynthetic15D, group_name); |
+ if (time_ago <= base::TimeDelta::FromDays(1)) |
+ ChromeMetricsServiceAccessor::RegisterSyntheticFieldTrial( |
+ kPrecacheSynthetic1D, group_name); |
+ } |
+} |
+ |
} // namespace precache |