| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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 <vector> | 5 #include <vector> |
| 6 | 6 |
| 7 #include "base/bind.h" |
| 7 #include "base/json/json_reader.h" | 8 #include "base/json/json_reader.h" |
| 8 #include "base/memory/scoped_ptr.h" | 9 #include "base/memory/scoped_ptr.h" |
| 9 #include "base/metrics/histogram.h" | 10 #include "base/metrics/histogram_macros.h" |
| 11 #include "base/metrics/sparse_histogram.h" |
| 10 #include "base/metrics/statistics_recorder.h" | 12 #include "base/metrics/statistics_recorder.h" |
| 11 #include "base/values.h" | 13 #include "base/values.h" |
| 12 #include "testing/gtest/include/gtest/gtest.h" | 14 #include "testing/gtest/include/gtest/gtest.h" |
| 13 | 15 |
| 14 namespace base { | 16 namespace base { |
| 15 | 17 |
| 16 class StatisticsRecorderTest : public testing::Test { | 18 class StatisticsRecorderTest : public testing::Test { |
| 17 protected: | 19 protected: |
| 18 void SetUp() override { | 20 void SetUp() override { |
| 19 // Each test will have a clean state (no Histogram / BucketRanges | 21 // Each test will have a clean state (no Histogram / BucketRanges |
| (...skipping 285 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 305 EXPECT_EQ("TestHistogram2", histogram_name); | 307 EXPECT_EQ("TestHistogram2", histogram_name); |
| 306 | 308 |
| 307 json.clear(); | 309 json.clear(); |
| 308 UninitializeStatisticsRecorder(); | 310 UninitializeStatisticsRecorder(); |
| 309 | 311 |
| 310 // No data should be returned. | 312 // No data should be returned. |
| 311 json = StatisticsRecorder::ToJSON(query); | 313 json = StatisticsRecorder::ToJSON(query); |
| 312 EXPECT_TRUE(json.empty()); | 314 EXPECT_TRUE(json.empty()); |
| 313 } | 315 } |
| 314 | 316 |
| 317 namespace { |
| 318 |
| 319 // CallbackCheckWrapper is simply a convenient way to check and store that |
| 320 // a callback was actually run. |
| 321 struct CallbackCheckWrapper { |
| 322 CallbackCheckWrapper() : called(false), last_histogram_value(0) {} |
| 323 |
| 324 void OnHistogramChanged(base::HistogramBase::Sample histogram_value) { |
| 325 called = true; |
| 326 last_histogram_value = histogram_value; |
| 327 } |
| 328 |
| 329 bool called; |
| 330 base::HistogramBase::Sample last_histogram_value; |
| 331 }; |
| 332 |
| 333 } // namespace |
| 334 |
| 335 // Check that you can't overwrite the callback with another. |
| 336 TEST_F(StatisticsRecorderTest, SetCallbackFailsWithoutHistogramTest) { |
| 337 CallbackCheckWrapper callback_wrapper; |
| 338 |
| 339 bool result = base::StatisticsRecorder::SetCallback( |
| 340 "TestHistogram", base::Bind(&CallbackCheckWrapper::OnHistogramChanged, |
| 341 base::Unretained(&callback_wrapper))); |
| 342 EXPECT_TRUE(result); |
| 343 |
| 344 result = base::StatisticsRecorder::SetCallback( |
| 345 "TestHistogram", base::Bind(&CallbackCheckWrapper::OnHistogramChanged, |
| 346 base::Unretained(&callback_wrapper))); |
| 347 EXPECT_FALSE(result); |
| 348 } |
| 349 |
| 350 // Check that you can't overwrite the callback with another. |
| 351 TEST_F(StatisticsRecorderTest, SetCallbackFailsWithHistogramTest) { |
| 352 HistogramBase* histogram = Histogram::FactoryGet("TestHistogram", 1, 1000, 10, |
| 353 HistogramBase::kNoFlags); |
| 354 EXPECT_TRUE(histogram); |
| 355 |
| 356 CallbackCheckWrapper callback_wrapper; |
| 357 |
| 358 bool result = base::StatisticsRecorder::SetCallback( |
| 359 "TestHistogram", base::Bind(&CallbackCheckWrapper::OnHistogramChanged, |
| 360 base::Unretained(&callback_wrapper))); |
| 361 EXPECT_TRUE(result); |
| 362 EXPECT_EQ(histogram->flags() & base::HistogramBase::kCallbackExists, |
| 363 base::HistogramBase::kCallbackExists); |
| 364 |
| 365 result = base::StatisticsRecorder::SetCallback( |
| 366 "TestHistogram", base::Bind(&CallbackCheckWrapper::OnHistogramChanged, |
| 367 base::Unretained(&callback_wrapper))); |
| 368 EXPECT_FALSE(result); |
| 369 EXPECT_EQ(histogram->flags() & base::HistogramBase::kCallbackExists, |
| 370 base::HistogramBase::kCallbackExists); |
| 371 |
| 372 histogram->Add(1); |
| 373 |
| 374 EXPECT_TRUE(callback_wrapper.called); |
| 375 } |
| 376 |
| 377 // Check that you can't overwrite the callback with another. |
| 378 TEST_F(StatisticsRecorderTest, ClearCallbackSuceedsWithHistogramTest) { |
| 379 HistogramBase* histogram = Histogram::FactoryGet("TestHistogram", 1, 1000, 10, |
| 380 HistogramBase::kNoFlags); |
| 381 EXPECT_TRUE(histogram); |
| 382 |
| 383 CallbackCheckWrapper callback_wrapper; |
| 384 |
| 385 bool result = base::StatisticsRecorder::SetCallback( |
| 386 "TestHistogram", base::Bind(&CallbackCheckWrapper::OnHistogramChanged, |
| 387 base::Unretained(&callback_wrapper))); |
| 388 EXPECT_TRUE(result); |
| 389 EXPECT_EQ(histogram->flags() & base::HistogramBase::kCallbackExists, |
| 390 base::HistogramBase::kCallbackExists); |
| 391 |
| 392 base::StatisticsRecorder::ClearCallback("TestHistogram"); |
| 393 EXPECT_EQ(histogram->flags() & base::HistogramBase::kCallbackExists, 0); |
| 394 |
| 395 histogram->Add(1); |
| 396 |
| 397 EXPECT_FALSE(callback_wrapper.called); |
| 398 } |
| 399 |
| 400 // Check that callback is used. |
| 401 TEST_F(StatisticsRecorderTest, CallbackUsedTest) { |
| 402 { |
| 403 HistogramBase* histogram = Histogram::FactoryGet( |
| 404 "TestHistogram", 1, 1000, 10, HistogramBase::kNoFlags); |
| 405 EXPECT_TRUE(histogram); |
| 406 |
| 407 CallbackCheckWrapper callback_wrapper; |
| 408 |
| 409 base::StatisticsRecorder::SetCallback( |
| 410 "TestHistogram", base::Bind(&CallbackCheckWrapper::OnHistogramChanged, |
| 411 base::Unretained(&callback_wrapper))); |
| 412 |
| 413 histogram->Add(1); |
| 414 |
| 415 EXPECT_TRUE(callback_wrapper.called); |
| 416 EXPECT_EQ(callback_wrapper.last_histogram_value, 1); |
| 417 } |
| 418 |
| 419 { |
| 420 HistogramBase* linear_histogram = LinearHistogram::FactoryGet( |
| 421 "TestLinearHistogram", 1, 1000, 10, HistogramBase::kNoFlags); |
| 422 |
| 423 CallbackCheckWrapper callback_wrapper; |
| 424 |
| 425 base::StatisticsRecorder::SetCallback( |
| 426 "TestLinearHistogram", |
| 427 base::Bind(&CallbackCheckWrapper::OnHistogramChanged, |
| 428 base::Unretained(&callback_wrapper))); |
| 429 |
| 430 linear_histogram->Add(1); |
| 431 |
| 432 EXPECT_TRUE(callback_wrapper.called); |
| 433 EXPECT_EQ(callback_wrapper.last_histogram_value, 1); |
| 434 } |
| 435 |
| 436 { |
| 437 std::vector<int> custom_ranges; |
| 438 custom_ranges.push_back(1); |
| 439 custom_ranges.push_back(5); |
| 440 HistogramBase* custom_histogram = CustomHistogram::FactoryGet( |
| 441 "TestCustomHistogram", custom_ranges, HistogramBase::kNoFlags); |
| 442 |
| 443 CallbackCheckWrapper callback_wrapper; |
| 444 |
| 445 base::StatisticsRecorder::SetCallback( |
| 446 "TestCustomHistogram", |
| 447 base::Bind(&CallbackCheckWrapper::OnHistogramChanged, |
| 448 base::Unretained(&callback_wrapper))); |
| 449 |
| 450 custom_histogram->Add(1); |
| 451 |
| 452 EXPECT_TRUE(callback_wrapper.called); |
| 453 EXPECT_EQ(callback_wrapper.last_histogram_value, 1); |
| 454 } |
| 455 |
| 456 { |
| 457 HistogramBase* custom_histogram = SparseHistogram::FactoryGet( |
| 458 "TestSparseHistogram", HistogramBase::kNoFlags); |
| 459 |
| 460 CallbackCheckWrapper callback_wrapper; |
| 461 |
| 462 base::StatisticsRecorder::SetCallback( |
| 463 "TestSparseHistogram", |
| 464 base::Bind(&CallbackCheckWrapper::OnHistogramChanged, |
| 465 base::Unretained(&callback_wrapper))); |
| 466 |
| 467 custom_histogram->Add(1); |
| 468 |
| 469 EXPECT_TRUE(callback_wrapper.called); |
| 470 EXPECT_EQ(callback_wrapper.last_histogram_value, 1); |
| 471 } |
| 472 } |
| 473 |
| 474 // Check that setting a callback before the histogram exists works. |
| 475 TEST_F(StatisticsRecorderTest, CallbackUsedBeforeHistogramCreatedTest) { |
| 476 CallbackCheckWrapper callback_wrapper; |
| 477 |
| 478 base::StatisticsRecorder::SetCallback( |
| 479 "TestHistogram", base::Bind(&CallbackCheckWrapper::OnHistogramChanged, |
| 480 base::Unretained(&callback_wrapper))); |
| 481 |
| 482 HistogramBase* histogram = Histogram::FactoryGet("TestHistogram", 1, 1000, 10, |
| 483 HistogramBase::kNoFlags); |
| 484 EXPECT_TRUE(histogram); |
| 485 histogram->Add(1); |
| 486 |
| 487 EXPECT_TRUE(callback_wrapper.called); |
| 488 EXPECT_EQ(callback_wrapper.last_histogram_value, 1); |
| 489 } |
| 490 |
| 315 } // namespace base | 491 } // namespace base |
| OLD | NEW |