blob: 4b44c146b45f24cae3645ff1b0b99c874a63d72f [file] [log] [blame]
treibb5f7233d2016-10-18 09:14:321// Copyright 2016 The Chromium Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#include "components/ntp_tiles/metrics.h"
6
7#include <string>
8
Mikel Astiza0f98cc2017-10-12 19:48:489#include "base/metrics/histogram_functions.h"
treibb5f7233d2016-10-18 09:14:3210#include "base/metrics/histogram_macros.h"
treibb5f7233d2016-10-18 09:14:3211#include "base/strings/stringprintf.h"
Kristi Park01ca1252019-05-10 22:39:0512#include "components/ntp_tiles/constants.h"
treibb5f7233d2016-10-18 09:14:3213
14namespace ntp_tiles {
15namespace metrics {
16
17namespace {
18
Friedrich Horschigefec0812017-09-28 18:50:1719const int kLastTitleSource = static_cast<int>(TileTitleSource::LAST);
20
treibb5f7233d2016-10-18 09:14:3221// Identifiers for the various tile sources.
22const char kHistogramClientName[] = "client";
23const char kHistogramServerName[] = "server";
Friedrich Horschig7706ef62017-08-25 08:20:0024const char kHistogramPopularName[] = "popular_fetched";
25const char kHistogramBakedInName[] = "popular_baked_in";
treibb5f7233d2016-10-18 09:14:3226const char kHistogramWhitelistName[] = "whitelist";
Yafei Duan3797cf42018-07-14 01:03:5827const char kHistogramHomepageName[] = "homepage";
kristiparkc0199772018-07-18 05:25:4228const char kHistogramCustomLinksName[] = "custom_links";
Cathy Li4892ee02019-05-22 22:58:1529const char kHistogramExploreName[] = "explore";
treibb5f7233d2016-10-18 09:14:3230
mastiz8619a462017-02-09 16:46:1331// Suffixes for the various icon types.
treib80f51222017-04-07 07:59:3632const char kTileTypeSuffixIconColor[] = "IconsColor";
33const char kTileTypeSuffixIconGray[] = "IconsGray";
34const char kTileTypeSuffixIconReal[] = "IconsReal";
mastiz8619a462017-02-09 16:46:1335
Mikel Astiza0f98cc2017-10-12 19:48:4836void LogUmaHistogramAge(const std::string& name, const base::TimeDelta& value) {
37 // Log the value in number of seconds.
38 base::UmaHistogramCustomCounts(name, value.InSeconds(), 5,
39 base::TimeDelta::FromDays(14).InSeconds(), 20);
treibb5f7233d2016-10-18 09:14:3240}
41
treib231212e2017-04-04 17:09:2242std::string GetSourceHistogramName(TileSource source) {
treibb5f7233d2016-10-18 09:14:3243 switch (source) {
treib231212e2017-04-04 17:09:2244 case TileSource::TOP_SITES:
treibb5f7233d2016-10-18 09:14:3245 return kHistogramClientName;
Friedrich Horschig7706ef62017-08-25 08:20:0046 case TileSource::POPULAR_BAKED_IN:
47 return kHistogramBakedInName;
treib231212e2017-04-04 17:09:2248 case TileSource::POPULAR:
treibb5f7233d2016-10-18 09:14:3249 return kHistogramPopularName;
treib231212e2017-04-04 17:09:2250 case TileSource::WHITELIST:
treibb5f7233d2016-10-18 09:14:3251 return kHistogramWhitelistName;
treib231212e2017-04-04 17:09:2252 case TileSource::SUGGESTIONS_SERVICE:
treibb5f7233d2016-10-18 09:14:3253 return kHistogramServerName;
Yafei Duan3797cf42018-07-14 01:03:5854 case TileSource::HOMEPAGE:
55 return kHistogramHomepageName;
kristiparkc0199772018-07-18 05:25:4256 case TileSource::CUSTOM_LINKS:
57 return kHistogramCustomLinksName;
Cathy Li4892ee02019-05-22 22:58:1558 case TileSource::EXPLORE:
59 return kHistogramExploreName;
treibb5f7233d2016-10-18 09:14:3260 }
61 NOTREACHED();
62 return std::string();
63}
64
treib80f51222017-04-07 07:59:3665const char* GetTileTypeSuffix(TileVisualType type) {
mastiz8619a462017-02-09 16:46:1366 switch (type) {
treib231212e2017-04-04 17:09:2267 case TileVisualType::ICON_COLOR:
treib80f51222017-04-07 07:59:3668 return kTileTypeSuffixIconColor;
treib231212e2017-04-04 17:09:2269 case TileVisualType::ICON_DEFAULT:
treib80f51222017-04-07 07:59:3670 return kTileTypeSuffixIconGray;
treib231212e2017-04-04 17:09:2271 case TileVisualType::ICON_REAL:
treib80f51222017-04-07 07:59:3672 return kTileTypeSuffixIconReal;
treib231212e2017-04-04 17:09:2273 case TileVisualType::NONE: // Fall through.
treib231212e2017-04-04 17:09:2274 case TileVisualType::UNKNOWN_TILE_TYPE:
mastiz8619a462017-02-09 16:46:1375 break;
76 }
77 return nullptr;
78}
79
treibb5f7233d2016-10-18 09:14:3280} // namespace
81
Jan Krcal437702b2017-06-23 07:22:3882void RecordPageImpression(int number_of_tiles) {
Ilya Sherman1edb6f182017-12-12 04:00:4283 base::UmaHistogramSparse("NewTabPage.NumberOfTiles", number_of_tiles);
Jan Krcal437702b2017-06-23 07:22:3884}
85
Justin DeWitt7aca2b12019-11-06 17:12:0186void RecordTileImpression(const NTPTileImpression& impression) {
Mikel Astizbc131d82017-10-09 06:16:4187 UMA_HISTOGRAM_ENUMERATION("NewTabPage.SuggestionsImpression",
88 impression.index, kMaxNumTiles);
treibb5f7233d2016-10-18 09:14:3289
Mikel Astizbc131d82017-10-09 06:16:4190 std::string source_name = GetSourceHistogramName(impression.source);
Mikel Astiza0f98cc2017-10-12 19:48:4891 base::UmaHistogramExactLinear(
92 base::StringPrintf("NewTabPage.SuggestionsImpression.%s",
93 source_name.c_str()),
94 impression.index, kMaxNumTiles);
95
96 if (!impression.data_generation_time.is_null()) {
97 const base::TimeDelta age =
98 base::Time::Now() - impression.data_generation_time;
99 LogUmaHistogramAge("NewTabPage.SuggestionsImpressionAge", age);
100 LogUmaHistogramAge(
101 base::StringPrintf("NewTabPage.SuggestionsImpressionAge.%s",
102 source_name.c_str()),
103 age);
104 }
treibe3ca5da2016-11-24 17:26:55105
Friedrich Horschigefec0812017-09-28 18:50:17106 UMA_HISTOGRAM_ENUMERATION("NewTabPage.TileTitle",
Mikel Astizbc131d82017-10-09 06:16:41107 static_cast<int>(impression.title_source),
Friedrich Horschigefec0812017-09-28 18:50:17108 kLastTitleSource + 1);
Mikel Astiza0f98cc2017-10-12 19:48:48109 base::UmaHistogramExactLinear(
Mikel Astizbc131d82017-10-09 06:16:41110 base::StringPrintf("NewTabPage.TileTitle.%s",
Mikel Astiza0f98cc2017-10-12 19:48:48111 GetSourceHistogramName(impression.source).c_str()),
112 static_cast<int>(impression.title_source), kLastTitleSource + 1);
Friedrich Horschigefec0812017-09-28 18:50:17113
Mikel Astizbc131d82017-10-09 06:16:41114 if (impression.visual_type > LAST_RECORDED_TILE_TYPE) {
Jan Krcal437702b2017-06-23 07:22:38115 return;
116 }
treibe3ca5da2016-11-24 17:26:55117
Mikel Astizbc131d82017-10-09 06:16:41118 UMA_HISTOGRAM_ENUMERATION("NewTabPage.TileType", impression.visual_type,
Jan Krcal437702b2017-06-23 07:22:38119 LAST_RECORDED_TILE_TYPE + 1);
treibe3ca5da2016-11-24 17:26:55120
Mikel Astiza0f98cc2017-10-12 19:48:48121 base::UmaHistogramExactLinear(
122 base::StringPrintf("NewTabPage.TileType.%s", source_name.c_str()),
123 impression.visual_type, LAST_RECORDED_TILE_TYPE + 1);
treib09787d832016-11-23 16:12:46124
Mikel Astizbc131d82017-10-09 06:16:41125 const char* tile_type_suffix = GetTileTypeSuffix(impression.visual_type);
Jan Krcal437702b2017-06-23 07:22:38126 if (tile_type_suffix) {
Justin DeWitt7aca2b12019-11-06 17:12:01127 // TODO(http://crbug.com/1021598): Add UKM here.
Mikel Astiza0f98cc2017-10-12 19:48:48128 base::UmaHistogramExactLinear(
129 base::StringPrintf("NewTabPage.SuggestionsImpression.%s",
130 tile_type_suffix),
131 impression.index, kMaxNumTiles);
Mikel Astiz5774c182017-10-26 10:59:51132
Mikel Astiza5ea255f2017-11-06 22:50:15133 if (impression.icon_type != favicon_base::IconType::kInvalid) {
Mikel Astiz26855ed2017-11-15 21:59:49134 base::UmaHistogramEnumeration(
Mikel Astiz5774c182017-10-26 10:59:51135 base::StringPrintf("NewTabPage.TileFaviconType.%s", tile_type_suffix),
Mikel Astiz26855ed2017-11-15 21:59:49136 impression.icon_type, favicon_base::IconType::kCount);
Mikel Astiz5774c182017-10-26 10:59:51137 }
138 }
139
Mikel Astiza5ea255f2017-11-06 22:50:15140 if (impression.icon_type != favicon_base::IconType::kInvalid) {
Mikel Astiz26855ed2017-11-15 21:59:49141 base::UmaHistogramEnumeration("NewTabPage.TileFaviconType",
142 impression.icon_type,
143 favicon_base::IconType::kCount);
treibb5f7233d2016-10-18 09:14:32144 }
treibb5f7233d2016-10-18 09:14:32145}
146
Mikel Astizbc131d82017-10-09 06:16:41147void RecordTileClick(const NTPTileImpression& impression) {
148 UMA_HISTOGRAM_ENUMERATION("NewTabPage.MostVisited", impression.index,
149 kMaxNumTiles);
treibb5f7233d2016-10-18 09:14:32150
Mikel Astiza0f98cc2017-10-12 19:48:48151 std::string source_name = GetSourceHistogramName(impression.source);
152 base::UmaHistogramExactLinear(
153 base::StringPrintf("NewTabPage.MostVisited.%s", source_name.c_str()),
154 impression.index, kMaxNumTiles);
155
156 if (!impression.data_generation_time.is_null()) {
157 const base::TimeDelta age =
158 base::Time::Now() - impression.data_generation_time;
159 LogUmaHistogramAge("NewTabPage.MostVisitedAge", age);
160 LogUmaHistogramAge(
161 base::StringPrintf("NewTabPage.MostVisitedAge.%s", source_name.c_str()),
162 age);
163 }
treibb5f7233d2016-10-18 09:14:32164
Mikel Astizbc131d82017-10-09 06:16:41165 const char* tile_type_suffix = GetTileTypeSuffix(impression.visual_type);
treib80f51222017-04-07 07:59:36166 if (tile_type_suffix) {
Mikel Astiza0f98cc2017-10-12 19:48:48167 base::UmaHistogramExactLinear(
168 base::StringPrintf("NewTabPage.MostVisited.%s", tile_type_suffix),
169 impression.index, kMaxNumTiles);
Mikel Astiz5774c182017-10-26 10:59:51170
Mikel Astiza5ea255f2017-11-06 22:50:15171 if (impression.icon_type != favicon_base::IconType::kInvalid) {
Mikel Astiz26855ed2017-11-15 21:59:49172 base::UmaHistogramEnumeration(
Mikel Astiz5774c182017-10-26 10:59:51173 base::StringPrintf("NewTabPage.TileFaviconTypeClicked.%s",
174 tile_type_suffix),
Mikel Astiz26855ed2017-11-15 21:59:49175 impression.icon_type, favicon_base::IconType::kCount);
Mikel Astiz5774c182017-10-26 10:59:51176 }
177 }
178
Mikel Astiza5ea255f2017-11-06 22:50:15179 if (impression.icon_type != favicon_base::IconType::kInvalid) {
Mikel Astiz26855ed2017-11-15 21:59:49180 base::UmaHistogramEnumeration("NewTabPage.TileFaviconTypeClicked",
181 impression.icon_type,
182 favicon_base::IconType::kCount);
mastiz8619a462017-02-09 16:46:13183 }
184
Friedrich Horschigefec0812017-09-28 18:50:17185 UMA_HISTOGRAM_ENUMERATION("NewTabPage.TileTitleClicked",
Mikel Astizbc131d82017-10-09 06:16:41186 static_cast<int>(impression.title_source),
Friedrich Horschigefec0812017-09-28 18:50:17187 kLastTitleSource + 1);
Mikel Astiza0f98cc2017-10-12 19:48:48188 base::UmaHistogramExactLinear(
Mikel Astizbc131d82017-10-09 06:16:41189 base::StringPrintf("NewTabPage.TileTitleClicked.%s",
Mikel Astiza0f98cc2017-10-12 19:48:48190 GetSourceHistogramName(impression.source).c_str()),
191 static_cast<int>(impression.title_source), kLastTitleSource + 1);
Friedrich Horschigefec0812017-09-28 18:50:17192
Mikel Astizbc131d82017-10-09 06:16:41193 if (impression.visual_type <= LAST_RECORDED_TILE_TYPE) {
194 UMA_HISTOGRAM_ENUMERATION("NewTabPage.TileTypeClicked",
195 impression.visual_type,
treib80f51222017-04-07 07:59:36196 LAST_RECORDED_TILE_TYPE + 1);
treibb5f7233d2016-10-18 09:14:32197
Mikel Astiza0f98cc2017-10-12 19:48:48198 base::UmaHistogramExactLinear(
treib6e3618a2016-10-25 14:07:28199 base::StringPrintf("NewTabPage.TileTypeClicked.%s",
Mikel Astiza0f98cc2017-10-12 19:48:48200 GetSourceHistogramName(impression.source).c_str()),
201 impression.visual_type, LAST_RECORDED_TILE_TYPE + 1);
treib6e3618a2016-10-25 14:07:28202 }
treibb5f7233d2016-10-18 09:14:32203}
204
205} // namespace metrics
206} // namespace ntp_tiles