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 <memory> | 7 #include <memory> |
8 #include <string> | 8 #include <string> |
9 #include <vector> | 9 #include <vector> |
10 | 10 |
11 #include "base/metrics/histogram.h" | 11 #include "base/metrics/histogram.h" |
12 #include "base/metrics/statistics_recorder.h" | 12 #include "base/metrics/statistics_recorder.h" |
13 #include "base/test/histogram_tester.h" | 13 #include "base/test/histogram_tester.h" |
14 #include "chrome/common/search/ntp_logging_events.h" | 14 #include "chrome/common/search/ntp_logging_events.h" |
15 #include "testing/gmock/include/gmock/gmock.h" | 15 #include "testing/gmock/include/gmock/gmock.h" |
16 #include "testing/gtest/include/gtest/gtest.h" | 16 #include "testing/gtest/include/gtest/gtest.h" |
17 | 17 |
18 using base::Bucket; | 18 using base::Bucket; |
19 using ntp_tiles::NTPTileSource; | 19 using ntp_tiles::NTPTileSource; |
20 using testing::ElementsAre; | 20 using testing::ElementsAre; |
21 using testing::IsEmpty; | 21 using testing::IsEmpty; |
| 22 using testing::SizeIs; |
22 | 23 |
23 namespace { | 24 namespace { |
24 | 25 |
25 using Sample = base::HistogramBase::Sample; | 26 using Sample = base::HistogramBase::Sample; |
26 using Samples = std::vector<Sample>; | 27 using Samples = std::vector<Sample>; |
27 | 28 |
28 class TestNTPUserDataLogger : public NTPUserDataLogger { | 29 class TestNTPUserDataLogger : public NTPUserDataLogger { |
29 public: | 30 public: |
30 TestNTPUserDataLogger() : NTPUserDataLogger(nullptr) {} | 31 TestNTPUserDataLogger() : NTPUserDataLogger(nullptr) {} |
31 ~TestNTPUserDataLogger() override {} | 32 ~TestNTPUserDataLogger() override {} |
(...skipping 172 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
204 EXPECT_THAT( | 205 EXPECT_THAT( |
205 histogram_tester.GetAllSamples("NewTabPage.MostVisited"), | 206 histogram_tester.GetAllSamples("NewTabPage.MostVisited"), |
206 ElementsAre(Bucket(0, 2), Bucket(1, 2), Bucket(2, 2), Bucket(3, 2))); | 207 ElementsAre(Bucket(0, 2), Bucket(1, 2), Bucket(2, 2), Bucket(3, 2))); |
207 EXPECT_THAT( | 208 EXPECT_THAT( |
208 histogram_tester.GetAllSamples("NewTabPage.MostVisited.server"), | 209 histogram_tester.GetAllSamples("NewTabPage.MostVisited.server"), |
209 ElementsAre(Bucket(0, 2), Bucket(1, 1), Bucket(2, 1))); | 210 ElementsAre(Bucket(0, 2), Bucket(1, 1), Bucket(2, 1))); |
210 EXPECT_THAT( | 211 EXPECT_THAT( |
211 histogram_tester.GetAllSamples("NewTabPage.MostVisited.client"), | 212 histogram_tester.GetAllSamples("NewTabPage.MostVisited.client"), |
212 ElementsAre(Bucket(1, 1), Bucket(2, 1), Bucket(3, 2))); | 213 ElementsAre(Bucket(1, 1), Bucket(2, 1), Bucket(3, 2))); |
213 } | 214 } |
| 215 |
| 216 TEST(NTPUserDataLoggerTest, TestLoadTime) { |
| 217 base::StatisticsRecorder::Initialize(); |
| 218 |
| 219 base::HistogramTester histogram_tester; |
| 220 |
| 221 TestNTPUserDataLogger logger; |
| 222 logger.ntp_url_ = GURL("chrome://newtab/"); |
| 223 |
| 224 base::TimeDelta delta_tiles_received = base::TimeDelta::FromMilliseconds(10); |
| 225 base::TimeDelta delta_tiles_loaded = base::TimeDelta::FromMilliseconds(100); |
| 226 |
| 227 // Send the ALL_TILES_RECEIVED event. |
| 228 logger.LogEvent(NTP_ALL_TILES_RECEIVED, delta_tiles_received); |
| 229 |
| 230 // Log a TOP_SITES impression (for the .MostVisited vs .MostLikely split in |
| 231 // the time histograms). |
| 232 logger.LogMostVisitedImpression(0, NTPTileSource::TOP_SITES); |
| 233 |
| 234 // Send the ALL_TILES_LOADED event, this should trigger emitting histograms. |
| 235 logger.LogEvent(NTP_ALL_TILES_LOADED, delta_tiles_loaded); |
| 236 |
| 237 EXPECT_THAT(histogram_tester.GetAllSamples("NewTabPage.TilesReceivedTime"), |
| 238 SizeIs(1)); |
| 239 EXPECT_THAT(histogram_tester.GetAllSamples( |
| 240 "NewTabPage.TilesReceivedTime.MostVisited"), |
| 241 SizeIs(1)); |
| 242 EXPECT_THAT( |
| 243 histogram_tester.GetAllSamples("NewTabPage.TilesReceivedTime.MostLikely"), |
| 244 IsEmpty()); |
| 245 EXPECT_THAT(histogram_tester.GetAllSamples("NewTabPage.LoadTime"), SizeIs(1)); |
| 246 EXPECT_THAT(histogram_tester.GetAllSamples("NewTabPage.LoadTime.MostVisited"), |
| 247 SizeIs(1)); |
| 248 EXPECT_THAT(histogram_tester.GetAllSamples("NewTabPage.LoadTime.MostLikely"), |
| 249 IsEmpty()); |
| 250 |
| 251 histogram_tester.ExpectTimeBucketCount("NewTabPage.TilesReceivedTime", |
| 252 delta_tiles_received, 1); |
| 253 histogram_tester.ExpectTimeBucketCount( |
| 254 "NewTabPage.TilesReceivedTime.MostVisited", delta_tiles_received, 1); |
| 255 histogram_tester.ExpectTimeBucketCount("NewTabPage.LoadTime", |
| 256 delta_tiles_loaded, 1); |
| 257 histogram_tester.ExpectTimeBucketCount("NewTabPage.LoadTime.MostVisited", |
| 258 delta_tiles_loaded, 1); |
| 259 |
| 260 // We should not log again for the same NTP. |
| 261 logger.LogEvent(NTP_ALL_TILES_RECEIVED, delta_tiles_received); |
| 262 logger.LogEvent(NTP_ALL_TILES_LOADED, delta_tiles_loaded); |
| 263 histogram_tester.ExpectTimeBucketCount("NewTabPage.TilesReceivedTime", |
| 264 delta_tiles_received, 1); |
| 265 histogram_tester.ExpectTimeBucketCount("NewTabPage.LoadTime", |
| 266 delta_tiles_loaded, 1); |
| 267 |
| 268 // After navigating away from the NTP and back, we record again. |
| 269 logger.NavigatedFromURLToURL(GURL("chrome://newtab/"), |
| 270 GURL("http://chromium.org")); |
| 271 logger.NavigatedFromURLToURL(GURL("http://chromium.org"), |
| 272 GURL("chrome://newtab/")); |
| 273 |
| 274 // This time, log a SUGGESTIONS_SERVICE impression, so the times will end up |
| 275 // in .MostLikely. |
| 276 logger.LogMostVisitedImpression(0, NTPTileSource::SUGGESTIONS_SERVICE); |
| 277 |
| 278 base::TimeDelta delta_tiles_received2 = base::TimeDelta::FromMilliseconds(50); |
| 279 base::TimeDelta delta_tiles_loaded2 = base::TimeDelta::FromMilliseconds(500); |
| 280 logger.LogEvent(NTP_ALL_TILES_RECEIVED, delta_tiles_received2); |
| 281 logger.LogEvent(NTP_ALL_TILES_LOADED, delta_tiles_loaded2); |
| 282 |
| 283 EXPECT_THAT(histogram_tester.GetAllSamples("NewTabPage.TilesReceivedTime"), |
| 284 SizeIs(2)); |
| 285 EXPECT_THAT(histogram_tester.GetAllSamples( |
| 286 "NewTabPage.TilesReceivedTime.MostVisited"), |
| 287 SizeIs(1)); |
| 288 EXPECT_THAT( |
| 289 histogram_tester.GetAllSamples("NewTabPage.TilesReceivedTime.MostLikely"), |
| 290 SizeIs(1)); |
| 291 EXPECT_THAT(histogram_tester.GetAllSamples("NewTabPage.LoadTime"), SizeIs(2)); |
| 292 EXPECT_THAT(histogram_tester.GetAllSamples("NewTabPage.LoadTime.MostVisited"), |
| 293 SizeIs(1)); |
| 294 EXPECT_THAT(histogram_tester.GetAllSamples("NewTabPage.LoadTime.MostLikely"), |
| 295 SizeIs(1)); |
| 296 |
| 297 histogram_tester.ExpectTimeBucketCount("NewTabPage.TilesReceivedTime", |
| 298 delta_tiles_received2, 1); |
| 299 histogram_tester.ExpectTimeBucketCount( |
| 300 "NewTabPage.TilesReceivedTime.MostLikely", delta_tiles_received2, 1); |
| 301 histogram_tester.ExpectTimeBucketCount("NewTabPage.LoadTime", |
| 302 delta_tiles_loaded2, 1); |
| 303 histogram_tester.ExpectTimeBucketCount("NewTabPage.LoadTime.MostLikely", |
| 304 delta_tiles_loaded2, 1); |
| 305 } |
OLD | NEW |