Index: components/tracing/common/process_metrics_memory_dump_provider_unittest.cc |
diff --git a/components/tracing/common/process_metrics_memory_dump_provider_unittest.cc b/components/tracing/common/process_metrics_memory_dump_provider_unittest.cc |
index 95a565d148ab8b502af840f0339672c10eb4d3c8..f257527c6b5c87ec42b26d7a74630ed8d78d5bbe 100644 |
--- a/components/tracing/common/process_metrics_memory_dump_provider_unittest.cc |
+++ b/components/tracing/common/process_metrics_memory_dump_provider_unittest.cc |
@@ -11,10 +11,12 @@ |
#include "base/files/file_util.h" |
#include "base/memory/ptr_util.h" |
#include "base/process/process_metrics.h" |
+#include "base/trace_event/memory_dump_manager.h" |
#include "base/trace_event/process_memory_dump.h" |
#include "base/trace_event/process_memory_maps.h" |
#include "base/trace_event/process_memory_totals.h" |
#include "base/trace_event/trace_event_argument.h" |
+#include "testing/gmock/include/gmock/gmock.h" |
Primiano Tucci (use gerrit)
2017/03/15 12:44:40
I think this is a leftover, right? you are not usi
hjd
2017/03/15 14:23:12
Done.
|
#include "testing/gtest/include/gtest/gtest.h" |
#if defined(OS_MACOSX) |
@@ -393,4 +395,52 @@ TEST(ProcessMetricsMemoryDumpProviderTest, NoDuplicateRegions) { |
#endif // defined(OS_MACOSX) |
+class MockMemoryDumpProvider : public ProcessMetricsMemoryDumpProvider { |
+ public: |
+ MOCK_METHOD2(OnMemoryDump, |
Primiano Tucci (use gerrit)
2017/03/15 12:44:40
are you really using this mocked method? I think t
hjd
2017/03/15 14:23:12
Done.
|
+ bool(const base::trace_event::MemoryDumpArgs& args, |
+ base::trace_event::ProcessMemoryDump* pmd)); |
+ |
+ MockMemoryDumpProvider(base::ProcessId process); |
+ ~MockMemoryDumpProvider() override; |
+}; |
+ |
+std::unordered_set<MockMemoryDumpProvider*> live_mocks; |
Primiano Tucci (use gerrit)
2017/03/15 12:44:40
nit: g_ -> g_live_mocks (same with dead) as these
hjd
2017/03/15 14:23:12
Done.
|
+std::unordered_set<MockMemoryDumpProvider*> dead_mocks; |
+ |
+MockMemoryDumpProvider::MockMemoryDumpProvider(base::ProcessId process) |
+ : ProcessMetricsMemoryDumpProvider(process) { |
+ live_mocks.insert(this); |
+} |
+ |
+MockMemoryDumpProvider::~MockMemoryDumpProvider() { |
+ // ASSERT_TRUE(live_mocks.find(this) != live_mocks.end()); |
+ live_mocks.erase(this); |
+ dead_mocks.insert(this); |
+} |
+ |
+TEST(ProcessMetricsMemoryDumpProviderTest, DoubleRegister) { |
+ auto factory = [](base::ProcessId process) { |
+ return std::unique_ptr<ProcessMetricsMemoryDumpProvider>( |
+ new MockMemoryDumpProvider(process)); |
+ }; |
+ ProcessMetricsMemoryDumpProvider::factory_for_testing = factory; |
+ ProcessMetricsMemoryDumpProvider::RegisterForProcess(1); |
+ ProcessMetricsMemoryDumpProvider::RegisterForProcess(1); |
+ EXPECT_EQ(1u, live_mocks.size()); |
Primiano Tucci (use gerrit)
2017/03/15 12:44:40
I'd make this an ASSERT_EQ and remove the if(...==
hjd
2017/03/15 14:23:12
Done.
|
+ EXPECT_EQ(1u, dead_mocks.size()); |
+ auto* manager = base::trace_event::MemoryDumpManager::GetInstance(); |
+ if (live_mocks.size() == 1u) { |
+ MockMemoryDumpProvider* live_mock = *live_mocks.begin(); |
+ EXPECT_TRUE(manager->IsDumpProviderRegisteredForTesting(live_mock)); |
+ } |
+ if (dead_mocks.size() == 1u) { |
+ auto* dead_mock = *dead_mocks.begin(); |
+ EXPECT_FALSE(manager->IsDumpProviderRegisteredForTesting(dead_mock)); |
+ } |
+ ProcessMetricsMemoryDumpProvider::UnregisterForProcess(1); |
+ live_mocks.clear(); |
+ dead_mocks.clear(); |
+} |
+ |
} // namespace tracing |