Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(89)

Side by Side Diff: components/metrics/call_stack_profile_metrics_provider_unittest.cc

Issue 1029653002: Enable startup profiling by Win x64 stack sampling profiler (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@statprof-metrics-provider
Patch Set: add tests Created 5 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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 "base/metrics/field_trial.h"
7 #include "base/profiler/stack_sampling_profiler.h" 8 #include "base/profiler/stack_sampling_profiler.h"
8 #include "base/strings/string_number_conversions.h" 9 #include "base/strings/string_number_conversions.h"
9 #include "components/metrics/proto/chrome_user_metrics_extension.pb.h" 10 #include "components/metrics/proto/chrome_user_metrics_extension.pb.h"
11 #include "components/variations/entropy_provider.h"
10 #include "testing/gtest/include/gtest/gtest.h" 12 #include "testing/gtest/include/gtest/gtest.h"
11 13
12 using base::StackSamplingProfiler; 14 using base::StackSamplingProfiler;
13 using Frame = StackSamplingProfiler::Frame; 15 using Frame = StackSamplingProfiler::Frame;
14 using Module = StackSamplingProfiler::Module; 16 using Module = StackSamplingProfiler::Module;
15 using Profile = StackSamplingProfiler::Profile; 17 using Profile = StackSamplingProfiler::Profile;
16 using Sample = StackSamplingProfiler::Sample; 18 using Sample = StackSamplingProfiler::Sample;
17 19
18 namespace metrics { 20 namespace metrics {
19 21
22 namespace {
Ilya Sherman 2015/03/24 04:02:03 nit: Please leave a blank line here.
Mike Wittman 2015/03/24 18:37:39 Done.
23 class CallStackProfileMetricsProviderTest : public testing::Test {
24 public:
25 CallStackProfileMetricsProviderTest() {}
26 ~CallStackProfileMetricsProviderTest() {}
27
28 void SetUp() override {
29 field_trial_list_.reset(new base::FieldTrialList(
30 new metrics::SHA1EntropyProvider("foo")));
31 base::FieldTrialList::CreateFieldTrial(
32 CallStackProfileMetricsProvider::kFieldTrialName,
33 CallStackProfileMetricsProvider::kReportProfilesGroupName);
34 }
35
36 void TearDown() override {
37 field_trial_list_.reset();
38 }
39
40 private:
41 scoped_ptr<base::FieldTrialList> field_trial_list_;
42 };
43
44 } // namespace
45
20 // Checks that all properties from multiple profiles are filled as expected. 46 // Checks that all properties from multiple profiles are filled as expected.
21 TEST(CallStackProfileMetricsProviderTest, MultipleProfiles) { 47 TEST_F(CallStackProfileMetricsProviderTest, MultipleProfiles) {
22 const uintptr_t module1_base_address = 0x1000; 48 const uintptr_t module1_base_address = 0x1000;
23 const uintptr_t module2_base_address = 0x2000; 49 const uintptr_t module2_base_address = 0x2000;
24 const uintptr_t module3_base_address = 0x3000; 50 const uintptr_t module3_base_address = 0x3000;
25 51
26 const Module profile_modules[][2] = { 52 const Module profile_modules[][2] = {
27 { 53 {
28 Module( 54 Module(
29 reinterpret_cast<const void*>(module1_base_address), 55 reinterpret_cast<const void*>(module1_base_address),
30 "ABCD", 56 "ABCD",
31 #if defined(OS_WIN) 57 #if defined(OS_WIN)
(...skipping 190 matching lines...) Expand 10 before | Expand all | Expand 10 after
222 EXPECT_EQ(profile_durations[i].InMilliseconds(), 248 EXPECT_EQ(profile_durations[i].InMilliseconds(),
223 call_stack_profile.profile_duration_ms()); 249 call_stack_profile.profile_duration_ms());
224 ASSERT_TRUE(call_stack_profile.has_sampling_period_ms()); 250 ASSERT_TRUE(call_stack_profile.has_sampling_period_ms());
225 EXPECT_EQ(profile_sampling_periods[i].InMilliseconds(), 251 EXPECT_EQ(profile_sampling_periods[i].InMilliseconds(),
226 call_stack_profile.sampling_period_ms()); 252 call_stack_profile.sampling_period_ms());
227 } 253 }
228 } 254 }
229 255
230 // Checks that all duplicate samples are collapsed with 256 // Checks that all duplicate samples are collapsed with
231 // preserve_sample_ordering = false. 257 // preserve_sample_ordering = false.
232 TEST(CallStackProfileMetricsProviderTest, RepeatedStacksUnordered) { 258 TEST_F(CallStackProfileMetricsProviderTest, RepeatedStacksUnordered) {
233 const uintptr_t module_base_address = 0x1000; 259 const uintptr_t module_base_address = 0x1000;
234 260
235 const Module modules[] = { 261 const Module modules[] = {
236 Module( 262 Module(
237 reinterpret_cast<const void*>(module_base_address), 263 reinterpret_cast<const void*>(module_base_address),
238 "ABCD", 264 "ABCD",
239 #if defined(OS_WIN) 265 #if defined(OS_WIN)
240 base::FilePath(L"c:\\some\\path\\to\\chrome.exe") 266 base::FilePath(L"c:\\some\\path\\to\\chrome.exe")
241 #else 267 #else
242 base::FilePath("/some/path/to/chrome") 268 base::FilePath("/some/path/to/chrome")
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after
298 EXPECT_EQ(static_cast<uint64>(instruction_pointer - module_base_address), 324 EXPECT_EQ(static_cast<uint64>(instruction_pointer - module_base_address),
299 entry.address()); 325 entry.address());
300 ASSERT_TRUE(entry.has_module_id_index()); 326 ASSERT_TRUE(entry.has_module_id_index());
301 EXPECT_EQ(sample_frames[i][j].module_index, entry.module_id_index()); 327 EXPECT_EQ(sample_frames[i][j].module_index, entry.module_id_index());
302 } 328 }
303 } 329 }
304 } 330 }
305 331
306 // Checks that only contiguous duplicate samples are collapsed with 332 // Checks that only contiguous duplicate samples are collapsed with
307 // preserve_sample_ordering = true. 333 // preserve_sample_ordering = true.
308 TEST(CallStackProfileMetricsProviderTest, RepeatedStacksOrdered) { 334 TEST_F(CallStackProfileMetricsProviderTest, RepeatedStacksOrdered) {
309 const uintptr_t module_base_address = 0x1000; 335 const uintptr_t module_base_address = 0x1000;
310 336
311 const Module modules[] = { 337 const Module modules[] = {
312 Module( 338 Module(
313 reinterpret_cast<const void*>(module_base_address), 339 reinterpret_cast<const void*>(module_base_address),
314 "ABCD", 340 "ABCD",
315 #if defined(OS_WIN) 341 #if defined(OS_WIN)
316 base::FilePath(L"c:\\some\\path\\to\\chrome.exe") 342 base::FilePath(L"c:\\some\\path\\to\\chrome.exe")
317 #else 343 #else
318 base::FilePath("/some/path/to/chrome") 344 base::FilePath("/some/path/to/chrome")
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after
374 EXPECT_EQ(static_cast<uint64>(instruction_pointer - module_base_address), 400 EXPECT_EQ(static_cast<uint64>(instruction_pointer - module_base_address),
375 entry.address()); 401 entry.address());
376 ASSERT_TRUE(entry.has_module_id_index()); 402 ASSERT_TRUE(entry.has_module_id_index());
377 EXPECT_EQ(sample_frames[i][j].module_index, entry.module_id_index()); 403 EXPECT_EQ(sample_frames[i][j].module_index, entry.module_id_index());
378 } 404 }
379 } 405 }
380 } 406 }
381 407
382 408
383 // Checks that unknown modules produce an empty Entry. 409 // Checks that unknown modules produce an empty Entry.
384 TEST(CallStackProfileMetricsProviderTest, UnknownModule) { 410 TEST_F(CallStackProfileMetricsProviderTest, UnknownModule) {
385 // -1 indicates an unknown module. 411 // -1 indicates an unknown module.
386 const Frame frame(reinterpret_cast<const void*>(0x1000), -1); 412 const Frame frame(reinterpret_cast<const void*>(0x1000), -1);
387 413
388 Profile profile; 414 Profile profile;
389 415
390 profile.samples.push_back(Sample(1, frame)); 416 profile.samples.push_back(Sample(1, frame));
391 417
392 profile.profile_duration = base::TimeDelta::FromMilliseconds(100); 418 profile.profile_duration = base::TimeDelta::FromMilliseconds(100);
393 profile.sampling_period = base::TimeDelta::FromMilliseconds(10); 419 profile.sampling_period = base::TimeDelta::FromMilliseconds(10);
394 profile.preserve_sample_ordering = false; 420 profile.preserve_sample_ordering = false;
(...skipping 14 matching lines...) Expand all
409 call_stack_profile.sample().Get(0); 435 call_stack_profile.sample().Get(0);
410 ASSERT_EQ(1, proto_sample.entry().size()); 436 ASSERT_EQ(1, proto_sample.entry().size());
411 ASSERT_TRUE(proto_sample.has_count()); 437 ASSERT_TRUE(proto_sample.has_count());
412 EXPECT_EQ(1u, proto_sample.count()); 438 EXPECT_EQ(1u, proto_sample.count());
413 const CallStackProfile::Entry& entry = proto_sample.entry().Get(0); 439 const CallStackProfile::Entry& entry = proto_sample.entry().Get(0);
414 EXPECT_FALSE(entry.has_address()); 440 EXPECT_FALSE(entry.has_address());
415 EXPECT_FALSE(entry.has_module_id_index()); 441 EXPECT_FALSE(entry.has_module_id_index());
416 } 442 }
417 443
418 } // namespace metrics 444 } // namespace metrics
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698