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

Side by Side Diff: chrome/browser/ui/webui/ntp/ntp_user_data_logger.cc

Issue 2429523002: Cleanup desktop NTP metrics recording (Closed)
Patch Set: . Created 4 years, 2 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 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 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/ui/webui/ntp/ntp_user_data_logger.h" 5 #include "chrome/browser/ui/webui/ntp/ntp_user_data_logger.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 #include <string> 8 #include <string>
9 9
10 #include "base/metrics/histogram_macros.h" 10 #include "base/metrics/histogram_macros.h"
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
47 switch (tile_source) { 47 switch (tile_source) {
48 case NTPLoggingTileSource::CLIENT: 48 case NTPLoggingTileSource::CLIENT:
49 return "client"; 49 return "client";
50 case NTPLoggingTileSource::SERVER: 50 case NTPLoggingTileSource::SERVER:
51 return "server"; 51 return "server";
52 } 52 }
53 NOTREACHED(); 53 NOTREACHED();
54 return std::string(); 54 return std::string();
55 } 55 }
56 56
57 void RecordSyncSessionMetrics(content::WebContents* contents) {
58 if (!contents)
59 return;
60 browser_sync::ProfileSyncService* sync =
61 ProfileSyncServiceFactory::GetForProfile(
62 Profile::FromBrowserContext(contents->GetBrowserContext()));
63 if (!sync)
64 return;
65 sync_sessions::SessionsSyncManager* sessions =
66 static_cast<sync_sessions::SessionsSyncManager*>(
67 sync->GetSessionsSyncableService());
68 sync_sessions::SyncSessionsMetrics::RecordYoungestForeignTabAgeOnNTP(
69 sessions);
70 }
71
57 } // namespace 72 } // namespace
58 73
59 DEFINE_WEB_CONTENTS_USER_DATA_KEY(NTPUserDataLogger); 74 DEFINE_WEB_CONTENTS_USER_DATA_KEY(NTPUserDataLogger);
60 75
61 76
62 // Log a time event for a given |histogram| at a given |value|. This 77 // Log a time event for a given |histogram| at a given |value|. This
63 // routine exists because regular histogram macros are cached thus can't be used 78 // routine exists because regular histogram macros are cached thus can't be used
64 // if the name of the histogram will change at a given call site. 79 // if the name of the histogram will change at a given call site.
65 void logLoadTimeHistogram(const std::string& histogram, base::TimeDelta value) { 80 void LogLoadTimeHistogram(const std::string& histogram, base::TimeDelta value) {
66 base::HistogramBase* counter = base::Histogram::FactoryTimeGet( 81 base::HistogramBase* counter = base::Histogram::FactoryTimeGet(
67 histogram, 82 histogram,
68 base::TimeDelta::FromMilliseconds(1), 83 base::TimeDelta::FromMilliseconds(1),
69 base::TimeDelta::FromSeconds(60), 100, 84 base::TimeDelta::FromSeconds(60), 100,
70 base::Histogram::kUmaTargetedHistogramFlag); 85 base::Histogram::kUmaTargetedHistogramFlag);
71 if (counter) 86 if (counter)
72 counter->AddTime(value); 87 counter->AddTime(value);
73 } 88 }
74 89
75 90
(...skipping 27 matching lines...) Expand all
103 } 118 }
104 119
105 return logger; 120 return logger;
106 } 121 }
107 122
108 void NTPUserDataLogger::LogEvent(NTPLoggingEventType event, 123 void NTPUserDataLogger::LogEvent(NTPLoggingEventType event,
109 base::TimeDelta time) { 124 base::TimeDelta time) {
110 switch (event) { 125 switch (event) {
111 case NTP_SERVER_SIDE_SUGGESTION: 126 case NTP_SERVER_SIDE_SUGGESTION:
112 has_server_side_suggestions_ = true; 127 has_server_side_suggestions_ = true;
113 break; 128 number_of_tiles_++;
129 return;
114 case NTP_CLIENT_SIDE_SUGGESTION: 130 case NTP_CLIENT_SIDE_SUGGESTION:
115 has_client_side_suggestions_ = true; 131 has_client_side_suggestions_ = true;
116 break;
117 case NTP_TILE:
118 // TODO(sfiera): remove NTP_TILE and use NTP_*_SIDE_SUGGESTION.
119 number_of_tiles_++; 132 number_of_tiles_++;
120 break; 133 return;
121 case NTP_TILE_LOADED:
122 // We no longer emit statistics for the multi-iframe NTP.
123 break;
124 case NTP_ALL_TILES_LOADED: 134 case NTP_ALL_TILES_LOADED:
125 EmitNtpStatistics(time); 135 EmitNtpStatistics(time);
126 break; 136 return;
127 default:
128 NOTREACHED();
129 } 137 }
138 NOTREACHED();
130 } 139 }
131 140
132 void NTPUserDataLogger::LogMostVisitedImpression( 141 void NTPUserDataLogger::LogMostVisitedImpression(
133 int position, NTPLoggingTileSource tile_source) { 142 int position, NTPLoggingTileSource tile_source) {
134 if ((position >= kNumMostVisited) || impression_was_logged_[position]) { 143 if ((position >= kNumMostVisited) || impression_was_logged_[position]) {
135 return; 144 return;
136 } 145 }
137 impression_was_logged_[position] = true; 146 impression_was_logged_[position] = true;
138 147
139 UMA_HISTOGRAM_ENUMERATION(kMostVisitedImpressionHistogramName, position, 148 UMA_HISTOGRAM_ENUMERATION(kMostVisitedImpressionHistogramName, position,
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
171 // server-side and can be used to compute time-to-long-dwell. 180 // server-side and can be used to compute time-to-long-dwell.
172 content::RecordAction(base::UserMetricsAction("MostVisited_Clicked")); 181 content::RecordAction(base::UserMetricsAction("MostVisited_Clicked"));
173 } 182 }
174 183
175 NTPUserDataLogger::NTPUserDataLogger(content::WebContents* contents) 184 NTPUserDataLogger::NTPUserDataLogger(content::WebContents* contents)
176 : content::WebContentsObserver(contents), 185 : content::WebContentsObserver(contents),
177 has_server_side_suggestions_(false), 186 has_server_side_suggestions_(false),
178 has_client_side_suggestions_(false), 187 has_client_side_suggestions_(false),
179 number_of_tiles_(0), 188 number_of_tiles_(0),
180 has_emitted_(false), 189 has_emitted_(false),
181 during_startup_(false) { 190 during_startup_(!AfterStartupTaskUtils::IsBrowserStartupComplete()) {
182 during_startup_ = !AfterStartupTaskUtils::IsBrowserStartupComplete();
183
184 // We record metrics about session data here because when this class typically 191 // We record metrics about session data here because when this class typically
185 // emits metrics it is too late. This session data would theoretically have 192 // emits metrics it is too late. This session data would theoretically have
186 // been used to populate the page, and we want to learn about its state when 193 // been used to populate the page, and we want to learn about its state when
187 // the NTP is being generated. 194 // the NTP is being generated.
188 if (contents) { 195 RecordSyncSessionMetrics(contents);
189 browser_sync::ProfileSyncService* sync =
190 ProfileSyncServiceFactory::GetForProfile(
191 Profile::FromBrowserContext(contents->GetBrowserContext()));
192 if (sync) {
193 sync_sessions::SessionsSyncManager* sessions =
194 static_cast<sync_sessions::SessionsSyncManager*>(
195 sync->GetSessionsSyncableService());
196 if (sessions) {
197 sync_sessions::SyncSessionsMetrics::RecordYoungestForeignTabAgeOnNTP(
198 sessions);
199 }
200 }
201 }
202 } 196 }
203 197
204 // content::WebContentsObserver override 198 // content::WebContentsObserver override
205 void NTPUserDataLogger::NavigationEntryCommitted( 199 void NTPUserDataLogger::NavigationEntryCommitted(
206 const content::LoadCommittedDetails& load_details) { 200 const content::LoadCommittedDetails& load_details) {
207 NavigatedFromURLToURL(load_details.previous_url, 201 NavigatedFromURLToURL(load_details.previous_url,
208 load_details.entry->GetURL()); 202 load_details.entry->GetURL());
209 } 203 }
210 204
211 void NTPUserDataLogger::NavigatedFromURLToURL(const GURL& from, 205 void NTPUserDataLogger::NavigatedFromURLToURL(const GURL& from,
212 const GURL& to) { 206 const GURL& to) {
213 // User is returning to NTP, probably via the back button; reset stats. 207 // User is returning to NTP, probably via the back button; reset stats.
214 if (from.is_valid() && to.is_valid() && (to == ntp_url_)) { 208 if (from.is_valid() && to.is_valid() && (to == ntp_url_)) {
215 DVLOG(1) << "Returning to New Tab Page"; 209 DVLOG(1) << "Returning to New Tab Page";
216 impression_was_logged_.reset(); 210 impression_was_logged_.reset();
217 has_emitted_ = false; 211 has_emitted_ = false;
218 number_of_tiles_ = 0; 212 number_of_tiles_ = 0;
219 has_server_side_suggestions_ = false; 213 has_server_side_suggestions_ = false;
220 has_client_side_suggestions_ = false; 214 has_client_side_suggestions_ = false;
221 } 215 }
222 } 216 }
223 217
224 void NTPUserDataLogger::EmitNtpStatistics(base::TimeDelta load_time) { 218 void NTPUserDataLogger::EmitNtpStatistics(base::TimeDelta load_time) {
225 // We only send statistics once per page. 219 // We only send statistics once per page.
226 if (has_emitted_) 220 if (has_emitted_)
227 return; 221 return;
228 DVLOG(1) << "Emitting NTP load time: " << load_time << ", " 222 DVLOG(1) << "Emitting NTP load time: " << load_time << ", "
229 << "number of tiles: " << number_of_tiles_; 223 << "number of tiles: " << number_of_tiles_;
230 224
231 logLoadTimeHistogram("NewTabPage.LoadTime", load_time); 225 LogLoadTimeHistogram("NewTabPage.LoadTime", load_time);
232 226
233 // Split between ML and MV. 227 // Split between ML and MV.
234 std::string type = has_server_side_suggestions_ ? 228 std::string type = has_server_side_suggestions_ ?
235 "MostLikely" : "MostVisited"; 229 "MostLikely" : "MostVisited";
236 logLoadTimeHistogram("NewTabPage.LoadTime." + type, load_time); 230 LogLoadTimeHistogram("NewTabPage.LoadTime." + type, load_time);
237 // Split between Web and Local. 231 // Split between Web and Local.
238 std::string source = ntp_url_.SchemeIsHTTPOrHTTPS() ? "Web" : "LocalNTP"; 232 std::string source = ntp_url_.SchemeIsHTTPOrHTTPS() ? "Web" : "LocalNTP";
239 logLoadTimeHistogram("NewTabPage.LoadTime." + source, load_time); 233 LogLoadTimeHistogram("NewTabPage.LoadTime." + source, load_time);
240 234
241 // Split between Startup and non-startup. 235 // Split between Startup and non-startup.
242 std::string status = during_startup_ ? "Startup" : "NewTab"; 236 std::string status = during_startup_ ? "Startup" : "NewTab";
243 logLoadTimeHistogram("NewTabPage.LoadTime." + status, load_time); 237 LogLoadTimeHistogram("NewTabPage.LoadTime." + status, load_time);
244 238
245 has_server_side_suggestions_ = false; 239 has_server_side_suggestions_ = false;
246 has_client_side_suggestions_ = false; 240 has_client_side_suggestions_ = false;
247 UMA_HISTOGRAM_CUSTOM_COUNTS( 241 UMA_HISTOGRAM_CUSTOM_COUNTS(
248 "NewTabPage.NumberOfTiles", number_of_tiles_, 1, kNumMostVisited, 242 "NewTabPage.NumberOfTiles", number_of_tiles_, 1, kNumMostVisited,
249 kNumMostVisited + 1); 243 kNumMostVisited + 1);
250 number_of_tiles_ = 0; 244 number_of_tiles_ = 0;
251 has_emitted_ = true; 245 has_emitted_ = true;
252 during_startup_ = false; 246 during_startup_ = false;
253 } 247 }
OLDNEW
« no previous file with comments | « chrome/browser/ui/webui/ntp/ntp_user_data_logger.h ('k') | chrome/browser/ui/webui/ntp/ntp_user_data_logger_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698