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

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

Issue 2124903003: Record impressions/navigations only once per tile. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 5 months 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 "base/metrics/histogram.h" 7 #include "base/metrics/histogram.h"
8 #include "base/metrics/statistics_recorder.h" 8 #include "base/metrics/statistics_recorder.h"
9 #include "base/strings/utf_string_conversions.h" 9 #include "base/strings/utf_string_conversions.h"
10 #include "chrome/common/search/ntp_logging_events.h" 10 #include "chrome/common/search/ntp_logging_events.h"
11 #include "content/public/test/test_browser_thread_bundle.h" 11 #include "content/public/test/test_browser_thread_bundle.h"
12 #include "testing/gmock/include/gmock/gmock.h"
12 #include "testing/gtest/include/gtest/gtest.h" 13 #include "testing/gtest/include/gtest/gtest.h"
13 14
14 namespace { 15 namespace {
15 16
17 using testing::ElementsAre;
18 using Samples = std::vector<base::HistogramBase::Sample>;
Marc Treib 2016/07/14 14:40:52 nit: Also add "using base::HistogramBase::Sample"
sfiera 2016/07/15 09:55:10 Done.
19
16 class TestNTPUserDataLogger : public NTPUserDataLogger { 20 class TestNTPUserDataLogger : public NTPUserDataLogger {
17 public: 21 public:
18 TestNTPUserDataLogger() : NTPUserDataLogger(NULL) {} 22 TestNTPUserDataLogger() : NTPUserDataLogger(NULL) {}
19 ~TestNTPUserDataLogger() override {} 23 ~TestNTPUserDataLogger() override {}
20 }; 24 };
21 25
22 base::HistogramBase::Count GetTotalCount(const std::string& histogram_name) { 26 base::HistogramBase::Count GetTotalCount(const std::string& histogram_name) {
23 base::HistogramBase* histogram = base::StatisticsRecorder::FindHistogram( 27 base::HistogramBase* histogram = base::StatisticsRecorder::FindHistogram(
24 histogram_name); 28 histogram_name);
25 // Return 0 if history is uninitialized. 29 // Return 0 if history is uninitialized.
26 return histogram ? histogram->SnapshotSamples()->TotalCount() : 0; 30 return histogram ? histogram->SnapshotSamples()->TotalCount() : 0;
27 } 31 }
28 32
29 base::HistogramBase::Count GetBinCount(const std::string& histogram_name, 33 base::HistogramBase::Count GetBinCount(const std::string& histogram_name,
30 base::HistogramBase::Sample value) { 34 base::HistogramBase::Sample value) {
31 base::HistogramBase* histogram = base::StatisticsRecorder::FindHistogram( 35 base::HistogramBase* histogram = base::StatisticsRecorder::FindHistogram(
32 histogram_name); 36 histogram_name);
33 // Return 0 if history is uninitialized. 37 // Return 0 if history is uninitialized.
34 return histogram ? histogram->SnapshotSamples()->GetCount(value) : 0; 38 return histogram ? histogram->SnapshotSamples()->GetCount(value) : 0;
35 } 39 }
36 40
41 std::vector<int> GetBinCounts(const std::string& histogram_name,
42 const Samples& values) {
43 std::vector<int> results;
44 for (const auto& value : values) {
45 results.push_back(GetBinCount(histogram_name, value));
46 }
47 return results;
48 }
49
50 std::vector<int> TotalImpressions(const Samples& values) {
51 return GetBinCounts("NewTabPage.SuggestionsImpression", values);
52 }
53
54 std::vector<int> ServerImpressions(const Samples& values) {
55 return GetBinCounts("NewTabPage.SuggestionsImpression.server", values);
56 }
57
58 std::vector<int> ClientImpressions(const Samples& values) {
59 return GetBinCounts("NewTabPage.SuggestionsImpression.client", values);
60 }
61
62 std::vector<int> TotalNavigations(const Samples& values) {
63 return GetBinCounts("NewTabPage.MostVisited", values);
64 }
65
66 std::vector<int> ServerNavigations(const Samples& values) {
67 return GetBinCounts("NewTabPage.MostVisited.server", values);
68 }
69
70 std::vector<int> ClientNavigations(const Samples& values) {
71 return GetBinCounts("NewTabPage.MostVisited.client", values);
72 }
73
37 } // namespace 74 } // namespace
38 75
39 class NTPUserDataLoggerTest : public testing::Test { 76 class NTPUserDataLoggerTest : public testing::Test {
40 content::TestBrowserThreadBundle thread_bundle_; 77 content::TestBrowserThreadBundle thread_bundle_;
41 }; 78 };
42 79
43 TEST_F(NTPUserDataLoggerTest, TestLogging) { 80 TEST_F(NTPUserDataLoggerTest, TestLogging) {
44 base::StatisticsRecorder::Initialize(); 81 base::StatisticsRecorder::Initialize();
45 82
46 // Enusure non-zero statistics. 83 // Enusure non-zero statistics.
(...skipping 10 matching lines...) Expand all
57 EXPECT_EQ(1, GetTotalCount("NewTabPage.NumberOfTiles")); 94 EXPECT_EQ(1, GetTotalCount("NewTabPage.NumberOfTiles"));
58 EXPECT_EQ(1, GetBinCount("NewTabPage.NumberOfTiles", 8)); 95 EXPECT_EQ(1, GetBinCount("NewTabPage.NumberOfTiles", 8));
59 96
60 // Statistics should be reset to 0, so we should not log anything else. 97 // Statistics should be reset to 0, so we should not log anything else.
61 logger.LogEvent(NTP_ALL_TILES_LOADED, delta); 98 logger.LogEvent(NTP_ALL_TILES_LOADED, delta);
62 EXPECT_EQ(1, GetTotalCount("NewTabPage.NumberOfTiles")); 99 EXPECT_EQ(1, GetTotalCount("NewTabPage.NumberOfTiles"));
63 } 100 }
64 101
65 TEST_F(NTPUserDataLoggerTest, TestLogMostVisitedImpression) { 102 TEST_F(NTPUserDataLoggerTest, TestLogMostVisitedImpression) {
66 base::StatisticsRecorder::Initialize(); 103 base::StatisticsRecorder::Initialize();
67 104 EXPECT_THAT(TotalImpressions({1, 2, 3, 4}), ElementsAre(0, 0, 0, 0));
68 EXPECT_EQ(0, GetTotalCount("NewTabPage.SuggestionsImpression")); 105 EXPECT_THAT(ServerImpressions({1, 2, 3, 4}), ElementsAre(0, 0, 0, 0));
69 EXPECT_EQ(0, GetBinCount("NewTabPage.SuggestionsImpression.server", 1)); 106 EXPECT_THAT(ClientImpressions({1, 2, 3, 4}), ElementsAre(0, 0, 0, 0));
70 EXPECT_EQ(0, GetBinCount("NewTabPage.SuggestionsImpression.server", 5));
71 EXPECT_EQ(0, GetBinCount("NewTabPage.SuggestionsImpression.client", 1));
72 EXPECT_EQ(0, GetBinCount("NewTabPage.SuggestionsImpression.client", 5));
73 107
74 TestNTPUserDataLogger logger; 108 TestNTPUserDataLogger logger;
75 109
110 // Impressions increment the associated bins.
111
76 logger.LogMostVisitedImpression(1, NTPLoggingTileSource::SERVER); 112 logger.LogMostVisitedImpression(1, NTPLoggingTileSource::SERVER);
77 EXPECT_EQ(1, GetTotalCount("NewTabPage.SuggestionsImpression")); 113 EXPECT_THAT(TotalImpressions({1, 2, 3, 4}), ElementsAre(1, 0, 0, 0));
78 EXPECT_EQ(1, GetBinCount("NewTabPage.SuggestionsImpression.server", 1)); 114 EXPECT_THAT(ServerImpressions({1, 2, 3, 4}), ElementsAre(1, 0, 0, 0));
79 EXPECT_EQ(0, GetBinCount("NewTabPage.SuggestionsImpression.server", 5)); 115 EXPECT_THAT(ClientImpressions({1, 2, 3, 4}), ElementsAre(0, 0, 0, 0));
80 EXPECT_EQ(0, GetBinCount("NewTabPage.SuggestionsImpression.client", 1));
81 EXPECT_EQ(0, GetBinCount("NewTabPage.SuggestionsImpression.client", 5));
82 116
83 logger.LogMostVisitedImpression(5, NTPLoggingTileSource::SERVER); 117 logger.LogMostVisitedImpression(2, NTPLoggingTileSource::SERVER);
84 EXPECT_EQ(2, GetTotalCount("NewTabPage.SuggestionsImpression")); 118 EXPECT_THAT(TotalImpressions({1, 2, 3, 4}), ElementsAre(1, 1, 0, 0));
85 EXPECT_EQ(1, GetBinCount("NewTabPage.SuggestionsImpression.server", 1)); 119 EXPECT_THAT(ServerImpressions({1, 2, 3, 4}), ElementsAre(1, 1, 0, 0));
86 EXPECT_EQ(1, GetBinCount("NewTabPage.SuggestionsImpression.server", 5)); 120 EXPECT_THAT(ClientImpressions({1, 2, 3, 4}), ElementsAre(0, 0, 0, 0));
87 EXPECT_EQ(0, GetBinCount("NewTabPage.SuggestionsImpression.client", 1));
88 EXPECT_EQ(0, GetBinCount("NewTabPage.SuggestionsImpression.client", 5));
89 121
90 logger.LogMostVisitedImpression(1, NTPLoggingTileSource::CLIENT); 122 logger.LogMostVisitedImpression(3, NTPLoggingTileSource::CLIENT);
91 EXPECT_EQ(3, GetTotalCount("NewTabPage.SuggestionsImpression")); 123 EXPECT_THAT(TotalImpressions({1, 2, 3, 4}), ElementsAre(1, 1, 1, 0));
92 EXPECT_EQ(1, GetBinCount("NewTabPage.SuggestionsImpression.server", 1)); 124 EXPECT_THAT(ServerImpressions({1, 2, 3, 4}), ElementsAre(1, 1, 0, 0));
93 EXPECT_EQ(1, GetBinCount("NewTabPage.SuggestionsImpression.server", 5)); 125 EXPECT_THAT(ClientImpressions({1, 2, 3, 4}), ElementsAre(0, 0, 1, 0));
94 EXPECT_EQ(1, GetBinCount("NewTabPage.SuggestionsImpression.client", 1));
95 EXPECT_EQ(0, GetBinCount("NewTabPage.SuggestionsImpression.client", 5));
96 126
97 logger.LogMostVisitedImpression(5, NTPLoggingTileSource::CLIENT); 127 logger.LogMostVisitedImpression(4, NTPLoggingTileSource::CLIENT);
98 EXPECT_EQ(4, GetTotalCount("NewTabPage.SuggestionsImpression")); 128 EXPECT_THAT(TotalImpressions({1, 2, 3, 4}), ElementsAre(1, 1, 1, 1));
99 EXPECT_EQ(1, GetBinCount("NewTabPage.SuggestionsImpression.server", 1)); 129 EXPECT_THAT(ServerImpressions({1, 2, 3, 4}), ElementsAre(1, 1, 0, 0));
100 EXPECT_EQ(1, GetBinCount("NewTabPage.SuggestionsImpression.server", 5)); 130 EXPECT_THAT(ClientImpressions({1, 2, 3, 4}), ElementsAre(0, 0, 1, 1));
101 EXPECT_EQ(1, GetBinCount("NewTabPage.SuggestionsImpression.client", 1)); 131
102 EXPECT_EQ(1, GetBinCount("NewTabPage.SuggestionsImpression.client", 5)); 132 // But once incremented, they don't increase again unless reset.
133 logger.LogMostVisitedImpression(1, NTPLoggingTileSource::SERVER);
134 logger.LogMostVisitedImpression(2, NTPLoggingTileSource::CLIENT);
135 logger.LogMostVisitedImpression(3, NTPLoggingTileSource::SERVER);
136 logger.LogMostVisitedImpression(4, NTPLoggingTileSource::CLIENT);
137 EXPECT_THAT(TotalImpressions({1, 2, 3, 4}), ElementsAre(1, 1, 1, 1));
138 EXPECT_THAT(ServerImpressions({1, 2, 3, 4}), ElementsAre(1, 1, 0, 0));
139 EXPECT_THAT(ClientImpressions({1, 2, 3, 4}), ElementsAre(0, 0, 1, 1));
103 } 140 }
104 141
105 TEST_F(NTPUserDataLoggerTest, TestLogMostVisitedNavigation) { 142 TEST_F(NTPUserDataLoggerTest, TestLogMostVisitedNavigation) {
106 base::StatisticsRecorder::Initialize(); 143 base::StatisticsRecorder::Initialize();
107 144
108 EXPECT_EQ(0, GetTotalCount("NewTabPage.MostVisited")); 145 EXPECT_THAT(TotalNavigations({1, 2, 3, 4}), ElementsAre(0, 0, 0, 0));
109 EXPECT_EQ(0, GetBinCount("NewTabPage.MostVisited.server", 1)); 146 EXPECT_THAT(ServerNavigations({1, 2, 3, 4}), ElementsAre(0, 0, 0, 0));
110 EXPECT_EQ(0, GetBinCount("NewTabPage.MostVisited.server", 5)); 147 EXPECT_THAT(ClientNavigations({1, 2, 3, 4}), ElementsAre(0, 0, 0, 0));
111 EXPECT_EQ(0, GetBinCount("NewTabPage.MostVisited.client", 1));
112 EXPECT_EQ(0, GetBinCount("NewTabPage.MostVisited.client", 5));
113 148
114 TestNTPUserDataLogger logger; 149 TestNTPUserDataLogger logger;
115 150
116 logger.LogMostVisitedNavigation(1, NTPLoggingTileSource::SERVER); 151 logger.LogMostVisitedNavigation(1, NTPLoggingTileSource::SERVER);
117 EXPECT_EQ(1, GetTotalCount("NewTabPage.MostVisited")); 152 EXPECT_THAT(TotalNavigations({1, 2, 3, 4}), ElementsAre(1, 0, 0, 0));
118 EXPECT_EQ(1, GetBinCount("NewTabPage.MostVisited.server", 1)); 153 EXPECT_THAT(ServerNavigations({1, 2, 3, 4}), ElementsAre(1, 0, 0, 0));
119 EXPECT_EQ(0, GetBinCount("NewTabPage.MostVisited.server", 5)); 154 EXPECT_THAT(ClientNavigations({1, 2, 3, 4}), ElementsAre(0, 0, 0, 0));
120 EXPECT_EQ(0, GetBinCount("NewTabPage.MostVisited.client", 1));
121 EXPECT_EQ(0, GetBinCount("NewTabPage.MostVisited.client", 5));
122 155
123 logger.LogMostVisitedNavigation(5, NTPLoggingTileSource::SERVER); 156 logger.LogMostVisitedNavigation(2, NTPLoggingTileSource::SERVER);
124 EXPECT_EQ(2, GetTotalCount("NewTabPage.MostVisited")); 157 EXPECT_THAT(TotalNavigations({1, 2, 3, 4}), ElementsAre(1, 1, 0, 0));
125 EXPECT_EQ(1, GetBinCount("NewTabPage.MostVisited.server", 1)); 158 EXPECT_THAT(ServerNavigations({1, 2, 3, 4}), ElementsAre(1, 1, 0, 0));
126 EXPECT_EQ(1, GetBinCount("NewTabPage.MostVisited.server", 5)); 159 EXPECT_THAT(ClientNavigations({1, 2, 3, 4}), ElementsAre(0, 0, 0, 0));
127 EXPECT_EQ(0, GetBinCount("NewTabPage.MostVisited.client", 1));
128 EXPECT_EQ(0, GetBinCount("NewTabPage.MostVisited.client", 5));
129 160
130 logger.LogMostVisitedNavigation(1, NTPLoggingTileSource::CLIENT); 161 logger.LogMostVisitedNavigation(3, NTPLoggingTileSource::CLIENT);
131 EXPECT_EQ(3, GetTotalCount("NewTabPage.MostVisited")); 162 EXPECT_THAT(TotalNavigations({1, 2, 3, 4}), ElementsAre(1, 1, 1, 0));
132 EXPECT_EQ(1, GetBinCount("NewTabPage.MostVisited.server", 1)); 163 EXPECT_THAT(ServerNavigations({1, 2, 3, 4}), ElementsAre(1, 1, 0, 0));
133 EXPECT_EQ(1, GetBinCount("NewTabPage.MostVisited.server", 5)); 164 EXPECT_THAT(ClientNavigations({1, 2, 3, 4}), ElementsAre(0, 0, 1, 0));
134 EXPECT_EQ(1, GetBinCount("NewTabPage.MostVisited.client", 1));
135 EXPECT_EQ(0, GetBinCount("NewTabPage.MostVisited.client", 5));
136 165
137 logger.LogMostVisitedNavigation(5, NTPLoggingTileSource::CLIENT); 166 logger.LogMostVisitedNavigation(4, NTPLoggingTileSource::CLIENT);
138 EXPECT_EQ(4, GetTotalCount("NewTabPage.MostVisited")); 167 EXPECT_THAT(TotalNavigations({1, 2, 3, 4}), ElementsAre(1, 1, 1, 1));
139 EXPECT_EQ(1, GetBinCount("NewTabPage.MostVisited.server", 1)); 168 EXPECT_THAT(ServerNavigations({1, 2, 3, 4}), ElementsAre(1, 1, 0, 0));
140 EXPECT_EQ(1, GetBinCount("NewTabPage.MostVisited.server", 5)); 169 EXPECT_THAT(ClientNavigations({1, 2, 3, 4}), ElementsAre(0, 0, 1, 1));
141 EXPECT_EQ(1, GetBinCount("NewTabPage.MostVisited.client", 1)); 170
142 EXPECT_EQ(1, GetBinCount("NewTabPage.MostVisited.client", 5)); 171 // Navigations always increase.
172 logger.LogMostVisitedNavigation(1, NTPLoggingTileSource::SERVER);
173 logger.LogMostVisitedNavigation(2, NTPLoggingTileSource::CLIENT);
174 logger.LogMostVisitedNavigation(3, NTPLoggingTileSource::SERVER);
175 logger.LogMostVisitedNavigation(4, NTPLoggingTileSource::CLIENT);
176 EXPECT_THAT(TotalNavigations({1, 2, 3, 4}), ElementsAre(2, 2, 2, 2));
177 EXPECT_THAT(ServerNavigations({1, 2, 3, 4}), ElementsAre(2, 1, 1, 0));
178 EXPECT_THAT(ClientNavigations({1, 2, 3, 4}), ElementsAre(0, 1, 1, 2));
143 } 179 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698