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

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 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, TestLogging) {
44 base::StatisticsRecorder::Initialize(); 82 base::StatisticsRecorder::Initialize();
45 83
46 // Enusure non-zero statistics. 84 // Enusure non-zero statistics.
(...skipping 10 matching lines...) Expand all
57 EXPECT_EQ(1, GetTotalCount("NewTabPage.NumberOfTiles")); 95 EXPECT_EQ(1, GetTotalCount("NewTabPage.NumberOfTiles"));
58 EXPECT_EQ(1, GetBinCount("NewTabPage.NumberOfTiles", 8)); 96 EXPECT_EQ(1, GetBinCount("NewTabPage.NumberOfTiles", 8));
59 97
60 // Statistics should be reset to 0, so we should not log anything else. 98 // Statistics should be reset to 0, so we should not log anything else.
61 logger.LogEvent(NTP_ALL_TILES_LOADED, delta); 99 logger.LogEvent(NTP_ALL_TILES_LOADED, delta);
62 EXPECT_EQ(1, GetTotalCount("NewTabPage.NumberOfTiles")); 100 EXPECT_EQ(1, GetTotalCount("NewTabPage.NumberOfTiles"));
63 } 101 }
64 102
65 TEST_F(NTPUserDataLoggerTest, TestLogMostVisitedImpression) { 103 TEST_F(NTPUserDataLoggerTest, TestLogMostVisitedImpression) {
66 base::StatisticsRecorder::Initialize(); 104 base::StatisticsRecorder::Initialize();
67 105 EXPECT_THAT(TotalImpressions({1, 2, 3, 4}), ElementsAre(0, 0, 0, 0));
68 EXPECT_EQ(0, GetTotalCount("NewTabPage.SuggestionsImpression")); 106 EXPECT_THAT(ServerImpressions({1, 2, 3, 4}), ElementsAre(0, 0, 0, 0));
69 EXPECT_EQ(0, GetBinCount("NewTabPage.SuggestionsImpression.server", 1)); 107 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 108
74 TestNTPUserDataLogger logger; 109 TestNTPUserDataLogger logger;
75 110
111 // Impressions increment the associated bins.
112
76 logger.LogMostVisitedImpression(1, NTPLoggingTileSource::SERVER); 113 logger.LogMostVisitedImpression(1, NTPLoggingTileSource::SERVER);
77 EXPECT_EQ(1, GetTotalCount("NewTabPage.SuggestionsImpression")); 114 EXPECT_THAT(TotalImpressions({1, 2, 3, 4}), ElementsAre(1, 0, 0, 0));
78 EXPECT_EQ(1, GetBinCount("NewTabPage.SuggestionsImpression.server", 1)); 115 EXPECT_THAT(ServerImpressions({1, 2, 3, 4}), ElementsAre(1, 0, 0, 0));
79 EXPECT_EQ(0, GetBinCount("NewTabPage.SuggestionsImpression.server", 5)); 116 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 117
83 logger.LogMostVisitedImpression(5, NTPLoggingTileSource::SERVER); 118 logger.LogMostVisitedImpression(2, NTPLoggingTileSource::SERVER);
84 EXPECT_EQ(2, GetTotalCount("NewTabPage.SuggestionsImpression")); 119 EXPECT_THAT(TotalImpressions({1, 2, 3, 4}), ElementsAre(1, 1, 0, 0));
85 EXPECT_EQ(1, GetBinCount("NewTabPage.SuggestionsImpression.server", 1)); 120 EXPECT_THAT(ServerImpressions({1, 2, 3, 4}), ElementsAre(1, 1, 0, 0));
86 EXPECT_EQ(1, GetBinCount("NewTabPage.SuggestionsImpression.server", 5)); 121 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 122
90 logger.LogMostVisitedImpression(1, NTPLoggingTileSource::CLIENT); 123 logger.LogMostVisitedImpression(3, NTPLoggingTileSource::CLIENT);
91 EXPECT_EQ(3, GetTotalCount("NewTabPage.SuggestionsImpression")); 124 EXPECT_THAT(TotalImpressions({1, 2, 3, 4}), ElementsAre(1, 1, 1, 0));
92 EXPECT_EQ(1, GetBinCount("NewTabPage.SuggestionsImpression.server", 1)); 125 EXPECT_THAT(ServerImpressions({1, 2, 3, 4}), ElementsAre(1, 1, 0, 0));
93 EXPECT_EQ(1, GetBinCount("NewTabPage.SuggestionsImpression.server", 5)); 126 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 127
97 logger.LogMostVisitedImpression(5, NTPLoggingTileSource::CLIENT); 128 logger.LogMostVisitedImpression(4, NTPLoggingTileSource::CLIENT);
98 EXPECT_EQ(4, GetTotalCount("NewTabPage.SuggestionsImpression")); 129 EXPECT_THAT(TotalImpressions({1, 2, 3, 4}), ElementsAre(1, 1, 1, 1));
99 EXPECT_EQ(1, GetBinCount("NewTabPage.SuggestionsImpression.server", 1)); 130 EXPECT_THAT(ServerImpressions({1, 2, 3, 4}), ElementsAre(1, 1, 0, 0));
100 EXPECT_EQ(1, GetBinCount("NewTabPage.SuggestionsImpression.server", 5)); 131 EXPECT_THAT(ClientImpressions({1, 2, 3, 4}), ElementsAre(0, 0, 1, 1));
101 EXPECT_EQ(1, GetBinCount("NewTabPage.SuggestionsImpression.client", 1)); 132
102 EXPECT_EQ(1, GetBinCount("NewTabPage.SuggestionsImpression.client", 5)); 133 // But once incremented, they don't increase again unless reset.
134 logger.LogMostVisitedImpression(1, NTPLoggingTileSource::SERVER);
135 logger.LogMostVisitedImpression(2, NTPLoggingTileSource::CLIENT);
136 logger.LogMostVisitedImpression(3, NTPLoggingTileSource::SERVER);
137 logger.LogMostVisitedImpression(4, NTPLoggingTileSource::CLIENT);
138 EXPECT_THAT(TotalImpressions({1, 2, 3, 4}), ElementsAre(1, 1, 1, 1));
139 EXPECT_THAT(ServerImpressions({1, 2, 3, 4}), ElementsAre(1, 1, 0, 0));
140 EXPECT_THAT(ClientImpressions({1, 2, 3, 4}), ElementsAre(0, 0, 1, 1));
141
142 // Impressions are silently ignored for tiles >= 8.
143 logger.LogMostVisitedImpression(8, NTPLoggingTileSource::SERVER);
144 logger.LogMostVisitedImpression(9, NTPLoggingTileSource::CLIENT);
145 EXPECT_THAT(TotalImpressions({8, 9}), ElementsAre(0, 0));
146 EXPECT_THAT(ServerImpressions({8, 9}), ElementsAre(0, 0));
147 EXPECT_THAT(ClientImpressions({8, 9}), ElementsAre(0, 0));
103 } 148 }
104 149
105 TEST_F(NTPUserDataLoggerTest, TestLogMostVisitedNavigation) { 150 TEST_F(NTPUserDataLoggerTest, TestLogMostVisitedNavigation) {
106 base::StatisticsRecorder::Initialize(); 151 base::StatisticsRecorder::Initialize();
107 152
108 EXPECT_EQ(0, GetTotalCount("NewTabPage.MostVisited")); 153 EXPECT_THAT(TotalNavigations({1, 2, 3, 4}), ElementsAre(0, 0, 0, 0));
109 EXPECT_EQ(0, GetBinCount("NewTabPage.MostVisited.server", 1)); 154 EXPECT_THAT(ServerNavigations({1, 2, 3, 4}), ElementsAre(0, 0, 0, 0));
110 EXPECT_EQ(0, GetBinCount("NewTabPage.MostVisited.server", 5)); 155 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 156
114 TestNTPUserDataLogger logger; 157 TestNTPUserDataLogger logger;
115 158
116 logger.LogMostVisitedNavigation(1, NTPLoggingTileSource::SERVER); 159 logger.LogMostVisitedNavigation(1, NTPLoggingTileSource::SERVER);
117 EXPECT_EQ(1, GetTotalCount("NewTabPage.MostVisited")); 160 EXPECT_THAT(TotalNavigations({1, 2, 3, 4}), ElementsAre(1, 0, 0, 0));
118 EXPECT_EQ(1, GetBinCount("NewTabPage.MostVisited.server", 1)); 161 EXPECT_THAT(ServerNavigations({1, 2, 3, 4}), ElementsAre(1, 0, 0, 0));
119 EXPECT_EQ(0, GetBinCount("NewTabPage.MostVisited.server", 5)); 162 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 163
123 logger.LogMostVisitedNavigation(5, NTPLoggingTileSource::SERVER); 164 logger.LogMostVisitedNavigation(2, NTPLoggingTileSource::SERVER);
124 EXPECT_EQ(2, GetTotalCount("NewTabPage.MostVisited")); 165 EXPECT_THAT(TotalNavigations({1, 2, 3, 4}), ElementsAre(1, 1, 0, 0));
125 EXPECT_EQ(1, GetBinCount("NewTabPage.MostVisited.server", 1)); 166 EXPECT_THAT(ServerNavigations({1, 2, 3, 4}), ElementsAre(1, 1, 0, 0));
126 EXPECT_EQ(1, GetBinCount("NewTabPage.MostVisited.server", 5)); 167 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 168
130 logger.LogMostVisitedNavigation(1, NTPLoggingTileSource::CLIENT); 169 logger.LogMostVisitedNavigation(3, NTPLoggingTileSource::CLIENT);
131 EXPECT_EQ(3, GetTotalCount("NewTabPage.MostVisited")); 170 EXPECT_THAT(TotalNavigations({1, 2, 3, 4}), ElementsAre(1, 1, 1, 0));
132 EXPECT_EQ(1, GetBinCount("NewTabPage.MostVisited.server", 1)); 171 EXPECT_THAT(ServerNavigations({1, 2, 3, 4}), ElementsAre(1, 1, 0, 0));
133 EXPECT_EQ(1, GetBinCount("NewTabPage.MostVisited.server", 5)); 172 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 173
137 logger.LogMostVisitedNavigation(5, NTPLoggingTileSource::CLIENT); 174 logger.LogMostVisitedNavigation(4, NTPLoggingTileSource::CLIENT);
138 EXPECT_EQ(4, GetTotalCount("NewTabPage.MostVisited")); 175 EXPECT_THAT(TotalNavigations({1, 2, 3, 4}), ElementsAre(1, 1, 1, 1));
139 EXPECT_EQ(1, GetBinCount("NewTabPage.MostVisited.server", 1)); 176 EXPECT_THAT(ServerNavigations({1, 2, 3, 4}), ElementsAre(1, 1, 0, 0));
140 EXPECT_EQ(1, GetBinCount("NewTabPage.MostVisited.server", 5)); 177 EXPECT_THAT(ClientNavigations({1, 2, 3, 4}), ElementsAre(0, 0, 1, 1));
141 EXPECT_EQ(1, GetBinCount("NewTabPage.MostVisited.client", 1)); 178
142 EXPECT_EQ(1, GetBinCount("NewTabPage.MostVisited.client", 5)); 179 // Navigations always increase.
180 logger.LogMostVisitedNavigation(1, NTPLoggingTileSource::SERVER);
181 logger.LogMostVisitedNavigation(2, NTPLoggingTileSource::CLIENT);
182 logger.LogMostVisitedNavigation(3, NTPLoggingTileSource::SERVER);
183 logger.LogMostVisitedNavigation(4, NTPLoggingTileSource::CLIENT);
184 EXPECT_THAT(TotalNavigations({1, 2, 3, 4}), ElementsAre(2, 2, 2, 2));
185 EXPECT_THAT(ServerNavigations({1, 2, 3, 4}), ElementsAre(2, 1, 1, 0));
186 EXPECT_THAT(ClientNavigations({1, 2, 3, 4}), ElementsAre(0, 1, 1, 2));
143 } 187 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698