123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188 |
- // Copyright 2016 The Chromium Authors. All rights reserved.
- // Use of this source code is governed by a BSD-style license that can be
- // found in the LICENSE file.
- #include "components/ntp_tiles/metrics.h"
- #include <string>
- #include "base/metrics/histogram_functions.h"
- #include "base/metrics/histogram_macros.h"
- #include "base/metrics/user_metrics.h"
- #include "base/notreached.h"
- #include "base/strings/stringprintf.h"
- #include "components/ntp_tiles/constants.h"
- namespace ntp_tiles {
- namespace metrics {
- namespace {
- const int kLastTitleSource = static_cast<int>(TileTitleSource::LAST);
- // Identifiers for the various tile sources. Should sync with
- // NewTabPageProviders in histogram_suffixes_list.xml.
- const char kHistogramClientName[] = "client";
- const char kHistogramPopularName[] = "popular_fetched";
- const char kHistogramBakedInName[] = "popular_baked_in";
- const char kHistogramAllowlistName[] = "allowlist";
- const char kHistogramHomepageName[] = "homepage";
- const char kHistogramCustomLinksName[] = "custom_links";
- const char kHistogramExploreName[] = "explore";
- // Suffixes for the various icon types.
- const char kTileTypeSuffixIconColor[] = "IconsColor";
- const char kTileTypeSuffixIconGray[] = "IconsGray";
- const char kTileTypeSuffixIconReal[] = "IconsReal";
- std::string GetSourceHistogramName(TileSource source) {
- switch (source) {
- case TileSource::TOP_SITES:
- return kHistogramClientName;
- case TileSource::POPULAR_BAKED_IN:
- return kHistogramBakedInName;
- case TileSource::POPULAR:
- return kHistogramPopularName;
- case TileSource::ALLOWLIST:
- return kHistogramAllowlistName;
- case TileSource::HOMEPAGE:
- return kHistogramHomepageName;
- case TileSource::CUSTOM_LINKS:
- return kHistogramCustomLinksName;
- case TileSource::EXPLORE:
- return kHistogramExploreName;
- }
- NOTREACHED();
- return std::string();
- }
- const char* GetTileTypeSuffix(TileVisualType type) {
- switch (type) {
- case TileVisualType::ICON_COLOR:
- return kTileTypeSuffixIconColor;
- case TileVisualType::ICON_DEFAULT:
- return kTileTypeSuffixIconGray;
- case TileVisualType::ICON_REAL:
- return kTileTypeSuffixIconReal;
- case TileVisualType::NONE: // Fall through.
- case TileVisualType::UNKNOWN_TILE_TYPE:
- break;
- }
- return nullptr;
- }
- } // namespace
- void RecordPageImpression(int number_of_tiles) {
- base::UmaHistogramSparse("NewTabPage.NumberOfTiles", number_of_tiles);
- }
- void RecordTileImpression(const NTPTileImpression& impression) {
- UMA_HISTOGRAM_ENUMERATION("NewTabPage.SuggestionsImpression",
- impression.index, kMaxNumTiles);
- std::string source_name = GetSourceHistogramName(impression.source);
- base::UmaHistogramExactLinear(
- base::StringPrintf("NewTabPage.SuggestionsImpression.%s",
- source_name.c_str()),
- impression.index, kMaxNumTiles);
- UMA_HISTOGRAM_ENUMERATION("NewTabPage.TileTitle",
- static_cast<int>(impression.title_source),
- kLastTitleSource + 1);
- base::UmaHistogramExactLinear(
- base::StringPrintf("NewTabPage.TileTitle.%s",
- GetSourceHistogramName(impression.source).c_str()),
- static_cast<int>(impression.title_source), kLastTitleSource + 1);
- if (impression.visual_type > LAST_RECORDED_TILE_TYPE) {
- return;
- }
- UMA_HISTOGRAM_ENUMERATION("NewTabPage.TileType", 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) {
- // TODO(http://crbug.com/1021598): Add UKM here.
- base::UmaHistogramExactLinear(
- base::StringPrintf("NewTabPage.SuggestionsImpression.%s",
- tile_type_suffix),
- impression.index, kMaxNumTiles);
- if (impression.icon_type != favicon_base::IconType::kInvalid) {
- base::UmaHistogramEnumeration(
- base::StringPrintf("NewTabPage.TileFaviconType.%s", tile_type_suffix),
- impression.icon_type, favicon_base::IconType::kCount);
- }
- }
- if (impression.icon_type != favicon_base::IconType::kInvalid) {
- base::UmaHistogramEnumeration("NewTabPage.TileFaviconType",
- impression.icon_type,
- favicon_base::IconType::kCount);
- }
- }
- void RecordTileClick(const NTPTileImpression& impression) {
- UMA_HISTOGRAM_ENUMERATION("NewTabPage.MostVisited", impression.index,
- kMaxNumTiles);
- base::RecordAction(base::UserMetricsAction("NewTabPage.MostVisited.Clicked"));
- std::string source_name = GetSourceHistogramName(impression.source);
- base::UmaHistogramExactLinear(
- base::StringPrintf("NewTabPage.MostVisited.%s", source_name.c_str()),
- impression.index, kMaxNumTiles);
- const char* tile_type_suffix = GetTileTypeSuffix(impression.visual_type);
- if (tile_type_suffix) {
- base::UmaHistogramExactLinear(
- base::StringPrintf("NewTabPage.MostVisited.%s", tile_type_suffix),
- impression.index, kMaxNumTiles);
- if (impression.icon_type != favicon_base::IconType::kInvalid) {
- base::UmaHistogramEnumeration(
- base::StringPrintf("NewTabPage.TileFaviconTypeClicked.%s",
- tile_type_suffix),
- impression.icon_type, favicon_base::IconType::kCount);
- }
- }
- if (impression.icon_type != favicon_base::IconType::kInvalid) {
- base::UmaHistogramEnumeration("NewTabPage.TileFaviconTypeClicked",
- impression.icon_type,
- favicon_base::IconType::kCount);
- }
- UMA_HISTOGRAM_ENUMERATION("NewTabPage.TileTitleClicked",
- static_cast<int>(impression.title_source),
- kLastTitleSource + 1);
- base::UmaHistogramExactLinear(
- base::StringPrintf("NewTabPage.TileTitleClicked.%s",
- 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);
- base::UmaHistogramExactLinear(
- base::StringPrintf("NewTabPage.TileTypeClicked.%s",
- GetSourceHistogramName(impression.source).c_str()),
- impression.visual_type, LAST_RECORDED_TILE_TYPE + 1);
- }
- }
- void RecordsMigratedDefaultAppDeleted(
- const DeletedTileType& most_visited_app_type) {
- base::UmaHistogramEnumeration("NewTabPage.MostVisitedMigratedDefaultAppType",
- most_visited_app_type);
- }
- } // namespace metrics
- } // namespace ntp_tiles
|