Chromium Code Reviews| 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 |