Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1646)

Side by Side Diff: chrome/browser/precache/precache_util.cc

Issue 2596093002: Create a synthetic field trial for precache. (Closed)
Patch Set: Created 3 years, 12 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright 2016 The Chromium Authors. All rights reserved. 1 // Copyright 2016 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "chrome/browser/precache/precache_util.h" 5 #include "chrome/browser/precache/precache_util.h"
6 6
7 #include <vector>
8
9 #include "base/metrics/field_trial.h"
10 #include "base/strings/string_util.h"
7 #include "base/time/time.h" 11 #include "base/time/time.h"
8 #include "chrome/browser/browser_process.h" 12 #include "chrome/browser/browser_process.h"
13 #include "chrome/browser/metrics/chrome_metrics_service_accessor.h"
9 #include "chrome/browser/precache/precache_manager_factory.h" 14 #include "chrome/browser/precache/precache_manager_factory.h"
10 #include "chrome/browser/profiles/profile.h" 15 #include "chrome/browser/profiles/profile.h"
11 #include "chrome/browser/profiles/profile_manager.h" 16 #include "chrome/browser/profiles/profile_manager.h"
12 #include "components/data_use_measurement/content/content_url_request_classifier .h" 17 #include "components/data_use_measurement/content/content_url_request_classifier .h"
13 #include "components/precache/content/precache_manager.h" 18 #include "components/precache/content/precache_manager.h"
19 #include "components/variations/metrics_util.h"
14 #include "content/public/browser/browser_thread.h" 20 #include "content/public/browser/browser_thread.h"
15 #include "net/url_request/url_request.h" 21 #include "net/url_request/url_request.h"
16 #include "url/gurl.h" 22 #include "url/gurl.h"
17 23
18 namespace net { 24 namespace net {
19 class HttpResponseInfo; 25 class HttpResponseInfo;
20 } 26 }
21 27
22 namespace { 28 namespace {
23 29
30 const char kPrecacheFieldTrialName[] = "Precache";
31 const char kPrecacheSyntheticFieldTrialName[] = "PrecacheSynthetic";
32
33 // Users who precached in the last |kDaysForPrecacheCandidates| and
34 // |kDaysForRecentPrecacheCandidates| days will be placed in separate trial
35 // groups.
36 const size_t kDaysForPrecacheCandidates = 15;
37 const size_t kDaysForRecentPrecacheCandidates = 1;
jamartin 2016/12/21 23:54:33 (nit) s/kDaysForPrecacheCandidates/kDaysForPrecac
twifkak 2017/01/05 23:53:14 You read my code incorrectly. Keep in mind that th
38
24 void UpdatePrecacheMetricsAndStateOnUIThread(const GURL& url, 39 void UpdatePrecacheMetricsAndStateOnUIThread(const GURL& url,
25 const GURL& referrer, 40 const GURL& referrer,
26 base::TimeDelta latency, 41 base::TimeDelta latency,
27 const base::Time& fetch_time, 42 const base::Time& fetch_time,
28 const net::HttpResponseInfo& info, 43 const net::HttpResponseInfo& info,
29 int64_t size, 44 int64_t size,
30 bool is_user_traffic, 45 bool is_user_traffic,
31 void* profile_id) { 46 void* profile_id) {
32 DCHECK_CURRENTLY_ON(content::BrowserThread::UI); 47 DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
33 48
(...skipping 29 matching lines...) Expand all
63 // Record precache metrics when a fetch is completed successfully, if 78 // Record precache metrics when a fetch is completed successfully, if
64 // precaching is allowed. 79 // precaching is allowed.
65 content::BrowserThread::PostTask( 80 content::BrowserThread::PostTask(
66 content::BrowserThread::UI, FROM_HERE, 81 content::BrowserThread::UI, FROM_HERE,
67 base::Bind(&UpdatePrecacheMetricsAndStateOnUIThread, request->url(), 82 base::Bind(&UpdatePrecacheMetricsAndStateOnUIThread, request->url(),
68 GURL(request->referrer()), latency, base::Time::Now(), 83 GURL(request->referrer()), latency, base::Time::Now(),
69 request->response_info(), received_content_length, 84 request->response_info(), received_content_length,
70 data_use_measurement::IsUserRequest(*request), profile_id)); 85 data_use_measurement::IsUserRequest(*request), profile_id));
71 } 86 }
72 87
88 void RegisterPrecacheSyntheticFieldTrial(const base::Time& last_precache_time) {
89 std::vector<uint32_t> groups;
90 base::TimeDelta time_ago = base::Time::Now() - last_precache_time;
91 std::string group_name =
92 base::FieldTrialList::FindFullName(kPrecacheFieldTrialName);
93 if (time_ago <= base::TimeDelta::FromDays(kDaysForPrecacheCandidates))
94 groups.push_back(metrics::HashName(group_name));
95 if (time_ago <= base::TimeDelta::FromDays(kDaysForRecentPrecacheCandidates))
96 groups.push_back(metrics::HashName(group_name + "Recent"));
97 ChromeMetricsServiceAccessor::RegisterSyntheticMultiGroupFieldTrial(
jamartin 2016/12/21 23:54:33 I couldn't find any other caller for this function
twifkak 2017/01/05 23:53:14 It looks like it was implemented in https://chromi
98 kPrecacheSyntheticFieldTrialName, groups);
99 }
100
73 } // namespace precache 101 } // namespace precache
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698