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 "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 Loading... | |
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 Loading... | |
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 |
OLD | NEW |