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

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

Issue 2820433005: memory-infra: Start disentangling tracing from memory-infra (Closed)
Patch Set: add todo Created 3 years, 8 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
« no previous file with comments | « base/trace_event/memory_dump_manager.cc ('k') | base/trace_event/memory_tracing_observer.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 <utility> 10 #include <utility>
(...skipping 997 matching lines...) Expand 10 before | Expand all | Expand 10 after
1008 // Swallow all the final spurious calls until tracing gets disabled. 1008 // Swallow all the final spurious calls until tracing gets disabled.
1009 EXPECT_CALL(delegate, RequestGlobalMemoryDump(_, _)).Times(AnyNumber()); 1009 EXPECT_CALL(delegate, RequestGlobalMemoryDump(_, _)).Times(AnyNumber());
1010 1010
1011 EnableTracingWithTraceConfig( 1011 EnableTracingWithTraceConfig(
1012 TraceConfigMemoryTestUtil::GetTraceConfig_PeriodicTriggers( 1012 TraceConfigMemoryTestUtil::GetTraceConfig_PeriodicTriggers(
1013 kLightDumpPeriodMs, kHeavyDumpPeriodMs)); 1013 kLightDumpPeriodMs, kHeavyDumpPeriodMs));
1014 run_loop.Run(); 1014 run_loop.Run();
1015 DisableTracing(); 1015 DisableTracing();
1016 } 1016 }
1017 1017
1018 // Tests against race conditions that might arise when disabling tracing in the
1019 // middle of a global memory dump.
1020 // Flaky on iOS, see crbug.com/706961
1021 #if defined(OS_IOS)
1022 #define MAYBE_DisableTracingWhileDumping DISABLED_DisableTracingWhileDumping
1023 #else
1024 #define MAYBE_DisableTracingWhileDumping DisableTracingWhileDumping
1025 #endif
1026 TEST_F(MemoryDumpManagerTest, MAYBE_DisableTracingWhileDumping) {
1027 base::WaitableEvent tracing_disabled_event(
1028 WaitableEvent::ResetPolicy::AUTOMATIC,
1029 WaitableEvent::InitialState::NOT_SIGNALED);
1030 InitializeMemoryDumpManager(false /* is_coordinator */);
1031
1032 // Register a bound dump provider.
1033 std::unique_ptr<Thread> mdp_thread(new Thread("test thread"));
1034 mdp_thread->Start();
1035 MockMemoryDumpProvider mdp_with_affinity;
1036 RegisterDumpProvider(&mdp_with_affinity, mdp_thread->task_runner(),
1037 kDefaultOptions);
1038
1039 // Register also an unbound dump provider. Unbound dump providers are always
1040 // invoked after bound ones.
1041 MockMemoryDumpProvider unbound_mdp;
1042 RegisterDumpProvider(&unbound_mdp, nullptr, kDefaultOptions);
1043
1044 EnableTracingWithLegacyCategories(MemoryDumpManager::kTraceCategory);
1045 EXPECT_CALL(*delegate_, RequestGlobalMemoryDump(_, _)).Times(1);
1046 EXPECT_CALL(mdp_with_affinity, OnMemoryDump(_, _))
1047 .Times(1)
1048 .WillOnce(
1049 Invoke([&tracing_disabled_event](const MemoryDumpArgs&,
1050 ProcessMemoryDump* pmd) -> bool {
1051 tracing_disabled_event.Wait();
1052
1053 // At this point tracing has been disabled and the
1054 // MemoryDumpManager.dump_thread_ has been shut down.
1055 return true;
1056 }));
1057
1058 // |unbound_mdp| should never be invoked because the thread for unbound dump
1059 // providers has been shutdown in the meanwhile.
1060 EXPECT_CALL(unbound_mdp, OnMemoryDump(_, _)).Times(0);
1061
1062 last_callback_success_ = true;
1063 RunLoop run_loop;
1064 GlobalMemoryDumpCallback callback =
1065 Bind(&MemoryDumpManagerTest::GlobalDumpCallbackAdapter, Unretained(this),
1066 ThreadTaskRunnerHandle::Get(), run_loop.QuitClosure());
1067 mdm_->RequestGlobalDump(MemoryDumpType::EXPLICITLY_TRIGGERED,
1068 MemoryDumpLevelOfDetail::DETAILED, callback);
1069 DisableTracing();
1070 tracing_disabled_event.Signal();
1071 run_loop.Run();
1072
1073 EXPECT_FALSE(last_callback_success_);
1074 }
1075
1076 // Tests against race conditions that can happen if tracing is disabled before 1018 // Tests against race conditions that can happen if tracing is disabled before
1077 // the CreateProcessDump() call. Real-world regression: crbug.com/580295 . 1019 // the CreateProcessDump() call. Real-world regression: crbug.com/580295 .
1078 TEST_F(MemoryDumpManagerTest, DisableTracingRightBeforeStartOfDump) { 1020 TEST_F(MemoryDumpManagerTest, DisableTracingRightBeforeStartOfDump) {
1079 base::WaitableEvent tracing_disabled_event( 1021 base::WaitableEvent tracing_disabled_event(
1080 WaitableEvent::ResetPolicy::AUTOMATIC, 1022 WaitableEvent::ResetPolicy::AUTOMATIC,
1081 WaitableEvent::InitialState::NOT_SIGNALED); 1023 WaitableEvent::InitialState::NOT_SIGNALED);
1082 InitializeMemoryDumpManager(false /* is_coordinator */); 1024 InitializeMemoryDumpManager(false /* is_coordinator */);
1083 1025
1084 std::unique_ptr<Thread> mdp_thread(new Thread("test thread")); 1026 std::unique_ptr<Thread> mdp_thread(new Thread("test thread"));
1085 mdp_thread->Start(); 1027 mdp_thread->Start();
(...skipping 215 matching lines...) Expand 10 before | Expand all | Expand 10 after
1301 1243
1302 Thread thread("test thread"); 1244 Thread thread("test thread");
1303 thread.Start(); 1245 thread.Start();
1304 RegisterDumpProvider(&mdp1, thread.task_runner(), kDefaultOptions, 1246 RegisterDumpProvider(&mdp1, thread.task_runner(), kDefaultOptions,
1305 "BlacklistTestDumpProvider"); 1247 "BlacklistTestDumpProvider");
1306 // Unregistering on wrong thread should not crash. 1248 // Unregistering on wrong thread should not crash.
1307 mdm_->UnregisterDumpProvider(&mdp1); 1249 mdm_->UnregisterDumpProvider(&mdp1);
1308 thread.Stop(); 1250 thread.Stop();
1309 } 1251 }
1310 1252
1253 // Tests that we can manually take a dump without enabling tracing.
1254 TEST_F(MemoryDumpManagerTest, DumpWithTracingDisabled) {
1255 InitializeMemoryDumpManager(false /* is_coordinator */);
1256 MockMemoryDumpProvider mdp;
1257 RegisterDumpProvider(&mdp, ThreadTaskRunnerHandle::Get());
1258
1259 DisableTracing();
1260
1261 const TraceConfig& trace_config =
1262 TraceConfig(TraceConfigMemoryTestUtil::GetTraceConfig_NoTriggers());
1263 const TraceConfig::MemoryDumpConfig& memory_dump_config =
1264 trace_config.memory_dump_config();
1265
1266 mdm_->Enable(memory_dump_config);
1267
1268 EXPECT_CALL(*delegate_, RequestGlobalMemoryDump(_, _)).Times(3);
1269 EXPECT_CALL(mdp, OnMemoryDump(_, _)).Times(3).WillRepeatedly(Return(true));
1270 last_callback_success_ = true;
1271 for (int i = 0; i < 3; ++i)
1272 RequestGlobalDumpAndWait(MemoryDumpType::EXPLICITLY_TRIGGERED,
1273 MemoryDumpLevelOfDetail::DETAILED);
1274 // The callback result should actually be false since (for the moment at
1275 // least) a true result means that as well as the dump generally being
1276 // successful we also managed to add the dump to the trace.
1277 EXPECT_FALSE(last_callback_success_);
1278
1279 mdm_->Disable();
1280
1281 mdm_->UnregisterDumpProvider(&mdp);
1282 }
1283
1311 } // namespace trace_event 1284 } // namespace trace_event
1312 } // namespace base 1285 } // namespace base
OLDNEW
« no previous file with comments | « base/trace_event/memory_dump_manager.cc ('k') | base/trace_event/memory_tracing_observer.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698