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 "components/tracing/common/process_metrics_memory_dump_provider.h" | 5 #include "components/tracing/common/process_metrics_memory_dump_provider.h" |
6 | 6 |
7 #include <stdint.h> | 7 #include <stdint.h> |
8 | 8 |
9 #include <memory> | 9 #include <memory> |
Primiano Tucci (use gerrit)
2017/03/15 15:18:14
nit: IWYU (include what you use)
can you add #incl
| |
10 | 10 |
11 #include "base/files/file_util.h" | 11 #include "base/files/file_util.h" |
12 #include "base/memory/ptr_util.h" | 12 #include "base/memory/ptr_util.h" |
13 #include "base/process/process_metrics.h" | 13 #include "base/process/process_metrics.h" |
14 #include "base/trace_event/memory_dump_manager.h" | |
14 #include "base/trace_event/process_memory_dump.h" | 15 #include "base/trace_event/process_memory_dump.h" |
15 #include "base/trace_event/process_memory_maps.h" | 16 #include "base/trace_event/process_memory_maps.h" |
16 #include "base/trace_event/process_memory_totals.h" | 17 #include "base/trace_event/process_memory_totals.h" |
17 #include "base/trace_event/trace_event_argument.h" | 18 #include "base/trace_event/trace_event_argument.h" |
18 #include "testing/gtest/include/gtest/gtest.h" | 19 #include "testing/gtest/include/gtest/gtest.h" |
19 | 20 |
20 #if defined(OS_MACOSX) | 21 #if defined(OS_MACOSX) |
21 #include <libgen.h> | 22 #include <libgen.h> |
22 #include <mach-o/dyld.h> | 23 #include <mach-o/dyld.h> |
23 #endif | 24 #endif |
(...skipping 362 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
386 }); | 387 }); |
387 uint64_t last_address = 0; | 388 uint64_t last_address = 0; |
388 for (const VMRegion& region : regions) { | 389 for (const VMRegion& region : regions) { |
389 EXPECT_GE(region.start_address, last_address); | 390 EXPECT_GE(region.start_address, last_address); |
390 last_address = region.start_address + region.size_in_bytes; | 391 last_address = region.start_address + region.size_in_bytes; |
391 } | 392 } |
392 } | 393 } |
393 | 394 |
394 #endif // defined(OS_MACOSX) | 395 #endif // defined(OS_MACOSX) |
395 | 396 |
397 class MockMemoryDumpProvider : public ProcessMetricsMemoryDumpProvider { | |
398 public: | |
399 MockMemoryDumpProvider(base::ProcessId process); | |
400 ~MockMemoryDumpProvider() override; | |
401 }; | |
402 | |
403 std::unordered_set<MockMemoryDumpProvider*> g_live_mocks; | |
404 std::unordered_set<MockMemoryDumpProvider*> g_dead_mocks; | |
405 | |
406 MockMemoryDumpProvider::MockMemoryDumpProvider(base::ProcessId process) | |
407 : ProcessMetricsMemoryDumpProvider(process) { | |
408 g_live_mocks.insert(this); | |
409 } | |
410 | |
411 MockMemoryDumpProvider::~MockMemoryDumpProvider() { | |
412 g_live_mocks.erase(this); | |
413 g_dead_mocks.insert(this); | |
414 } | |
415 | |
416 TEST(ProcessMetricsMemoryDumpProviderTest, DoubleRegister) { | |
417 auto factory = [](base::ProcessId process) { | |
418 return std::unique_ptr<ProcessMetricsMemoryDumpProvider>( | |
419 new MockMemoryDumpProvider(process)); | |
420 }; | |
421 ProcessMetricsMemoryDumpProvider::factory_for_testing = factory; | |
422 ProcessMetricsMemoryDumpProvider::RegisterForProcess(1); | |
423 ProcessMetricsMemoryDumpProvider::RegisterForProcess(1); | |
424 ASSERT_EQ(1u, g_live_mocks.size()); | |
425 ASSERT_EQ(1u, g_dead_mocks.size()); | |
426 auto* manager = base::trace_event::MemoryDumpManager::GetInstance(); | |
427 MockMemoryDumpProvider* live_mock = *g_live_mocks.begin(); | |
428 EXPECT_TRUE(manager->IsDumpProviderRegisteredForTesting(live_mock)); | |
429 auto* dead_mock = *g_dead_mocks.begin(); | |
430 EXPECT_FALSE(manager->IsDumpProviderRegisteredForTesting(dead_mock)); | |
431 ProcessMetricsMemoryDumpProvider::UnregisterForProcess(1); | |
432 g_live_mocks.clear(); | |
433 g_dead_mocks.clear(); | |
434 } | |
435 | |
396 } // namespace tracing | 436 } // namespace tracing |
OLD | NEW |