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

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
« no previous file with comments | « chrome/browser/ui/webui/ntp/ntp_user_data_logger.cc ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 Sample = base::HistogramBase::Sample;
19 using Samples = std::vector<Sample>;
20
16 class TestNTPUserDataLogger : public NTPUserDataLogger { 21 class TestNTPUserDataLogger : public NTPUserDataLogger {
17 public: 22 public:
18 TestNTPUserDataLogger() : NTPUserDataLogger(NULL) {} 23 TestNTPUserDataLogger() : NTPUserDataLogger(NULL) {}
19 ~TestNTPUserDataLogger() override {} 24 ~TestNTPUserDataLogger() override {}
20 }; 25 };
21 26
22 base::HistogramBase::Count GetTotalCount(const std::string& histogram_name) { 27 base::HistogramBase::Count GetTotalCount(const std::string& histogram_name) {
23 base::HistogramBase* histogram = base::StatisticsRecorder::FindHistogram( 28 base::HistogramBase* histogram = base::StatisticsRecorder::FindHistogram(
24 histogram_name); 29 histogram_name);
25 // Return 0 if history is uninitialized. 30 // Return 0 if history is uninitialized.
26 return histogram ? histogram->SnapshotSamples()->TotalCount() : 0; 31 return histogram ? histogram->SnapshotSamples()->TotalCount() : 0;
27 } 32 }
28 33
29 base::HistogramBase::Count GetBinCount(const std::string& histogram_name, 34 base::HistogramBase::Count GetBinCount(const std::string& histogram_name,
30 base::HistogramBase::Sample value) { 35 Sample value) {
31 base::HistogramBase* histogram = base::StatisticsRecorder::FindHistogram( 36 base::HistogramBase* histogram = base::StatisticsRecorder::FindHistogram(
32 histogram_name); 37 histogram_name);
33 // Return 0 if history is uninitialized. 38 // Return 0 if history is uninitialized.
34 return histogram ? histogram->SnapshotSamples()->GetCount(value) : 0; 39 return histogram ? histogram->SnapshotSamples()->GetCount(value) : 0;
35 } 40 }
36 41
42 std::vector<int> GetBinCounts(const std::string& histogram_name,
43 const Samples& values) {
44 std::vector<int> results;
45 for (const auto& value : values) {
46 results.push_back(GetBinCount(histogram_name, value));
47 }
48 return results;
49 }
50
51 std::vector<int> TotalImpressions(const Samples& values) {
52 return GetBinCounts("NewTabPage.SuggestionsImpression", values);
53 }
54
55 std::vector<int> ServerImpressions(const Samples& values) {
56 return GetBinCounts("NewTabPage.SuggestionsImpression.server", values);
57 }
58
59 std::vector<int> ClientImpressions(const Samples& values) {
60 return GetBinCounts("NewTabPage.SuggestionsImpression.client", values);
61 }
62
63 std::vector<int> TotalNavigations(const Samples& values) {
64 return GetBinCounts("NewTabPage.MostVisited", values);
65 }
66
67 std::vector<int> ServerNavigations(const Samples& values) {
68 return GetBinCounts("NewTabPage.MostVisited.server", values);
69 }
70
71 std::vector<int> ClientNavigations(const Samples& values) {
72 return GetBinCounts("NewTabPage.MostVisited.client", values);
73 }
74
37 } // namespace 75 } // namespace
38 76
39 class NTPUserDataLoggerTest : public testing::Test { 77 class NTPUserDataLoggerTest : public testing::Test {
40 content::TestBrowserThreadBundle thread_bundle_; 78 content::TestBrowserThreadBundle thread_bundle_;
41 }; 79 };
42 80
43 TEST_F(NTPUserDataLoggerTest, TestLogging) { 81 TEST_F(NTPUserDataLoggerTest, TestNumberOfTiles) {
44 base::StatisticsRecorder::Initialize(); 82 base::StatisticsRecorder::Initialize();
45 83
46 // Enusure non-zero statistics. 84 // Enusure non-zero statistics.
47 TestNTPUserDataLogger logger; 85 TestNTPUserDataLogger logger;
86 logger.ntp_url_ = GURL("chrome://newtab/");
48 87
49 base::TimeDelta delta = base::TimeDelta::FromMilliseconds(0); 88 base::TimeDelta delta = base::TimeDelta::FromMilliseconds(0);
50 89
51 for (int i = 0; i < 8; ++i) 90 for (int i = 0; i < 8; ++i)
52 logger.LogEvent(NTP_TILE, delta); 91 logger.LogEvent(NTP_TILE, delta);
53 logger.LogEvent(NTP_SERVER_SIDE_SUGGESTION, delta); 92 logger.LogEvent(NTP_SERVER_SIDE_SUGGESTION, delta);
54 93
55 logger.LogEvent(NTP_ALL_TILES_LOADED, delta); 94 logger.LogEvent(NTP_ALL_TILES_LOADED, delta);
56 95
57 EXPECT_EQ(1, GetTotalCount("NewTabPage.NumberOfTiles")); 96 EXPECT_EQ(1, GetTotalCount("NewTabPage.NumberOfTiles"));
58 EXPECT_EQ(1, GetBinCount("NewTabPage.NumberOfTiles", 8)); 97 EXPECT_EQ(1, GetBinCount("NewTabPage.NumberOfTiles", 8));
59 98
60 // Statistics should be reset to 0, so we should not log anything else. 99 // Statistics should be reset to 0, so we should not log anything else.
61 logger.LogEvent(NTP_ALL_TILES_LOADED, delta); 100 logger.LogEvent(NTP_ALL_TILES_LOADED, delta);
62 EXPECT_EQ(1, GetTotalCount("NewTabPage.NumberOfTiles")); 101 EXPECT_EQ(1, GetTotalCount("NewTabPage.NumberOfTiles"));
102
103 // Navigating away and back resets stats.
104 logger.NavigatedFromURLToURL(GURL("chrome://newtab/"),
105 GURL("http://chromium.org"));
106 logger.NavigatedFromURLToURL(GURL("http://chromium.org"),
107 GURL("chrome://newtab/"));
108 logger.LogEvent(NTP_ALL_TILES_LOADED, delta);
109 EXPECT_EQ(2, GetTotalCount("NewTabPage.NumberOfTiles"));
63 } 110 }
64 111
65 TEST_F(NTPUserDataLoggerTest, TestLogMostVisitedImpression) { 112 TEST_F(NTPUserDataLoggerTest, TestLogMostVisitedImpression) {
66 base::StatisticsRecorder::Initialize(); 113 base::StatisticsRecorder::Initialize();
67 114 EXPECT_THAT(TotalImpressions({1, 2, 3, 4}), ElementsAre(0, 0, 0, 0));
68 EXPECT_EQ(0, GetTotalCount("NewTabPage.SuggestionsImpression")); 115 EXPECT_THAT(ServerImpressions({1, 2, 3, 4}), ElementsAre(0, 0, 0, 0));
69 EXPECT_EQ(0, GetBinCount("NewTabPage.SuggestionsImpression.server", 1)); 116 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 117
74 TestNTPUserDataLogger logger; 118 TestNTPUserDataLogger logger;
119 logger.ntp_url_ = GURL("chrome://newtab/");
120
121 // Impressions increment the associated bins.
75 122
76 logger.LogMostVisitedImpression(1, NTPLoggingTileSource::SERVER); 123 logger.LogMostVisitedImpression(1, NTPLoggingTileSource::SERVER);
77 EXPECT_EQ(1, GetTotalCount("NewTabPage.SuggestionsImpression")); 124 EXPECT_THAT(TotalImpressions({1, 2, 3, 4}), ElementsAre(1, 0, 0, 0));
78 EXPECT_EQ(1, GetBinCount("NewTabPage.SuggestionsImpression.server", 1)); 125 EXPECT_THAT(ServerImpressions({1, 2, 3, 4}), ElementsAre(1, 0, 0, 0));
79 EXPECT_EQ(0, GetBinCount("NewTabPage.SuggestionsImpression.server", 5)); 126 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 127
83 logger.LogMostVisitedImpression(5, NTPLoggingTileSource::SERVER); 128 logger.LogMostVisitedImpression(2, NTPLoggingTileSource::SERVER);
84 EXPECT_EQ(2, GetTotalCount("NewTabPage.SuggestionsImpression")); 129 EXPECT_THAT(TotalImpressions({1, 2, 3, 4}), ElementsAre(1, 1, 0, 0));
85 EXPECT_EQ(1, GetBinCount("NewTabPage.SuggestionsImpression.server", 1)); 130 EXPECT_THAT(ServerImpressions({1, 2, 3, 4}), ElementsAre(1, 1, 0, 0));
86 EXPECT_EQ(1, GetBinCount("NewTabPage.SuggestionsImpression.server", 5)); 131 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 132
90 logger.LogMostVisitedImpression(1, NTPLoggingTileSource::CLIENT); 133 logger.LogMostVisitedImpression(3, NTPLoggingTileSource::CLIENT);
91 EXPECT_EQ(3, GetTotalCount("NewTabPage.SuggestionsImpression")); 134 EXPECT_THAT(TotalImpressions({1, 2, 3, 4}), ElementsAre(1, 1, 1, 0));
92 EXPECT_EQ(1, GetBinCount("NewTabPage.SuggestionsImpression.server", 1)); 135 EXPECT_THAT(ServerImpressions({1, 2, 3, 4}), ElementsAre(1, 1, 0, 0));
93 EXPECT_EQ(1, GetBinCount("NewTabPage.SuggestionsImpression.server", 5)); 136 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 137
97 logger.LogMostVisitedImpression(5, NTPLoggingTileSource::CLIENT); 138 logger.LogMostVisitedImpression(4, NTPLoggingTileSource::CLIENT);
98 EXPECT_EQ(4, GetTotalCount("NewTabPage.SuggestionsImpression")); 139 EXPECT_THAT(TotalImpressions({1, 2, 3, 4}), ElementsAre(1, 1, 1, 1));
99 EXPECT_EQ(1, GetBinCount("NewTabPage.SuggestionsImpression.server", 1)); 140 EXPECT_THAT(ServerImpressions({1, 2, 3, 4}), ElementsAre(1, 1, 0, 0));
100 EXPECT_EQ(1, GetBinCount("NewTabPage.SuggestionsImpression.server", 5)); 141 EXPECT_THAT(ClientImpressions({1, 2, 3, 4}), ElementsAre(0, 0, 1, 1));
101 EXPECT_EQ(1, GetBinCount("NewTabPage.SuggestionsImpression.client", 1)); 142
102 EXPECT_EQ(1, GetBinCount("NewTabPage.SuggestionsImpression.client", 5)); 143 // But once incremented, they don't increase again unless reset.
144 logger.LogMostVisitedImpression(1, NTPLoggingTileSource::SERVER);
145 logger.LogMostVisitedImpression(2, NTPLoggingTileSource::CLIENT);
146 logger.LogMostVisitedImpression(3, NTPLoggingTileSource::SERVER);
147 logger.LogMostVisitedImpression(4, NTPLoggingTileSource::CLIENT);
148 EXPECT_THAT(TotalImpressions({1, 2, 3, 4}), ElementsAre(1, 1, 1, 1));
149 EXPECT_THAT(ServerImpressions({1, 2, 3, 4}), ElementsAre(1, 1, 0, 0));
150 EXPECT_THAT(ClientImpressions({1, 2, 3, 4}), ElementsAre(0, 0, 1, 1));
151
152 // Impressions are silently ignored for tiles >= 8.
153 logger.LogMostVisitedImpression(8, NTPLoggingTileSource::SERVER);
154 logger.LogMostVisitedImpression(9, NTPLoggingTileSource::CLIENT);
155 EXPECT_THAT(TotalImpressions({8, 9}), ElementsAre(0, 0));
156 EXPECT_THAT(ServerImpressions({8, 9}), ElementsAre(0, 0));
157 EXPECT_THAT(ClientImpressions({8, 9}), ElementsAre(0, 0));
158
159 // Navigating away from the NTP and back resets stats.
160 logger.NavigatedFromURLToURL(GURL("chrome://newtab/"),
161 GURL("http://chromium.org"));
162 logger.NavigatedFromURLToURL(GURL("http://chromium.org"),
163 GURL("chrome://newtab/"));
164 logger.LogMostVisitedImpression(1, NTPLoggingTileSource::SERVER);
165 logger.LogMostVisitedImpression(2, NTPLoggingTileSource::CLIENT);
166 logger.LogMostVisitedImpression(3, NTPLoggingTileSource::SERVER);
167 logger.LogMostVisitedImpression(4, NTPLoggingTileSource::CLIENT);
168 EXPECT_THAT(TotalImpressions({1, 2, 3, 4}), ElementsAre(2, 2, 2, 2));
169 EXPECT_THAT(ServerImpressions({1, 2, 3, 4}), ElementsAre(2, 1, 1, 0));
170 EXPECT_THAT(ClientImpressions({1, 2, 3, 4}), ElementsAre(0, 1, 1, 2));
103 } 171 }
104 172
105 TEST_F(NTPUserDataLoggerTest, TestLogMostVisitedNavigation) { 173 TEST_F(NTPUserDataLoggerTest, TestLogMostVisitedNavigation) {
106 base::StatisticsRecorder::Initialize(); 174 base::StatisticsRecorder::Initialize();
107 175
108 EXPECT_EQ(0, GetTotalCount("NewTabPage.MostVisited")); 176 EXPECT_THAT(TotalNavigations({1, 2, 3, 4}), ElementsAre(0, 0, 0, 0));
109 EXPECT_EQ(0, GetBinCount("NewTabPage.MostVisited.server", 1)); 177 EXPECT_THAT(ServerNavigations({1, 2, 3, 4}), ElementsAre(0, 0, 0, 0));
110 EXPECT_EQ(0, GetBinCount("NewTabPage.MostVisited.server", 5)); 178 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 179
114 TestNTPUserDataLogger logger; 180 TestNTPUserDataLogger logger;
115 181
116 logger.LogMostVisitedNavigation(1, NTPLoggingTileSource::SERVER); 182 logger.LogMostVisitedNavigation(1, NTPLoggingTileSource::SERVER);
117 EXPECT_EQ(1, GetTotalCount("NewTabPage.MostVisited")); 183 EXPECT_THAT(TotalNavigations({1, 2, 3, 4}), ElementsAre(1, 0, 0, 0));
118 EXPECT_EQ(1, GetBinCount("NewTabPage.MostVisited.server", 1)); 184 EXPECT_THAT(ServerNavigations({1, 2, 3, 4}), ElementsAre(1, 0, 0, 0));
119 EXPECT_EQ(0, GetBinCount("NewTabPage.MostVisited.server", 5)); 185 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 186
123 logger.LogMostVisitedNavigation(5, NTPLoggingTileSource::SERVER); 187 logger.LogMostVisitedNavigation(2, NTPLoggingTileSource::SERVER);
124 EXPECT_EQ(2, GetTotalCount("NewTabPage.MostVisited")); 188 EXPECT_THAT(TotalNavigations({1, 2, 3, 4}), ElementsAre(1, 1, 0, 0));
125 EXPECT_EQ(1, GetBinCount("NewTabPage.MostVisited.server", 1)); 189 EXPECT_THAT(ServerNavigations({1, 2, 3, 4}), ElementsAre(1, 1, 0, 0));
126 EXPECT_EQ(1, GetBinCount("NewTabPage.MostVisited.server", 5)); 190 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 191
130 logger.LogMostVisitedNavigation(1, NTPLoggingTileSource::CLIENT); 192 logger.LogMostVisitedNavigation(3, NTPLoggingTileSource::CLIENT);
131 EXPECT_EQ(3, GetTotalCount("NewTabPage.MostVisited")); 193 EXPECT_THAT(TotalNavigations({1, 2, 3, 4}), ElementsAre(1, 1, 1, 0));
132 EXPECT_EQ(1, GetBinCount("NewTabPage.MostVisited.server", 1)); 194 EXPECT_THAT(ServerNavigations({1, 2, 3, 4}), ElementsAre(1, 1, 0, 0));
133 EXPECT_EQ(1, GetBinCount("NewTabPage.MostVisited.server", 5)); 195 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 196
137 logger.LogMostVisitedNavigation(5, NTPLoggingTileSource::CLIENT); 197 logger.LogMostVisitedNavigation(4, NTPLoggingTileSource::CLIENT);
138 EXPECT_EQ(4, GetTotalCount("NewTabPage.MostVisited")); 198 EXPECT_THAT(TotalNavigations({1, 2, 3, 4}), ElementsAre(1, 1, 1, 1));
139 EXPECT_EQ(1, GetBinCount("NewTabPage.MostVisited.server", 1)); 199 EXPECT_THAT(ServerNavigations({1, 2, 3, 4}), ElementsAre(1, 1, 0, 0));
140 EXPECT_EQ(1, GetBinCount("NewTabPage.MostVisited.server", 5)); 200 EXPECT_THAT(ClientNavigations({1, 2, 3, 4}), ElementsAre(0, 0, 1, 1));
141 EXPECT_EQ(1, GetBinCount("NewTabPage.MostVisited.client", 1)); 201
142 EXPECT_EQ(1, GetBinCount("NewTabPage.MostVisited.client", 5)); 202 // Navigations always increase.
203 logger.LogMostVisitedNavigation(1, NTPLoggingTileSource::SERVER);
204 logger.LogMostVisitedNavigation(2, NTPLoggingTileSource::CLIENT);
205 logger.LogMostVisitedNavigation(3, NTPLoggingTileSource::SERVER);
206 logger.LogMostVisitedNavigation(4, NTPLoggingTileSource::CLIENT);
207 EXPECT_THAT(TotalNavigations({1, 2, 3, 4}), ElementsAre(2, 2, 2, 2));
208 EXPECT_THAT(ServerNavigations({1, 2, 3, 4}), ElementsAre(2, 1, 1, 0));
209 EXPECT_THAT(ClientNavigations({1, 2, 3, 4}), ElementsAre(0, 1, 1, 2));
143 } 210 }
OLDNEW
« no previous file with comments | « chrome/browser/ui/webui/ntp/ntp_user_data_logger.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698