| Index: chrome/browser/ui/webui/ntp/ntp_user_data_logger.cc
|
| diff --git a/chrome/browser/ui/webui/ntp/ntp_user_data_logger.cc b/chrome/browser/ui/webui/ntp/ntp_user_data_logger.cc
|
| index 7f53eb9a05ab4cf5d8a48bd59fd00a93130b9912..959925fe511a8bae098da2d1b6f4bad341bad7c0 100644
|
| --- a/chrome/browser/ui/webui/ntp/ntp_user_data_logger.cc
|
| +++ b/chrome/browser/ui/webui/ntp/ntp_user_data_logger.cc
|
| @@ -93,38 +93,42 @@ void NTPUserDataLogger::EmitNtpStatistics() {
|
| UMA_HISTOGRAM_COUNTS("NewTabPage.NumberOfMouseOvers", number_of_mouseovers_);
|
| number_of_mouseovers_ = 0;
|
|
|
| - // Only log the following statistics if at least one tile is recorded. This
|
| - // check is required because the statistics are emitted whenever the user
|
| - // changes tab away from the NTP. However, if the user comes back to that NTP
|
| - // later the statistics are not regenerated (i.e. they are all 0). If we log
|
| - // them again we get a strong bias.
|
| - if (number_of_tiles_ > 0) {
|
| - UMA_HISTOGRAM_ENUMERATION(
|
| - "NewTabPage.SuggestionsType",
|
| - has_server_side_suggestions_ ? SERVER_SIDE : CLIENT_SIDE,
|
| - SUGGESTIONS_TYPE_COUNT);
|
| - has_server_side_suggestions_ = false;
|
| - UMA_HISTOGRAM_NTP_TILES("NewTabPage.NumberOfTiles", number_of_tiles_);
|
| - number_of_tiles_ = 0;
|
| - UMA_HISTOGRAM_NTP_TILES("NewTabPage.NumberOfThumbnailTiles",
|
| - number_of_thumbnail_tiles_);
|
| - number_of_thumbnail_tiles_ = 0;
|
| - UMA_HISTOGRAM_NTP_TILES("NewTabPage.NumberOfGrayTiles",
|
| - number_of_gray_tiles_);
|
| - number_of_gray_tiles_ = 0;
|
| - UMA_HISTOGRAM_NTP_TILES("NewTabPage.NumberOfExternalTiles",
|
| - number_of_external_tiles_);
|
| - number_of_external_tiles_ = 0;
|
| - UMA_HISTOGRAM_NTP_TILES("NewTabPage.NumberOfThumbnailErrors",
|
| - number_of_thumbnail_errors_);
|
| - number_of_thumbnail_errors_ = 0;
|
| - UMA_HISTOGRAM_NTP_TILES("NewTabPage.NumberOfGrayTileFallbacks",
|
| - number_of_gray_tile_fallbacks_);
|
| - number_of_gray_tile_fallbacks_ = 0;
|
| - UMA_HISTOGRAM_NTP_TILES("NewTabPage.NumberOfExternalTileFallbacks",
|
| - number_of_external_tile_fallbacks_);
|
| - number_of_external_tile_fallbacks_ = 0;
|
| - }
|
| + // We only send statistics once per page.
|
| + // And we don't send if there are no tiles recorded.
|
| + if (has_emitted_ || !number_of_tiles_)
|
| + return;
|
| +
|
| + UMA_HISTOGRAM_ENUMERATION(
|
| + "NewTabPage.SuggestionsType",
|
| + has_server_side_suggestions_ ? SERVER_SIDE : CLIENT_SIDE,
|
| + SUGGESTIONS_TYPE_COUNT);
|
| + has_server_side_suggestions_ = false;
|
| + UMA_HISTOGRAM_NTP_TILES("NewTabPage.NumberOfTiles", number_of_tiles_);
|
| + number_of_tiles_ = 0;
|
| + UMA_HISTOGRAM_NTP_TILES("NewTabPage.NumberOfThumbnailTiles",
|
| + number_of_thumbnail_tiles_);
|
| + number_of_thumbnail_tiles_ = 0;
|
| + UMA_HISTOGRAM_NTP_TILES("NewTabPage.NumberOfGrayTiles",
|
| + number_of_gray_tiles_);
|
| + number_of_gray_tiles_ = 0;
|
| + UMA_HISTOGRAM_NTP_TILES("NewTabPage.NumberOfExternalTiles",
|
| + number_of_external_tiles_);
|
| + number_of_external_tiles_ = 0;
|
| + UMA_HISTOGRAM_NTP_TILES("NewTabPage.NumberOfThumbnailErrors",
|
| + number_of_thumbnail_errors_);
|
| + number_of_thumbnail_errors_ = 0;
|
| + UMA_HISTOGRAM_NTP_TILES("NewTabPage.NumberOfGrayTileFallbacks",
|
| + number_of_gray_tile_fallbacks_);
|
| + number_of_gray_tile_fallbacks_ = 0;
|
| + UMA_HISTOGRAM_NTP_TILES("NewTabPage.NumberOfExternalTileFallbacks",
|
| + number_of_external_tile_fallbacks_);
|
| + number_of_external_tile_fallbacks_ = 0;
|
| + UMA_HISTOGRAM_CUSTOM_TIMES("NewTabPage.LoadTime",
|
| + load_time_,
|
| + base::TimeDelta::FromMilliseconds(1),
|
| + base::TimeDelta::FromSeconds(60), 100);
|
| + load_time_ = base::TimeDelta::FromMilliseconds(0);
|
| + has_emitted_ = true;
|
| }
|
|
|
| void NTPUserDataLogger::LogEvent(NTPLoggingEventType event,
|
| @@ -163,6 +167,12 @@ void NTPUserDataLogger::LogEvent(NTPLoggingEventType event,
|
| case NTP_MOUSEOVER:
|
| number_of_mouseovers_++;
|
| break;
|
| + case NTP_TILE_LOADED:
|
| + // The time at which the last tile has loaded (title, thumbnail or single)
|
| + // is a good proxy for the total load time of the NTP, therefore we keep
|
| + // the max as the load time.
|
| + load_time_ = std::max(load_time_, time);
|
| + break;
|
| default:
|
| NOTREACHED();
|
| }
|
| @@ -237,5 +247,6 @@ NTPUserDataLogger::NTPUserDataLogger(content::WebContents* contents)
|
| number_of_thumbnail_errors_(0),
|
| number_of_gray_tile_fallbacks_(0),
|
| number_of_external_tile_fallbacks_(0),
|
| - number_of_mouseovers_(0) {
|
| + number_of_mouseovers_(0),
|
| + has_emitted_(false) {
|
| }
|
|
|