Log UMA metrics with NTP tile data age/staleness
Most notably, we want to capture this metric for server-side suggestions
in order to detect regressions in upcoming UI changes (Chrome Home).
Bug: 763946
Cq-Include-Trybots: master.tryserver.chromium.linux:closure_compilation
Change-Id: I4cb7e6cea6026ad33182f70d7434ab59f7fcb0af
Reviewed-on: https://chromium-review.googlesource.com/708736
Reviewed-by: Alexei Svitkine <[email protected]>
Reviewed-by: Daniel Cheng <[email protected]>
Reviewed-by: Marc Treib <[email protected]>
Reviewed-by: Sylvain Defresne <[email protected]>
Reviewed-by: Peter Conn <[email protected]>
Commit-Queue: Mikel Astiz <[email protected]>
Cr-Commit-Position: refs/heads/master@{#508391}
diff --git a/components/ntp_tiles/metrics.cc b/components/ntp_tiles/metrics.cc
index 0723c3de..f292b97 100644
--- a/components/ntp_tiles/metrics.cc
+++ b/components/ntp_tiles/metrics.cc
@@ -6,7 +6,7 @@
#include <string>
-#include "base/metrics/histogram.h"
+#include "base/metrics/histogram_functions.h"
#include "base/metrics/histogram_macros.h"
#include "base/metrics/sparse_histogram.h"
#include "base/strings/stringprintf.h"
@@ -37,17 +37,10 @@
const char kTileTypeSuffixThumbnail[] = "Thumbnail";
const char kTileTypeSuffixThumbnailFailed[] = "ThumbnailFailed";
-// Log an event for a given |histogram| at a given element |position|. This
-// routine exists because regular histogram macros are cached thus can't be used
-// if the name of the histogram will change at a given call site.
-void LogHistogramEvent(const std::string& histogram,
- int position,
- int num_sites) {
- base::HistogramBase* counter = base::LinearHistogram::FactoryGet(
- histogram, 1, num_sites, num_sites + 1,
- base::Histogram::kUmaTargetedHistogramFlag);
- if (counter)
- counter->Add(position);
+void LogUmaHistogramAge(const std::string& name, const base::TimeDelta& value) {
+ // Log the value in number of seconds.
+ base::UmaHistogramCustomCounts(name, value.InSeconds(), 5,
+ base::TimeDelta::FromDays(14).InSeconds(), 20);
}
std::string GetSourceHistogramName(TileSource source) {
@@ -100,19 +93,28 @@
impression.index, kMaxNumTiles);
std::string source_name = GetSourceHistogramName(impression.source);
- std::string impression_histogram = base::StringPrintf(
- "NewTabPage.SuggestionsImpression.%s", source_name.c_str());
- LogHistogramEvent(impression_histogram, impression.index, kMaxNumTiles);
+ base::UmaHistogramExactLinear(
+ base::StringPrintf("NewTabPage.SuggestionsImpression.%s",
+ source_name.c_str()),
+ impression.index, kMaxNumTiles);
+
+ if (!impression.data_generation_time.is_null()) {
+ const base::TimeDelta age =
+ base::Time::Now() - impression.data_generation_time;
+ LogUmaHistogramAge("NewTabPage.SuggestionsImpressionAge", age);
+ LogUmaHistogramAge(
+ base::StringPrintf("NewTabPage.SuggestionsImpressionAge.%s",
+ source_name.c_str()),
+ age);
+ }
UMA_HISTOGRAM_ENUMERATION("NewTabPage.TileTitle",
static_cast<int>(impression.title_source),
kLastTitleSource + 1);
- std::string title_source_histogram =
+ base::UmaHistogramExactLinear(
base::StringPrintf("NewTabPage.TileTitle.%s",
- GetSourceHistogramName(impression.source).c_str());
- LogHistogramEvent(title_source_histogram,
- static_cast<int>(impression.title_source),
- kLastTitleSource + 1);
+ GetSourceHistogramName(impression.source).c_str()),
+ static_cast<int>(impression.title_source), kLastTitleSource + 1);
if (impression.visual_type > LAST_RECORDED_TILE_TYPE) {
return;
@@ -121,10 +123,9 @@
UMA_HISTOGRAM_ENUMERATION("NewTabPage.TileType", impression.visual_type,
LAST_RECORDED_TILE_TYPE + 1);
- std::string tile_type_histogram =
- base::StringPrintf("NewTabPage.TileType.%s", source_name.c_str());
- LogHistogramEvent(tile_type_histogram, impression.visual_type,
- LAST_RECORDED_TILE_TYPE + 1);
+ base::UmaHistogramExactLinear(
+ base::StringPrintf("NewTabPage.TileType.%s", source_name.c_str()),
+ impression.visual_type, LAST_RECORDED_TILE_TYPE + 1);
const char* tile_type_suffix = GetTileTypeSuffix(impression.visual_type);
if (tile_type_suffix) {
@@ -136,10 +137,10 @@
impression.url_for_rappor);
}
- std::string icon_impression_histogram = base::StringPrintf(
- "NewTabPage.SuggestionsImpression.%s", tile_type_suffix);
- LogHistogramEvent(icon_impression_histogram, impression.index,
- kMaxNumTiles);
+ base::UmaHistogramExactLinear(
+ base::StringPrintf("NewTabPage.SuggestionsImpression.%s",
+ tile_type_suffix),
+ impression.index, kMaxNumTiles);
}
}
@@ -147,37 +148,44 @@
UMA_HISTOGRAM_ENUMERATION("NewTabPage.MostVisited", impression.index,
kMaxNumTiles);
- std::string histogram =
- base::StringPrintf("NewTabPage.MostVisited.%s",
- GetSourceHistogramName(impression.source).c_str());
- LogHistogramEvent(histogram, impression.index, kMaxNumTiles);
+ std::string source_name = GetSourceHistogramName(impression.source);
+ base::UmaHistogramExactLinear(
+ base::StringPrintf("NewTabPage.MostVisited.%s", source_name.c_str()),
+ impression.index, kMaxNumTiles);
+
+ if (!impression.data_generation_time.is_null()) {
+ const base::TimeDelta age =
+ base::Time::Now() - impression.data_generation_time;
+ LogUmaHistogramAge("NewTabPage.MostVisitedAge", age);
+ LogUmaHistogramAge(
+ base::StringPrintf("NewTabPage.MostVisitedAge.%s", source_name.c_str()),
+ age);
+ }
const char* tile_type_suffix = GetTileTypeSuffix(impression.visual_type);
if (tile_type_suffix) {
- std::string tile_type_histogram =
- base::StringPrintf("NewTabPage.MostVisited.%s", tile_type_suffix);
- LogHistogramEvent(tile_type_histogram, impression.index, kMaxNumTiles);
+ base::UmaHistogramExactLinear(
+ base::StringPrintf("NewTabPage.MostVisited.%s", tile_type_suffix),
+ impression.index, kMaxNumTiles);
}
UMA_HISTOGRAM_ENUMERATION("NewTabPage.TileTitleClicked",
static_cast<int>(impression.title_source),
kLastTitleSource + 1);
- std::string name_histogram =
+ base::UmaHistogramExactLinear(
base::StringPrintf("NewTabPage.TileTitleClicked.%s",
- GetSourceHistogramName(impression.source).c_str());
- LogHistogramEvent(name_histogram, static_cast<int>(impression.title_source),
- kLastTitleSource + 1);
+ GetSourceHistogramName(impression.source).c_str()),
+ static_cast<int>(impression.title_source), kLastTitleSource + 1);
if (impression.visual_type <= LAST_RECORDED_TILE_TYPE) {
UMA_HISTOGRAM_ENUMERATION("NewTabPage.TileTypeClicked",
impression.visual_type,
LAST_RECORDED_TILE_TYPE + 1);
- std::string type_histogram =
+ base::UmaHistogramExactLinear(
base::StringPrintf("NewTabPage.TileTypeClicked.%s",
- GetSourceHistogramName(impression.source).c_str());
- LogHistogramEvent(type_histogram, impression.visual_type,
- LAST_RECORDED_TILE_TYPE + 1);
+ GetSourceHistogramName(impression.source).c_str()),
+ impression.visual_type, LAST_RECORDED_TILE_TYPE + 1);
}
}