| OLD | NEW |
| 1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 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 "components/metrics/call_stack_profile_metrics_provider.h" | 5 #include "components/metrics/call_stack_profile_metrics_provider.h" |
| 6 | 6 |
| 7 #include <stddef.h> | 7 #include <stddef.h> |
| 8 #include <stdint.h> | 8 #include <stdint.h> |
| 9 | 9 |
| 10 #include "base/macros.h" | 10 #include "base/macros.h" |
| (...skipping 187 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 198 | 198 |
| 199 profile.profile_duration = profile_durations[i]; | 199 profile.profile_duration = profile_durations[i]; |
| 200 profile.sampling_period = profile_sampling_periods[i]; | 200 profile.sampling_period = profile_sampling_periods[i]; |
| 201 | 201 |
| 202 profiles.push_back(profile); | 202 profiles.push_back(profile); |
| 203 } | 203 } |
| 204 | 204 |
| 205 CallStackProfileMetricsProvider provider; | 205 CallStackProfileMetricsProvider provider; |
| 206 provider.OnRecordingEnabled(); | 206 provider.OnRecordingEnabled(); |
| 207 AppendProfiles( | 207 AppendProfiles( |
| 208 CallStackProfileParams(CallStackProfileParams::PROCESS_STARTUP, | 208 CallStackProfileParams(CallStackProfileParams::BROWSER_PROCESS, |
| 209 CallStackProfileParams::UI_THREAD, |
| 210 CallStackProfileParams::PROCESS_STARTUP, |
| 209 CallStackProfileParams::MAY_SHUFFLE), | 211 CallStackProfileParams::MAY_SHUFFLE), |
| 210 profiles); | 212 profiles); |
| 211 ChromeUserMetricsExtension uma_proto; | 213 ChromeUserMetricsExtension uma_proto; |
| 212 provider.ProvideGeneralMetrics(&uma_proto); | 214 provider.ProvideGeneralMetrics(&uma_proto); |
| 213 | 215 |
| 214 ASSERT_EQ(static_cast<int>(arraysize(profile_sample_frames)), | 216 ASSERT_EQ(static_cast<int>(arraysize(profile_sample_frames)), |
| 215 uma_proto.sampled_profile().size()); | 217 uma_proto.sampled_profile().size()); |
| 216 for (size_t i = 0; i < arraysize(profile_sample_frames); ++i) { | 218 for (size_t i = 0; i < arraysize(profile_sample_frames); ++i) { |
| 217 SCOPED_TRACE("profile " + base::SizeTToString(i)); | 219 SCOPED_TRACE("profile " + base::SizeTToString(i)); |
| 218 const SampledProfile& sampled_profile = uma_proto.sampled_profile().Get(i); | 220 const SampledProfile& sampled_profile = uma_proto.sampled_profile().Get(i); |
| (...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 260 EXPECT_EQ(profile_expected_name_md5_prefixes[i][j], | 262 EXPECT_EQ(profile_expected_name_md5_prefixes[i][j], |
| 261 module_identifier.name_md5_prefix()); | 263 module_identifier.name_md5_prefix()); |
| 262 } | 264 } |
| 263 | 265 |
| 264 ASSERT_TRUE(call_stack_profile.has_profile_duration_ms()); | 266 ASSERT_TRUE(call_stack_profile.has_profile_duration_ms()); |
| 265 EXPECT_EQ(profile_durations[i].InMilliseconds(), | 267 EXPECT_EQ(profile_durations[i].InMilliseconds(), |
| 266 call_stack_profile.profile_duration_ms()); | 268 call_stack_profile.profile_duration_ms()); |
| 267 ASSERT_TRUE(call_stack_profile.has_sampling_period_ms()); | 269 ASSERT_TRUE(call_stack_profile.has_sampling_period_ms()); |
| 268 EXPECT_EQ(profile_sampling_periods[i].InMilliseconds(), | 270 EXPECT_EQ(profile_sampling_periods[i].InMilliseconds(), |
| 269 call_stack_profile.sampling_period_ms()); | 271 call_stack_profile.sampling_period_ms()); |
| 272 ASSERT_TRUE(sampled_profile.has_process()); |
| 273 EXPECT_EQ(BROWSER_PROCESS, sampled_profile.process()); |
| 274 ASSERT_TRUE(sampled_profile.has_thread()); |
| 275 EXPECT_EQ(UI_THREAD, sampled_profile.thread()); |
| 270 ASSERT_TRUE(sampled_profile.has_trigger_event()); | 276 ASSERT_TRUE(sampled_profile.has_trigger_event()); |
| 271 EXPECT_EQ(SampledProfile::PROCESS_STARTUP, sampled_profile.trigger_event()); | 277 EXPECT_EQ(SampledProfile::PROCESS_STARTUP, sampled_profile.trigger_event()); |
| 272 } | 278 } |
| 273 } | 279 } |
| 274 | 280 |
| 275 // Checks that all duplicate samples are collapsed with | 281 // Checks that all duplicate samples are collapsed with |
| 276 // preserve_sample_ordering = false. | 282 // preserve_sample_ordering = false. |
| 277 TEST_F(CallStackProfileMetricsProviderTest, RepeatedStacksUnordered) { | 283 TEST_F(CallStackProfileMetricsProviderTest, RepeatedStacksUnordered) { |
| 278 const uintptr_t module_base_address = 0x1000; | 284 const uintptr_t module_base_address = 0x1000; |
| 279 | 285 |
| (...skipping 27 matching lines...) Expand all Loading... |
| 307 sample.insert(sample.end(), &sample_frames[i][0], | 313 sample.insert(sample.end(), &sample_frames[i][0], |
| 308 &sample_frames[i][0] + arraysize(sample_frames[i])); | 314 &sample_frames[i][0] + arraysize(sample_frames[i])); |
| 309 } | 315 } |
| 310 | 316 |
| 311 profile.profile_duration = base::TimeDelta::FromMilliseconds(100); | 317 profile.profile_duration = base::TimeDelta::FromMilliseconds(100); |
| 312 profile.sampling_period = base::TimeDelta::FromMilliseconds(10); | 318 profile.sampling_period = base::TimeDelta::FromMilliseconds(10); |
| 313 | 319 |
| 314 CallStackProfileMetricsProvider provider; | 320 CallStackProfileMetricsProvider provider; |
| 315 provider.OnRecordingEnabled(); | 321 provider.OnRecordingEnabled(); |
| 316 AppendProfiles( | 322 AppendProfiles( |
| 317 CallStackProfileParams(CallStackProfileParams::PROCESS_STARTUP, | 323 CallStackProfileParams(CallStackProfileParams::BROWSER_PROCESS, |
| 324 CallStackProfileParams::UI_THREAD, |
| 325 CallStackProfileParams::PROCESS_STARTUP, |
| 318 CallStackProfileParams::MAY_SHUFFLE), | 326 CallStackProfileParams::MAY_SHUFFLE), |
| 319 std::vector<Profile>(1, profile)); | 327 std::vector<Profile>(1, profile)); |
| 320 ChromeUserMetricsExtension uma_proto; | 328 ChromeUserMetricsExtension uma_proto; |
| 321 provider.ProvideGeneralMetrics(&uma_proto); | 329 provider.ProvideGeneralMetrics(&uma_proto); |
| 322 | 330 |
| 323 ASSERT_EQ(1, uma_proto.sampled_profile().size()); | 331 ASSERT_EQ(1, uma_proto.sampled_profile().size()); |
| 324 const SampledProfile& sampled_profile = uma_proto.sampled_profile().Get(0); | 332 const SampledProfile& sampled_profile = uma_proto.sampled_profile().Get(0); |
| 325 ASSERT_TRUE(sampled_profile.has_call_stack_profile()); | 333 ASSERT_TRUE(sampled_profile.has_call_stack_profile()); |
| 326 const CallStackProfile& call_stack_profile = | 334 const CallStackProfile& call_stack_profile = |
| 327 sampled_profile.call_stack_profile(); | 335 sampled_profile.call_stack_profile(); |
| (...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 387 Sample& sample = profile.samples.back(); | 395 Sample& sample = profile.samples.back(); |
| 388 sample.insert(sample.end(), &sample_frames[i][0], | 396 sample.insert(sample.end(), &sample_frames[i][0], |
| 389 &sample_frames[i][0] + arraysize(sample_frames[i])); | 397 &sample_frames[i][0] + arraysize(sample_frames[i])); |
| 390 } | 398 } |
| 391 | 399 |
| 392 profile.profile_duration = base::TimeDelta::FromMilliseconds(100); | 400 profile.profile_duration = base::TimeDelta::FromMilliseconds(100); |
| 393 profile.sampling_period = base::TimeDelta::FromMilliseconds(10); | 401 profile.sampling_period = base::TimeDelta::FromMilliseconds(10); |
| 394 | 402 |
| 395 CallStackProfileMetricsProvider provider; | 403 CallStackProfileMetricsProvider provider; |
| 396 provider.OnRecordingEnabled(); | 404 provider.OnRecordingEnabled(); |
| 397 AppendProfiles(CallStackProfileParams(CallStackProfileParams::PROCESS_STARTUP, | 405 AppendProfiles(CallStackProfileParams(CallStackProfileParams::BROWSER_PROCESS, |
| 406 CallStackProfileParams::UI_THREAD, |
| 407 CallStackProfileParams::PROCESS_STARTUP, |
| 398 CallStackProfileParams::PRESERVE_ORDER), | 408 CallStackProfileParams::PRESERVE_ORDER), |
| 399 std::vector<Profile>(1, profile)); | 409 std::vector<Profile>(1, profile)); |
| 400 ChromeUserMetricsExtension uma_proto; | 410 ChromeUserMetricsExtension uma_proto; |
| 401 provider.ProvideGeneralMetrics(&uma_proto); | 411 provider.ProvideGeneralMetrics(&uma_proto); |
| 402 | 412 |
| 403 ASSERT_EQ(1, uma_proto.sampled_profile().size()); | 413 ASSERT_EQ(1, uma_proto.sampled_profile().size()); |
| 404 const SampledProfile& sampled_profile = uma_proto.sampled_profile().Get(0); | 414 const SampledProfile& sampled_profile = uma_proto.sampled_profile().Get(0); |
| 405 ASSERT_TRUE(sampled_profile.has_call_stack_profile()); | 415 ASSERT_TRUE(sampled_profile.has_call_stack_profile()); |
| 406 const CallStackProfile& call_stack_profile = | 416 const CallStackProfile& call_stack_profile = |
| 407 sampled_profile.call_stack_profile(); | 417 sampled_profile.call_stack_profile(); |
| (...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 440 Profile profile; | 450 Profile profile; |
| 441 | 451 |
| 442 profile.samples.push_back(Sample(1, frame)); | 452 profile.samples.push_back(Sample(1, frame)); |
| 443 | 453 |
| 444 profile.profile_duration = base::TimeDelta::FromMilliseconds(100); | 454 profile.profile_duration = base::TimeDelta::FromMilliseconds(100); |
| 445 profile.sampling_period = base::TimeDelta::FromMilliseconds(10); | 455 profile.sampling_period = base::TimeDelta::FromMilliseconds(10); |
| 446 | 456 |
| 447 CallStackProfileMetricsProvider provider; | 457 CallStackProfileMetricsProvider provider; |
| 448 provider.OnRecordingEnabled(); | 458 provider.OnRecordingEnabled(); |
| 449 AppendProfiles( | 459 AppendProfiles( |
| 450 CallStackProfileParams(CallStackProfileParams::PROCESS_STARTUP, | 460 CallStackProfileParams(CallStackProfileParams::BROWSER_PROCESS, |
| 461 CallStackProfileParams::UI_THREAD, |
| 462 CallStackProfileParams::PROCESS_STARTUP, |
| 451 CallStackProfileParams::MAY_SHUFFLE), | 463 CallStackProfileParams::MAY_SHUFFLE), |
| 452 std::vector<Profile>(1, profile)); | 464 std::vector<Profile>(1, profile)); |
| 453 ChromeUserMetricsExtension uma_proto; | 465 ChromeUserMetricsExtension uma_proto; |
| 454 provider.ProvideGeneralMetrics(&uma_proto); | 466 provider.ProvideGeneralMetrics(&uma_proto); |
| 455 | 467 |
| 456 ASSERT_EQ(1, uma_proto.sampled_profile().size()); | 468 ASSERT_EQ(1, uma_proto.sampled_profile().size()); |
| 457 const SampledProfile& sampled_profile = uma_proto.sampled_profile().Get(0); | 469 const SampledProfile& sampled_profile = uma_proto.sampled_profile().Get(0); |
| 458 ASSERT_TRUE(sampled_profile.has_call_stack_profile()); | 470 ASSERT_TRUE(sampled_profile.has_call_stack_profile()); |
| 459 const CallStackProfile& call_stack_profile = | 471 const CallStackProfile& call_stack_profile = |
| 460 sampled_profile.call_stack_profile(); | 472 sampled_profile.call_stack_profile(); |
| (...skipping 17 matching lines...) Expand all Loading... |
| 478 Profile profile; | 490 Profile profile; |
| 479 profile.samples.push_back( | 491 profile.samples.push_back( |
| 480 Sample(1, Frame(0x1000, Frame::kUnknownModuleIndex))); | 492 Sample(1, Frame(0x1000, Frame::kUnknownModuleIndex))); |
| 481 | 493 |
| 482 profile.profile_duration = base::TimeDelta::FromMilliseconds(100); | 494 profile.profile_duration = base::TimeDelta::FromMilliseconds(100); |
| 483 // Use the sampling period to distinguish the two profiles. | 495 // Use the sampling period to distinguish the two profiles. |
| 484 profile.sampling_period = base::TimeDelta::FromMilliseconds(i); | 496 profile.sampling_period = base::TimeDelta::FromMilliseconds(i); |
| 485 | 497 |
| 486 provider.OnRecordingEnabled(); | 498 provider.OnRecordingEnabled(); |
| 487 AppendProfiles( | 499 AppendProfiles( |
| 488 CallStackProfileParams(CallStackProfileParams::PROCESS_STARTUP, | 500 CallStackProfileParams(CallStackProfileParams::BROWSER_PROCESS, |
| 501 CallStackProfileParams::UI_THREAD, |
| 502 CallStackProfileParams::PROCESS_STARTUP, |
| 489 CallStackProfileParams::MAY_SHUFFLE), | 503 CallStackProfileParams::MAY_SHUFFLE), |
| 490 std::vector<Profile>(1, profile)); | 504 std::vector<Profile>(1, profile)); |
| 491 ChromeUserMetricsExtension uma_proto; | 505 ChromeUserMetricsExtension uma_proto; |
| 492 provider.ProvideGeneralMetrics(&uma_proto); | 506 provider.ProvideGeneralMetrics(&uma_proto); |
| 493 | 507 |
| 494 ASSERT_EQ(1, uma_proto.sampled_profile().size()); | 508 ASSERT_EQ(1, uma_proto.sampled_profile().size()); |
| 495 const SampledProfile& sampled_profile = uma_proto.sampled_profile().Get(0); | 509 const SampledProfile& sampled_profile = uma_proto.sampled_profile().Get(0); |
| 496 ASSERT_TRUE(sampled_profile.has_call_stack_profile()); | 510 ASSERT_TRUE(sampled_profile.has_call_stack_profile()); |
| 497 const CallStackProfile& call_stack_profile = | 511 const CallStackProfile& call_stack_profile = |
| 498 sampled_profile.call_stack_profile(); | 512 sampled_profile.call_stack_profile(); |
| 499 ASSERT_TRUE(call_stack_profile.has_sampling_period_ms()); | 513 ASSERT_TRUE(call_stack_profile.has_sampling_period_ms()); |
| 500 EXPECT_EQ(i, call_stack_profile.sampling_period_ms()); | 514 EXPECT_EQ(i, call_stack_profile.sampling_period_ms()); |
| 501 } | 515 } |
| 502 } | 516 } |
| 503 | 517 |
| 504 // Checks that pending profiles are provided to ProvideGeneralMetrics | 518 // Checks that pending profiles are provided to ProvideGeneralMetrics |
| 505 // when collected before CallStackProfileMetricsProvider is instantiated. | 519 // when collected before CallStackProfileMetricsProvider is instantiated. |
| 506 TEST_F(CallStackProfileMetricsProviderTest, | 520 TEST_F(CallStackProfileMetricsProviderTest, |
| 507 ProfilesProvidedWhenCollectedBeforeInstantiation) { | 521 ProfilesProvidedWhenCollectedBeforeInstantiation) { |
| 508 Profile profile; | 522 Profile profile; |
| 509 profile.samples.push_back( | 523 profile.samples.push_back( |
| 510 Sample(1, Frame(0x1000, Frame::kUnknownModuleIndex))); | 524 Sample(1, Frame(0x1000, Frame::kUnknownModuleIndex))); |
| 511 | 525 |
| 512 profile.profile_duration = base::TimeDelta::FromMilliseconds(100); | 526 profile.profile_duration = base::TimeDelta::FromMilliseconds(100); |
| 513 profile.sampling_period = base::TimeDelta::FromMilliseconds(10); | 527 profile.sampling_period = base::TimeDelta::FromMilliseconds(10); |
| 514 | 528 |
| 515 AppendProfiles( | 529 AppendProfiles( |
| 516 CallStackProfileParams(CallStackProfileParams::PROCESS_STARTUP, | 530 CallStackProfileParams(CallStackProfileParams::BROWSER_PROCESS, |
| 531 CallStackProfileParams::UI_THREAD, |
| 532 CallStackProfileParams::PROCESS_STARTUP, |
| 517 CallStackProfileParams::MAY_SHUFFLE), | 533 CallStackProfileParams::MAY_SHUFFLE), |
| 518 std::vector<Profile>(1, profile)); | 534 std::vector<Profile>(1, profile)); |
| 519 | 535 |
| 520 CallStackProfileMetricsProvider provider; | 536 CallStackProfileMetricsProvider provider; |
| 521 provider.OnRecordingEnabled(); | 537 provider.OnRecordingEnabled(); |
| 522 ChromeUserMetricsExtension uma_proto; | 538 ChromeUserMetricsExtension uma_proto; |
| 523 provider.ProvideGeneralMetrics(&uma_proto); | 539 provider.ProvideGeneralMetrics(&uma_proto); |
| 524 | 540 |
| 525 EXPECT_EQ(1, uma_proto.sampled_profile_size()); | 541 EXPECT_EQ(1, uma_proto.sampled_profile_size()); |
| 526 } | 542 } |
| 527 | 543 |
| 528 // Checks that pending profiles are not provided to ProvideGeneralMetrics | 544 // Checks that pending profiles are not provided to ProvideGeneralMetrics |
| 529 // while recording is disabled. | 545 // while recording is disabled. |
| 530 TEST_F(CallStackProfileMetricsProviderTest, ProfilesNotProvidedWhileDisabled) { | 546 TEST_F(CallStackProfileMetricsProviderTest, ProfilesNotProvidedWhileDisabled) { |
| 531 Profile profile; | 547 Profile profile; |
| 532 profile.samples.push_back( | 548 profile.samples.push_back( |
| 533 Sample(1, Frame(0x1000, Frame::kUnknownModuleIndex))); | 549 Sample(1, Frame(0x1000, Frame::kUnknownModuleIndex))); |
| 534 | 550 |
| 535 profile.profile_duration = base::TimeDelta::FromMilliseconds(100); | 551 profile.profile_duration = base::TimeDelta::FromMilliseconds(100); |
| 536 profile.sampling_period = base::TimeDelta::FromMilliseconds(10); | 552 profile.sampling_period = base::TimeDelta::FromMilliseconds(10); |
| 537 | 553 |
| 538 CallStackProfileMetricsProvider provider; | 554 CallStackProfileMetricsProvider provider; |
| 539 provider.OnRecordingDisabled(); | 555 provider.OnRecordingDisabled(); |
| 540 AppendProfiles( | 556 AppendProfiles( |
| 541 CallStackProfileParams(CallStackProfileParams::PROCESS_STARTUP, | 557 CallStackProfileParams(CallStackProfileParams::BROWSER_PROCESS, |
| 558 CallStackProfileParams::UI_THREAD, |
| 559 CallStackProfileParams::PROCESS_STARTUP, |
| 542 CallStackProfileParams::MAY_SHUFFLE), | 560 CallStackProfileParams::MAY_SHUFFLE), |
| 543 std::vector<Profile>(1, profile)); | 561 std::vector<Profile>(1, profile)); |
| 544 ChromeUserMetricsExtension uma_proto; | 562 ChromeUserMetricsExtension uma_proto; |
| 545 provider.ProvideGeneralMetrics(&uma_proto); | 563 provider.ProvideGeneralMetrics(&uma_proto); |
| 546 | 564 |
| 547 EXPECT_EQ(0, uma_proto.sampled_profile_size()); | 565 EXPECT_EQ(0, uma_proto.sampled_profile_size()); |
| 548 } | 566 } |
| 549 | 567 |
| 550 // Checks that pending profiles are not provided to ProvideGeneralMetrics | 568 // Checks that pending profiles are not provided to ProvideGeneralMetrics |
| 551 // if recording is disabled while profiling. | 569 // if recording is disabled while profiling. |
| 552 TEST_F(CallStackProfileMetricsProviderTest, | 570 TEST_F(CallStackProfileMetricsProviderTest, |
| 553 ProfilesNotProvidedAfterChangeToDisabled) { | 571 ProfilesNotProvidedAfterChangeToDisabled) { |
| 554 Profile profile; | 572 Profile profile; |
| 555 profile.samples.push_back( | 573 profile.samples.push_back( |
| 556 Sample(1, Frame(0x1000, Frame::kUnknownModuleIndex))); | 574 Sample(1, Frame(0x1000, Frame::kUnknownModuleIndex))); |
| 557 | 575 |
| 558 profile.profile_duration = base::TimeDelta::FromMilliseconds(100); | 576 profile.profile_duration = base::TimeDelta::FromMilliseconds(100); |
| 559 profile.sampling_period = base::TimeDelta::FromMilliseconds(10); | 577 profile.sampling_period = base::TimeDelta::FromMilliseconds(10); |
| 560 | 578 |
| 561 CallStackProfileMetricsProvider provider; | 579 CallStackProfileMetricsProvider provider; |
| 562 provider.OnRecordingEnabled(); | 580 provider.OnRecordingEnabled(); |
| 563 base::StackSamplingProfiler::CompletedCallback callback = | 581 base::StackSamplingProfiler::CompletedCallback callback = |
| 564 CallStackProfileMetricsProvider::GetProfilerCallback( | 582 CallStackProfileMetricsProvider::GetProfilerCallback( |
| 565 CallStackProfileParams(CallStackProfileParams::PROCESS_STARTUP, | 583 CallStackProfileParams(CallStackProfileParams::BROWSER_PROCESS, |
| 584 CallStackProfileParams::UI_THREAD, |
| 585 CallStackProfileParams::PROCESS_STARTUP, |
| 566 CallStackProfileParams::MAY_SHUFFLE)); | 586 CallStackProfileParams::MAY_SHUFFLE)); |
| 567 | 587 |
| 568 provider.OnRecordingDisabled(); | 588 provider.OnRecordingDisabled(); |
| 569 callback.Run(std::vector<Profile>(1, profile)); | 589 callback.Run(std::vector<Profile>(1, profile)); |
| 570 ChromeUserMetricsExtension uma_proto; | 590 ChromeUserMetricsExtension uma_proto; |
| 571 provider.ProvideGeneralMetrics(&uma_proto); | 591 provider.ProvideGeneralMetrics(&uma_proto); |
| 572 | 592 |
| 573 EXPECT_EQ(0, uma_proto.sampled_profile_size()); | 593 EXPECT_EQ(0, uma_proto.sampled_profile_size()); |
| 574 } | 594 } |
| 575 | 595 |
| 576 // Checks that pending profiles are not provided to ProvideGeneralMetrics if | 596 // Checks that pending profiles are not provided to ProvideGeneralMetrics if |
| 577 // recording is enabled, but then disabled and reenabled while profiling. | 597 // recording is enabled, but then disabled and reenabled while profiling. |
| 578 TEST_F(CallStackProfileMetricsProviderTest, | 598 TEST_F(CallStackProfileMetricsProviderTest, |
| 579 ProfilesNotProvidedAfterChangeToDisabledThenEnabled) { | 599 ProfilesNotProvidedAfterChangeToDisabledThenEnabled) { |
| 580 Profile profile; | 600 Profile profile; |
| 581 profile.samples.push_back( | 601 profile.samples.push_back( |
| 582 Sample(1, Frame(0x1000, Frame::kUnknownModuleIndex))); | 602 Sample(1, Frame(0x1000, Frame::kUnknownModuleIndex))); |
| 583 | 603 |
| 584 profile.profile_duration = base::TimeDelta::FromMilliseconds(100); | 604 profile.profile_duration = base::TimeDelta::FromMilliseconds(100); |
| 585 profile.sampling_period = base::TimeDelta::FromMilliseconds(10); | 605 profile.sampling_period = base::TimeDelta::FromMilliseconds(10); |
| 586 | 606 |
| 587 CallStackProfileMetricsProvider provider; | 607 CallStackProfileMetricsProvider provider; |
| 588 provider.OnRecordingEnabled(); | 608 provider.OnRecordingEnabled(); |
| 589 base::StackSamplingProfiler::CompletedCallback callback = | 609 base::StackSamplingProfiler::CompletedCallback callback = |
| 590 CallStackProfileMetricsProvider::GetProfilerCallback( | 610 CallStackProfileMetricsProvider::GetProfilerCallback( |
| 591 CallStackProfileParams(CallStackProfileParams::PROCESS_STARTUP, | 611 CallStackProfileParams(CallStackProfileParams::BROWSER_PROCESS, |
| 612 CallStackProfileParams::UI_THREAD, |
| 613 CallStackProfileParams::PROCESS_STARTUP, |
| 592 CallStackProfileParams::MAY_SHUFFLE)); | 614 CallStackProfileParams::MAY_SHUFFLE)); |
| 593 | 615 |
| 594 provider.OnRecordingDisabled(); | 616 provider.OnRecordingDisabled(); |
| 595 provider.OnRecordingEnabled(); | 617 provider.OnRecordingEnabled(); |
| 596 callback.Run(std::vector<Profile>(1, profile)); | 618 callback.Run(std::vector<Profile>(1, profile)); |
| 597 ChromeUserMetricsExtension uma_proto; | 619 ChromeUserMetricsExtension uma_proto; |
| 598 provider.ProvideGeneralMetrics(&uma_proto); | 620 provider.ProvideGeneralMetrics(&uma_proto); |
| 599 | 621 |
| 600 EXPECT_EQ(0, uma_proto.sampled_profile_size()); | 622 EXPECT_EQ(0, uma_proto.sampled_profile_size()); |
| 601 } | 623 } |
| 602 | 624 |
| 603 // Checks that pending profiles are not provided to ProvideGeneralMetrics | 625 // Checks that pending profiles are not provided to ProvideGeneralMetrics |
| 604 // if recording is disabled, but then enabled while profiling. | 626 // if recording is disabled, but then enabled while profiling. |
| 605 TEST_F(CallStackProfileMetricsProviderTest, | 627 TEST_F(CallStackProfileMetricsProviderTest, |
| 606 ProfilesNotProvidedAfterChangeFromDisabled) { | 628 ProfilesNotProvidedAfterChangeFromDisabled) { |
| 607 Profile profile; | 629 Profile profile; |
| 608 profile.samples.push_back( | 630 profile.samples.push_back( |
| 609 Sample(1, Frame(0x1000, Frame::kUnknownModuleIndex))); | 631 Sample(1, Frame(0x1000, Frame::kUnknownModuleIndex))); |
| 610 | 632 |
| 611 profile.profile_duration = base::TimeDelta::FromMilliseconds(100); | 633 profile.profile_duration = base::TimeDelta::FromMilliseconds(100); |
| 612 profile.sampling_period = base::TimeDelta::FromMilliseconds(10); | 634 profile.sampling_period = base::TimeDelta::FromMilliseconds(10); |
| 613 | 635 |
| 614 CallStackProfileMetricsProvider provider; | 636 CallStackProfileMetricsProvider provider; |
| 615 provider.OnRecordingDisabled(); | 637 provider.OnRecordingDisabled(); |
| 616 base::StackSamplingProfiler::CompletedCallback callback = | 638 base::StackSamplingProfiler::CompletedCallback callback = |
| 617 CallStackProfileMetricsProvider::GetProfilerCallback( | 639 CallStackProfileMetricsProvider::GetProfilerCallback( |
| 618 CallStackProfileParams(CallStackProfileParams::PROCESS_STARTUP, | 640 CallStackProfileParams(CallStackProfileParams::BROWSER_PROCESS, |
| 641 CallStackProfileParams::UI_THREAD, |
| 642 CallStackProfileParams::PROCESS_STARTUP, |
| 619 CallStackProfileParams::MAY_SHUFFLE)); | 643 CallStackProfileParams::MAY_SHUFFLE)); |
| 620 | 644 |
| 621 provider.OnRecordingEnabled(); | 645 provider.OnRecordingEnabled(); |
| 622 callback.Run(std::vector<Profile>(1, profile)); | 646 callback.Run(std::vector<Profile>(1, profile)); |
| 623 ChromeUserMetricsExtension uma_proto; | 647 ChromeUserMetricsExtension uma_proto; |
| 624 provider.ProvideGeneralMetrics(&uma_proto); | 648 provider.ProvideGeneralMetrics(&uma_proto); |
| 625 | 649 |
| 626 EXPECT_EQ(0, uma_proto.sampled_profile_size()); | 650 EXPECT_EQ(0, uma_proto.sampled_profile_size()); |
| 627 } | 651 } |
| 628 | 652 |
| 629 } // namespace metrics | 653 } // namespace metrics |
| OLD | NEW |