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

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

Issue 2435683003: Cleanup desktop NTP metrics recording, part 2 (Closed)
Patch Set: review Created 4 years, 1 month 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 104 matching lines...) Expand 10 before | Expand all | Expand 10 after
115 DVLOG(1) << "NTP URL changed from \"" << logger->ntp_url_ << "\" to \"" 115 DVLOG(1) << "NTP URL changed from \"" << logger->ntp_url_ << "\" to \""
116 << entry->GetURL() << "\""; 116 << entry->GetURL() << "\"";
117 logger->ntp_url_ = entry->GetURL(); 117 logger->ntp_url_ = entry->GetURL();
118 } 118 }
119 119
120 return logger; 120 return logger;
121 } 121 }
122 122
123 void NTPUserDataLogger::LogEvent(NTPLoggingEventType event, 123 void NTPUserDataLogger::LogEvent(NTPLoggingEventType event,
124 base::TimeDelta time) { 124 base::TimeDelta time) {
125 switch (event) { 125 DCHECK_EQ(NTP_ALL_TILES_LOADED, event);
126 case NTP_SERVER_SIDE_SUGGESTION: 126 EmitNtpStatistics(time);
127 has_server_side_suggestions_ = true;
128 number_of_tiles_++;
129 return;
130 case NTP_CLIENT_SIDE_SUGGESTION:
131 has_client_side_suggestions_ = true;
132 number_of_tiles_++;
133 return;
134 case NTP_ALL_TILES_LOADED:
135 EmitNtpStatistics(time);
136 return;
137 }
138 NOTREACHED();
139 } 127 }
140 128
141 void NTPUserDataLogger::LogMostVisitedImpression( 129 void NTPUserDataLogger::LogMostVisitedImpression(
142 int position, NTPLoggingTileSource tile_source) { 130 int position, NTPLoggingTileSource tile_source) {
143 if ((position >= kNumMostVisited) || impression_was_logged_[position]) { 131 if ((position >= kNumMostVisited) || impression_was_logged_[position]) {
144 return; 132 return;
145 } 133 }
146 impression_was_logged_[position] = true; 134 impression_was_logged_[position] = true;
147 135
136 switch (tile_source) {
137 case NTPLoggingTileSource::CLIENT:
138 has_client_side_suggestions_ = true;
139 break;
140 case NTPLoggingTileSource::SERVER:
141 has_server_side_suggestions_ = true;
142 break;
143 }
144
148 UMA_HISTOGRAM_ENUMERATION(kMostVisitedImpressionHistogramName, position, 145 UMA_HISTOGRAM_ENUMERATION(kMostVisitedImpressionHistogramName, position,
149 kNumMostVisited); 146 kNumMostVisited);
150 147
151 // Cannot rely on UMA histograms macro because the name of the histogram is 148 // Cannot rely on UMA histograms macro because the name of the histogram is
152 // generated dynamically. 149 // generated dynamically.
153 base::HistogramBase* counter = base::LinearHistogram::FactoryGet( 150 base::HistogramBase* counter = base::LinearHistogram::FactoryGet(
154 base::StringPrintf(kMostVisitedImpressionHistogramWithProvider, 151 base::StringPrintf(kMostVisitedImpressionHistogramWithProvider,
155 GetSourceName(tile_source).c_str()), 152 GetSourceName(tile_source).c_str()),
156 1, 153 1,
157 kNumMostVisited, 154 kNumMostVisited,
(...skipping 20 matching lines...) Expand all
178 175
179 // Records the action. This will be available as a time-stamped stream 176 // Records the action. This will be available as a time-stamped stream
180 // server-side and can be used to compute time-to-long-dwell. 177 // server-side and can be used to compute time-to-long-dwell.
181 content::RecordAction(base::UserMetricsAction("MostVisited_Clicked")); 178 content::RecordAction(base::UserMetricsAction("MostVisited_Clicked"));
182 } 179 }
183 180
184 NTPUserDataLogger::NTPUserDataLogger(content::WebContents* contents) 181 NTPUserDataLogger::NTPUserDataLogger(content::WebContents* contents)
185 : content::WebContentsObserver(contents), 182 : content::WebContentsObserver(contents),
186 has_server_side_suggestions_(false), 183 has_server_side_suggestions_(false),
187 has_client_side_suggestions_(false), 184 has_client_side_suggestions_(false),
188 number_of_tiles_(0),
189 has_emitted_(false), 185 has_emitted_(false),
190 during_startup_(!AfterStartupTaskUtils::IsBrowserStartupComplete()) { 186 during_startup_(!AfterStartupTaskUtils::IsBrowserStartupComplete()) {
191 // We record metrics about session data here because when this class typically 187 // We record metrics about session data here because when this class typically
192 // emits metrics it is too late. This session data would theoretically have 188 // emits metrics it is too late. This session data would theoretically have
193 // been used to populate the page, and we want to learn about its state when 189 // been used to populate the page, and we want to learn about its state when
194 // the NTP is being generated. 190 // the NTP is being generated.
195 RecordSyncSessionMetrics(contents); 191 RecordSyncSessionMetrics(contents);
196 } 192 }
197 193
198 // content::WebContentsObserver override 194 // content::WebContentsObserver override
199 void NTPUserDataLogger::NavigationEntryCommitted( 195 void NTPUserDataLogger::NavigationEntryCommitted(
200 const content::LoadCommittedDetails& load_details) { 196 const content::LoadCommittedDetails& load_details) {
201 NavigatedFromURLToURL(load_details.previous_url, 197 NavigatedFromURLToURL(load_details.previous_url,
202 load_details.entry->GetURL()); 198 load_details.entry->GetURL());
203 } 199 }
204 200
205 void NTPUserDataLogger::NavigatedFromURLToURL(const GURL& from, 201 void NTPUserDataLogger::NavigatedFromURLToURL(const GURL& from,
206 const GURL& to) { 202 const GURL& to) {
207 // User is returning to NTP, probably via the back button; reset stats. 203 // User is returning to NTP, probably via the back button; reset stats.
208 if (from.is_valid() && to.is_valid() && (to == ntp_url_)) { 204 if (from.is_valid() && to.is_valid() && (to == ntp_url_)) {
209 DVLOG(1) << "Returning to New Tab Page"; 205 DVLOG(1) << "Returning to New Tab Page";
210 impression_was_logged_.reset(); 206 impression_was_logged_.reset();
211 has_emitted_ = false; 207 has_emitted_ = false;
212 number_of_tiles_ = 0;
213 has_server_side_suggestions_ = false; 208 has_server_side_suggestions_ = false;
214 has_client_side_suggestions_ = false; 209 has_client_side_suggestions_ = false;
215 } 210 }
216 } 211 }
217 212
218 void NTPUserDataLogger::EmitNtpStatistics(base::TimeDelta load_time) { 213 void NTPUserDataLogger::EmitNtpStatistics(base::TimeDelta load_time) {
219 // We only send statistics once per page. 214 // We only send statistics once per page.
220 if (has_emitted_) 215 if (has_emitted_)
221 return; 216 return;
217
218 size_t number_of_tiles = impression_was_logged_.count();
222 DVLOG(1) << "Emitting NTP load time: " << load_time << ", " 219 DVLOG(1) << "Emitting NTP load time: " << load_time << ", "
223 << "number of tiles: " << number_of_tiles_; 220 << "number of tiles: " << number_of_tiles;
224 221
225 LogLoadTimeHistogram("NewTabPage.LoadTime", load_time); 222 LogLoadTimeHistogram("NewTabPage.LoadTime", load_time);
226 223
227 // Split between ML and MV. 224 // Split between ML and MV.
228 std::string type = has_server_side_suggestions_ ? 225 std::string type = has_server_side_suggestions_ ?
229 "MostLikely" : "MostVisited"; 226 "MostLikely" : "MostVisited";
230 LogLoadTimeHistogram("NewTabPage.LoadTime." + type, load_time); 227 LogLoadTimeHistogram("NewTabPage.LoadTime." + type, load_time);
231 // Split between Web and Local. 228 // Split between Web and Local.
232 std::string source = ntp_url_.SchemeIsHTTPOrHTTPS() ? "Web" : "LocalNTP"; 229 std::string source = ntp_url_.SchemeIsHTTPOrHTTPS() ? "Web" : "LocalNTP";
233 LogLoadTimeHistogram("NewTabPage.LoadTime." + source, load_time); 230 LogLoadTimeHistogram("NewTabPage.LoadTime." + source, load_time);
234 231
235 // Split between Startup and non-startup. 232 // Split between Startup and non-startup.
236 std::string status = during_startup_ ? "Startup" : "NewTab"; 233 std::string status = during_startup_ ? "Startup" : "NewTab";
237 LogLoadTimeHistogram("NewTabPage.LoadTime." + status, load_time); 234 LogLoadTimeHistogram("NewTabPage.LoadTime." + status, load_time);
238 235
239 has_server_side_suggestions_ = false;
240 has_client_side_suggestions_ = false;
241 UMA_HISTOGRAM_CUSTOM_COUNTS( 236 UMA_HISTOGRAM_CUSTOM_COUNTS(
242 "NewTabPage.NumberOfTiles", number_of_tiles_, 1, kNumMostVisited, 237 "NewTabPage.NumberOfTiles", number_of_tiles, 1, kNumMostVisited,
243 kNumMostVisited + 1); 238 kNumMostVisited + 1);
244 number_of_tiles_ = 0;
245 has_emitted_ = true; 239 has_emitted_ = true;
246 during_startup_ = false; 240 during_startup_ = false;
247 } 241 }
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