| 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 | 
|---|