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

Side by Side Diff: base/trace_event/memory_dump_manager_unittest.cc

Issue 1995573003: [tracing] Introduce BACKGROUND mode in MemoryInfra (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Address comments and fix tests. Created 4 years, 6 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 "base/trace_event/memory_dump_manager.h" 5 #include "base/trace_event/memory_dump_manager.h"
6 6
7 #include <stdint.h> 7 #include <stdint.h>
8 8
9 #include <memory> 9 #include <memory>
10 #include <vector> 10 #include <vector>
(...skipping 30 matching lines...) Expand all
41 41
42 // GTest matchers for MemoryDumpRequestArgs arguments. 42 // GTest matchers for MemoryDumpRequestArgs arguments.
43 MATCHER(IsDetailedDump, "") { 43 MATCHER(IsDetailedDump, "") {
44 return arg.level_of_detail == MemoryDumpLevelOfDetail::DETAILED; 44 return arg.level_of_detail == MemoryDumpLevelOfDetail::DETAILED;
45 } 45 }
46 46
47 MATCHER(IsLightDump, "") { 47 MATCHER(IsLightDump, "") {
48 return arg.level_of_detail == MemoryDumpLevelOfDetail::LIGHT; 48 return arg.level_of_detail == MemoryDumpLevelOfDetail::LIGHT;
49 } 49 }
50 50
51 MATCHER(IsBackgroundDump, "") {
52 return arg.level_of_detail == MemoryDumpLevelOfDetail::BACKGROUND;
53 }
54
51 namespace { 55 namespace {
52 56
57 const char* kMDPName = "TestDumpProvider";
58 const char* kWhitelistedMDPName = "WhitelistedTestDumpProvider";
59 const char* const kTestMDPWhitelist[] = {kWhitelistedMDPName, ""};
60
61 void RegisterDumpProvider(
62 MemoryDumpProvider* mdp,
63 const char* name,
64 scoped_refptr<base::SingleThreadTaskRunner> task_runner,
65 const MemoryDumpProvider::Options& options) {
66 MemoryDumpManager* mdm = MemoryDumpManager::GetInstance();
67 mdm->set_dumper_registrations_ignored_for_testing(false);
68 mdm->RegisterDumpProvider(mdp, name, std::move(task_runner), options);
69 mdm->set_dumper_registrations_ignored_for_testing(true);
70 }
71
53 void RegisterDumpProvider( 72 void RegisterDumpProvider(
54 MemoryDumpProvider* mdp, 73 MemoryDumpProvider* mdp,
55 scoped_refptr<base::SingleThreadTaskRunner> task_runner, 74 scoped_refptr<base::SingleThreadTaskRunner> task_runner,
56 const MemoryDumpProvider::Options& options) { 75 const MemoryDumpProvider::Options& options) {
Primiano Tucci (use gerrit) 2016/05/31 07:30:55 probably more readable if you just add a 4th param
ssid 2016/05/31 19:55:42 Done.
57 MemoryDumpManager* mdm = MemoryDumpManager::GetInstance(); 76 RegisterDumpProvider(mdp, kMDPName, task_runner, options);
58 mdm->set_dumper_registrations_ignored_for_testing(false);
59 const char* kMDPName = "TestDumpProvider";
60 mdm->RegisterDumpProvider(mdp, kMDPName, std::move(task_runner), options);
61 mdm->set_dumper_registrations_ignored_for_testing(true);
62 } 77 }
63 78
64 void RegisterDumpProvider(MemoryDumpProvider* mdp) { 79 void RegisterDumpProvider(MemoryDumpProvider* mdp) {
65 RegisterDumpProvider(mdp, nullptr, MemoryDumpProvider::Options()); 80 RegisterDumpProvider(mdp, nullptr, MemoryDumpProvider::Options());
66 } 81 }
67 82
68 void RegisterDumpProviderWithSequencedTaskRunner( 83 void RegisterDumpProviderWithSequencedTaskRunner(
69 MemoryDumpProvider* mdp, 84 MemoryDumpProvider* mdp,
70 scoped_refptr<base::SequencedTaskRunner> task_runner, 85 scoped_refptr<base::SequencedTaskRunner> task_runner,
71 const MemoryDumpProvider::Options& options) { 86 const MemoryDumpProvider::Options& options) {
72 MemoryDumpManager* mdm = MemoryDumpManager::GetInstance(); 87 MemoryDumpManager* mdm = MemoryDumpManager::GetInstance();
73 mdm->set_dumper_registrations_ignored_for_testing(false); 88 mdm->set_dumper_registrations_ignored_for_testing(false);
74 const char* kMDPName = "TestDumpProvider";
75 mdm->RegisterDumpProviderWithSequencedTaskRunner(mdp, kMDPName, task_runner, 89 mdm->RegisterDumpProviderWithSequencedTaskRunner(mdp, kMDPName, task_runner,
76 options); 90 options);
77 mdm->set_dumper_registrations_ignored_for_testing(true); 91 mdm->set_dumper_registrations_ignored_for_testing(true);
78 } 92 }
79 93
80 void OnTraceDataCollected(Closure quit_closure, 94 void OnTraceDataCollected(Closure quit_closure,
81 trace_event::TraceResultBuffer* buffer, 95 trace_event::TraceResultBuffer* buffer,
82 const scoped_refptr<RefCountedString>& json, 96 const scoped_refptr<RefCountedString>& json,
83 bool has_more_events) { 97 bool has_more_events) {
84 buffer->AddFragment(json->data()); 98 buffer->AddFragment(json->data());
(...skipping 1007 matching lines...) Expand 10 before | Expand all | Expand 10 after
1092 1106
1093 EnableTracingWithLegacyCategories(MemoryDumpManager::kTraceCategory); 1107 EnableTracingWithLegacyCategories(MemoryDumpManager::kTraceCategory);
1094 EXPECT_CALL(*delegate_, RequestGlobalMemoryDump(_, _)).Times(2); 1108 EXPECT_CALL(*delegate_, RequestGlobalMemoryDump(_, _)).Times(2);
1095 for (int i = 0; i < 2; ++i) { 1109 for (int i = 0; i < 2; ++i) {
1096 RequestGlobalDumpAndWait(MemoryDumpType::EXPLICITLY_TRIGGERED, 1110 RequestGlobalDumpAndWait(MemoryDumpType::EXPLICITLY_TRIGGERED,
1097 MemoryDumpLevelOfDetail::DETAILED); 1111 MemoryDumpLevelOfDetail::DETAILED);
1098 } 1112 }
1099 DisableTracing(); 1113 DisableTracing();
1100 } 1114 }
1101 1115
1116 TEST_F(MemoryDumpManagerTest, TestWhitelistingMDP) {
1117 InitializeMemoryDumpManager(false /* is_coordinator */);
1118 mdm_->set_dump_provider_whitelist_for_testing(kTestMDPWhitelist);
1119 std::unique_ptr<MockMemoryDumpProvider> mdp1(new MockMemoryDumpProvider);
1120 RegisterDumpProvider(mdp1.get());
1121 std::unique_ptr<MockMemoryDumpProvider> mdp2(new MockMemoryDumpProvider);
1122 RegisterDumpProvider(mdp2.get(), kWhitelistedMDPName, nullptr,
1123 kDefaultOptions);
1124
1125 EXPECT_CALL(*mdp1, OnMemoryDump(_, _)).Times(0);
1126 EXPECT_CALL(*mdp2, OnMemoryDump(_, _)).Times(1).WillOnce(Return(true));
1127 EXPECT_CALL(*delegate_, RequestGlobalMemoryDump(_, _)).Times(1);
1128
1129 EnableTracingWithLegacyCategories(MemoryDumpManager::kTraceCategory);
1130 EXPECT_FALSE(IsPeriodicDumpingEnabled());
1131 RequestGlobalDumpAndWait(MemoryDumpType::EXPLICITLY_TRIGGERED,
1132 MemoryDumpLevelOfDetail::BACKGROUND);
1133 DisableTracing();
1134 }
1135
1136 TEST_F(MemoryDumpManagerTest, TestBackgroundTracingSetup) {
1137 InitializeMemoryDumpManager(true /* is_coordinator */);
1138
1139 RunLoop run_loop;
1140 auto quit_closure = run_loop.QuitClosure();
1141
1142 testing::InSequence sequence;
1143 EXPECT_CALL(*delegate_, RequestGlobalMemoryDump(IsBackgroundDump(), _))
1144 .Times(5);
1145 EXPECT_CALL(*delegate_, RequestGlobalMemoryDump(IsBackgroundDump(), _))
1146 .WillOnce(Invoke([quit_closure](const MemoryDumpRequestArgs& args,
1147 const MemoryDumpCallback& callback) {
1148 ThreadTaskRunnerHandle::Get()->PostTask(FROM_HERE, quit_closure);
1149 }));
1150 EXPECT_CALL(*delegate_, RequestGlobalMemoryDump(_, _)).Times(AnyNumber());
1151
1152 EnableTracingWithTraceConfig(
1153 TraceConfigMemoryTestUtil::GetTraceConfig_BackgroundTrigger());
1154 ASSERT_TRUE(IsPeriodicDumpingEnabled());
1155 run_loop.Run();
1156 DisableTracing();
1157 }
1158
1102 } // namespace trace_event 1159 } // namespace trace_event
1103 } // namespace base 1160 } // namespace base
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698