OLD | NEW |
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/basictypes.h" | 7 #include "base/basictypes.h" |
8 #include "base/metrics/histogram.h" | 8 #include "base/metrics/histogram.h" |
9 #include "base/metrics/statistics_recorder.h" | 9 #include "base/metrics/statistics_recorder.h" |
10 #include "chrome/common/ntp_logging_events.h" | 10 #include "chrome/common/ntp_logging_events.h" |
11 #include "testing/gtest/include/gtest/gtest.h" | 11 #include "testing/gtest/include/gtest/gtest.h" |
12 | 12 |
13 namespace { | 13 namespace { |
14 | 14 |
15 class TestNTPUserDataLogger : public NTPUserDataLogger { | 15 class TestNTPUserDataLogger : public NTPUserDataLogger { |
16 public: | 16 public: |
17 TestNTPUserDataLogger() : NTPUserDataLogger(NULL) {} | 17 TestNTPUserDataLogger() : NTPUserDataLogger(NULL) {} |
18 virtual ~TestNTPUserDataLogger() {} | 18 virtual ~TestNTPUserDataLogger() {} |
19 }; | 19 }; |
20 | 20 |
21 base::HistogramBase::Count GetTotalCount(const std::string& histogram_name) { | 21 base::HistogramBase::Count GetTotalCount(const std::string& histogram_name) { |
22 base::HistogramBase* histogram = base::StatisticsRecorder::FindHistogram( | 22 base::HistogramBase* histogram = base::StatisticsRecorder::FindHistogram( |
23 histogram_name); | 23 histogram_name); |
24 return histogram->SnapshotSamples()->TotalCount(); | 24 // Return 0 if history is uninitialized. |
| 25 return histogram ? histogram->SnapshotSamples()->TotalCount() : 0; |
25 } | 26 } |
26 | 27 |
27 base::HistogramBase::Count GetBinCount(const std::string& histogram_name, | 28 base::HistogramBase::Count GetBinCount(const std::string& histogram_name, |
28 base::HistogramBase::Sample value) { | 29 base::HistogramBase::Sample value) { |
29 base::HistogramBase* histogram = base::StatisticsRecorder::FindHistogram( | 30 base::HistogramBase* histogram = base::StatisticsRecorder::FindHistogram( |
30 histogram_name); | 31 histogram_name); |
31 return histogram->SnapshotSamples()->GetCount(value); | 32 // Return 0 if history is uninitialized. |
| 33 return histogram ? histogram->SnapshotSamples()->GetCount(value) : 0; |
32 } | 34 } |
33 | 35 |
34 } // namespace | 36 } // namespace |
35 | 37 |
36 TEST(NTPUserDataLoggerTest, TestLogging) { | 38 TEST(NTPUserDataLoggerTest, TestLogging) { |
37 base::StatisticsRecorder::Initialize(); | 39 base::StatisticsRecorder::Initialize(); |
| 40 |
| 41 // Ensure empty statistics. |
| 42 EXPECT_EQ(0, GetTotalCount("NewTabPage.NumberOfMouseOvers")); |
| 43 EXPECT_EQ(0, GetBinCount("NewTabPage.NumberOfMouseOvers", 0)); |
| 44 |
| 45 // Enusure non-zero statistics. |
38 TestNTPUserDataLogger logger; | 46 TestNTPUserDataLogger logger; |
39 | 47 |
40 // Ensure it works when the statistics are all empty. Only the mouseover | |
41 // should be logged in this case. The other histograms are not created yet so | |
42 // we can't query them. | |
43 logger.EmitNtpStatistics(); | |
44 | |
45 EXPECT_EQ(1, GetTotalCount("NewTabPage.NumberOfMouseOvers")); | |
46 EXPECT_EQ(1, GetBinCount("NewTabPage.NumberOfMouseOvers", 0)); | |
47 | |
48 // Ensure it works with some non-zero statistics. All statistics should now | |
49 // be logged. | |
50 for (int i = 0; i < 20; ++i) | 48 for (int i = 0; i < 20; ++i) |
51 logger.LogEvent(NTP_MOUSEOVER); | 49 logger.LogEvent(NTP_MOUSEOVER); |
52 for (int i = 0; i < 8; ++i) | 50 for (int i = 0; i < 8; ++i) |
53 logger.LogEvent(NTP_TILE); | 51 logger.LogEvent(NTP_TILE); |
54 for (int i = 0; i < 4; ++i) | 52 for (int i = 0; i < 4; ++i) |
55 logger.LogEvent(NTP_THUMBNAIL_TILE); | 53 logger.LogEvent(NTP_THUMBNAIL_TILE); |
56 for (int i = 0; i < 2; ++i) | 54 for (int i = 0; i < 2; ++i) |
57 logger.LogEvent(NTP_THUMBNAIL_ERROR); | 55 logger.LogEvent(NTP_THUMBNAIL_ERROR); |
58 logger.LogEvent(NTP_GRAY_TILE_FALLBACK); | 56 logger.LogEvent(NTP_GRAY_TILE_FALLBACK); |
59 logger.LogEvent(NTP_EXTERNAL_TILE_FALLBACK); | 57 logger.LogEvent(NTP_EXTERNAL_TILE_FALLBACK); |
60 for (int i = 0; i < 2; ++i) | 58 for (int i = 0; i < 2; ++i) |
61 logger.LogEvent(NTP_EXTERNAL_TILE); | 59 logger.LogEvent(NTP_EXTERNAL_TILE); |
62 for (int i = 0; i < 2; ++i) | 60 for (int i = 0; i < 2; ++i) |
63 logger.LogEvent(NTP_GRAY_TILE); | 61 logger.LogEvent(NTP_GRAY_TILE); |
64 logger.LogEvent(NTP_SERVER_SIDE_SUGGESTION); | 62 logger.LogEvent(NTP_SERVER_SIDE_SUGGESTION); |
| 63 |
65 logger.EmitNtpStatistics(); | 64 logger.EmitNtpStatistics(); |
66 | 65 |
67 EXPECT_EQ(2, GetTotalCount("NewTabPage.NumberOfMouseOvers")); | 66 EXPECT_EQ(1, GetTotalCount("NewTabPage.NumberOfMouseOvers")); |
68 EXPECT_EQ(1, GetBinCount("NewTabPage.NumberOfMouseOvers", 0)); | 67 EXPECT_EQ(0, GetBinCount("NewTabPage.NumberOfMouseOvers", 0)); |
69 EXPECT_EQ(1, GetBinCount("NewTabPage.NumberOfMouseOvers", 20)); | 68 EXPECT_EQ(1, GetBinCount("NewTabPage.NumberOfMouseOvers", 20)); |
70 EXPECT_EQ(1, GetTotalCount("NewTabPage.NumberOfTiles")); | 69 EXPECT_EQ(1, GetTotalCount("NewTabPage.NumberOfTiles")); |
71 EXPECT_EQ(1, GetBinCount("NewTabPage.NumberOfTiles", 8)); | 70 EXPECT_EQ(1, GetBinCount("NewTabPage.NumberOfTiles", 8)); |
72 EXPECT_EQ(1, GetTotalCount("NewTabPage.NumberOfThumbnailTiles")); | 71 EXPECT_EQ(1, GetTotalCount("NewTabPage.NumberOfThumbnailTiles")); |
73 EXPECT_EQ(1, GetBinCount("NewTabPage.NumberOfThumbnailTiles", 4)); | 72 EXPECT_EQ(1, GetBinCount("NewTabPage.NumberOfThumbnailTiles", 4)); |
74 EXPECT_EQ(1, GetTotalCount("NewTabPage.NumberOfThumbnailErrors")); | 73 EXPECT_EQ(1, GetTotalCount("NewTabPage.NumberOfThumbnailErrors")); |
75 EXPECT_EQ(1, GetBinCount("NewTabPage.NumberOfThumbnailErrors", 2)); | 74 EXPECT_EQ(1, GetBinCount("NewTabPage.NumberOfThumbnailErrors", 2)); |
76 EXPECT_EQ(1, GetTotalCount("NewTabPage.NumberOfGrayTileFallbacks")); | 75 EXPECT_EQ(1, GetTotalCount("NewTabPage.NumberOfGrayTileFallbacks")); |
77 EXPECT_EQ(1, GetBinCount("NewTabPage.NumberOfGrayTileFallbacks", 1)); | 76 EXPECT_EQ(1, GetBinCount("NewTabPage.NumberOfGrayTileFallbacks", 1)); |
78 EXPECT_EQ(1, GetTotalCount("NewTabPage.NumberOfExternalTileFallbacks")); | 77 EXPECT_EQ(1, GetTotalCount("NewTabPage.NumberOfExternalTileFallbacks")); |
79 EXPECT_EQ(1, GetBinCount("NewTabPage.NumberOfExternalTileFallbacks", 1)); | 78 EXPECT_EQ(1, GetBinCount("NewTabPage.NumberOfExternalTileFallbacks", 1)); |
80 EXPECT_EQ(1, GetTotalCount("NewTabPage.NumberOfExternalTiles")); | 79 EXPECT_EQ(1, GetTotalCount("NewTabPage.NumberOfExternalTiles")); |
81 EXPECT_EQ(1, GetBinCount("NewTabPage.NumberOfExternalTiles", 2)); | 80 EXPECT_EQ(1, GetBinCount("NewTabPage.NumberOfExternalTiles", 2)); |
82 EXPECT_EQ(1, GetTotalCount("NewTabPage.NumberOfGrayTiles")); | 81 EXPECT_EQ(1, GetTotalCount("NewTabPage.NumberOfGrayTiles")); |
83 EXPECT_EQ(1, GetBinCount("NewTabPage.NumberOfGrayTiles", 2)); | 82 EXPECT_EQ(1, GetBinCount("NewTabPage.NumberOfGrayTiles", 2)); |
84 EXPECT_EQ(1, GetTotalCount("NewTabPage.SuggestionsType")); | 83 EXPECT_EQ(1, GetTotalCount("NewTabPage.SuggestionsType")); |
85 EXPECT_EQ(1, GetBinCount("NewTabPage.SuggestionsType", 1)); | 84 EXPECT_EQ(1, GetBinCount("NewTabPage.SuggestionsType", 1)); |
86 | 85 |
87 // Statistics should be reset to 0, so we should not log anything else. | 86 // Statistics should be reset to 0, so we should not log anything else. |
88 logger.EmitNtpStatistics(); | 87 logger.EmitNtpStatistics(); |
89 EXPECT_EQ(3, GetTotalCount("NewTabPage.NumberOfMouseOvers")); | 88 EXPECT_EQ(2, GetTotalCount("NewTabPage.NumberOfMouseOvers")); |
90 EXPECT_EQ(2, GetBinCount("NewTabPage.NumberOfMouseOvers", 0)); | 89 EXPECT_EQ(1, GetBinCount("NewTabPage.NumberOfMouseOvers", 0)); |
91 EXPECT_EQ(1, GetBinCount("NewTabPage.NumberOfMouseOvers", 20)); | 90 EXPECT_EQ(1, GetBinCount("NewTabPage.NumberOfMouseOvers", 20)); |
92 EXPECT_EQ(1, GetTotalCount("NewTabPage.NumberOfTiles")); | 91 EXPECT_EQ(1, GetTotalCount("NewTabPage.NumberOfTiles")); |
93 EXPECT_EQ(1, GetTotalCount("NewTabPage.NumberOfThumbnailTiles")); | 92 EXPECT_EQ(1, GetTotalCount("NewTabPage.NumberOfThumbnailTiles")); |
94 EXPECT_EQ(1, GetTotalCount("NewTabPage.NumberOfThumbnailErrors")); | 93 EXPECT_EQ(1, GetTotalCount("NewTabPage.NumberOfThumbnailErrors")); |
95 EXPECT_EQ(1, GetTotalCount("NewTabPage.NumberOfGrayTileFallbacks")); | 94 EXPECT_EQ(1, GetTotalCount("NewTabPage.NumberOfGrayTileFallbacks")); |
96 EXPECT_EQ(1, GetTotalCount("NewTabPage.NumberOfExternalTileFallbacks")); | 95 EXPECT_EQ(1, GetTotalCount("NewTabPage.NumberOfExternalTileFallbacks")); |
97 EXPECT_EQ(1, GetTotalCount("NewTabPage.NumberOfExternalTiles")); | 96 EXPECT_EQ(1, GetTotalCount("NewTabPage.NumberOfExternalTiles")); |
98 EXPECT_EQ(1, GetTotalCount("NewTabPage.NumberOfGrayTiles")); | 97 EXPECT_EQ(1, GetTotalCount("NewTabPage.NumberOfGrayTiles")); |
99 EXPECT_EQ(1, GetTotalCount("NewTabPage.SuggestionsType")); | 98 EXPECT_EQ(1, GetTotalCount("NewTabPage.SuggestionsType")); |
100 } | 99 } |
| 100 |
| 101 TEST(NTPUserDataLoggerTest, TestLogImpression) { |
| 102 base::StatisticsRecorder::Initialize(); |
| 103 |
| 104 EXPECT_EQ(0, GetBinCount("NewTabPage.SuggestionsImpression.foobar", 1)); |
| 105 EXPECT_EQ(0, GetBinCount("NewTabPage.SuggestionsImpression.foobar", 5)); |
| 106 |
| 107 TestNTPUserDataLogger logger; |
| 108 |
| 109 logger.LogImpression(1, L"foobar"); |
| 110 EXPECT_EQ(1, GetBinCount("NewTabPage.SuggestionsImpression.foobar", 1)); |
| 111 EXPECT_EQ(0, GetBinCount("NewTabPage.SuggestionsImpression.foobar", 5)); |
| 112 |
| 113 logger.LogImpression(5, L"foobar"); |
| 114 EXPECT_EQ(1, GetBinCount("NewTabPage.SuggestionsImpression.foobar", 1)); |
| 115 EXPECT_EQ(1, GetBinCount("NewTabPage.SuggestionsImpression.foobar", 5)); |
| 116 |
| 117 // Try without provider. Only total increases. |
| 118 logger.LogImpression(5, L""); |
| 119 EXPECT_EQ(1, GetBinCount("NewTabPage.SuggestionsImpression.foobar", 1)); |
| 120 EXPECT_EQ(1, GetBinCount("NewTabPage.SuggestionsImpression.foobar", 5)); |
| 121 |
| 122 logger.LogImpression(1, L"foobar"); |
| 123 EXPECT_EQ(2, GetBinCount("NewTabPage.SuggestionsImpression.foobar", 1)); |
| 124 EXPECT_EQ(1, GetBinCount("NewTabPage.SuggestionsImpression.foobar", 5)); |
| 125 } |
| 126 |
| 127 TEST(NTPUserDataLoggerTest, TestLogNavigation) { |
| 128 base::StatisticsRecorder::Initialize(); |
| 129 |
| 130 EXPECT_EQ(0, GetTotalCount("NewTabPage.MostVisited")); |
| 131 EXPECT_EQ(0, GetBinCount("NewTabPage.MostVisited.foobar", 1)); |
| 132 EXPECT_EQ(0, GetBinCount("NewTabPage.MostVisited.foobar", 5)); |
| 133 |
| 134 TestNTPUserDataLogger logger; |
| 135 |
| 136 logger.LogNavigation(1, L"foobar"); |
| 137 EXPECT_EQ(1, GetTotalCount("NewTabPage.MostVisited")); |
| 138 EXPECT_EQ(1, GetBinCount("NewTabPage.MostVisited.foobar", 1)); |
| 139 EXPECT_EQ(0, GetBinCount("NewTabPage.MostVisited.foobar", 5)); |
| 140 |
| 141 logger.LogNavigation(5, L"foobar"); |
| 142 EXPECT_EQ(2, GetTotalCount("NewTabPage.MostVisited")); |
| 143 EXPECT_EQ(1, GetBinCount("NewTabPage.MostVisited.foobar", 1)); |
| 144 EXPECT_EQ(1, GetBinCount("NewTabPage.MostVisited.foobar", 5)); |
| 145 |
| 146 // Try without provider. Only total increases. |
| 147 logger.LogNavigation(5, L""); |
| 148 EXPECT_EQ(3, GetTotalCount("NewTabPage.MostVisited")); |
| 149 EXPECT_EQ(1, GetBinCount("NewTabPage.MostVisited.foobar", 1)); |
| 150 EXPECT_EQ(1, GetBinCount("NewTabPage.MostVisited.foobar", 5)); |
| 151 |
| 152 logger.LogNavigation(1, L"foobar"); |
| 153 EXPECT_EQ(4, GetTotalCount("NewTabPage.MostVisited")); |
| 154 EXPECT_EQ(2, GetBinCount("NewTabPage.MostVisited.foobar", 1)); |
| 155 EXPECT_EQ(1, GetBinCount("NewTabPage.MostVisited.foobar", 5)); |
| 156 } |
OLD | NEW |