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 <fcntl.h> | 7 #include <fcntl.h> |
8 #include <stdint.h> | 8 #include <stdint.h> |
9 | 9 |
10 #include <map> | 10 #include <map> |
(...skipping 195 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
206 NOTREACHED(); | 206 NOTREACHED(); |
207 return std::unique_ptr<base::ProcessMetrics>(); | 207 return std::unique_ptr<base::ProcessMetrics>(); |
208 #endif // defined(OS_LINUX) || defined(OS_ANDROID) | 208 #endif // defined(OS_LINUX) || defined(OS_ANDROID) |
209 } | 209 } |
210 | 210 |
211 } // namespace | 211 } // namespace |
212 | 212 |
213 // static | 213 // static |
214 uint64_t ProcessMetricsMemoryDumpProvider::rss_bytes_for_testing = 0; | 214 uint64_t ProcessMetricsMemoryDumpProvider::rss_bytes_for_testing = 0; |
215 | 215 |
| 216 // static |
| 217 ProcessMetricsMemoryDumpProvider::FactoryFunction |
| 218 ProcessMetricsMemoryDumpProvider::factory_for_testing = nullptr; |
| 219 |
216 #if defined(OS_LINUX) || defined(OS_ANDROID) | 220 #if defined(OS_LINUX) || defined(OS_ANDROID) |
217 | 221 |
218 // static | 222 // static |
219 FILE* ProcessMetricsMemoryDumpProvider::proc_smaps_for_testing = nullptr; | 223 FILE* ProcessMetricsMemoryDumpProvider::proc_smaps_for_testing = nullptr; |
220 | 224 |
221 // static | 225 // static |
222 int ProcessMetricsMemoryDumpProvider::fast_polling_statm_fd_for_testing = -1; | 226 int ProcessMetricsMemoryDumpProvider::fast_polling_statm_fd_for_testing = -1; |
223 | 227 |
224 bool ProcessMetricsMemoryDumpProvider::DumpProcessMemoryMaps( | 228 bool ProcessMetricsMemoryDumpProvider::DumpProcessMemoryMaps( |
225 const base::trace_event::MemoryDumpArgs& args, | 229 const base::trace_event::MemoryDumpArgs& args, |
(...skipping 309 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
535 } | 539 } |
536 | 540 |
537 pmd->set_has_process_mmaps(); | 541 pmd->set_has_process_mmaps(); |
538 return true; | 542 return true; |
539 } | 543 } |
540 #endif // defined(OS_MACOSX) | 544 #endif // defined(OS_MACOSX) |
541 | 545 |
542 // static | 546 // static |
543 void ProcessMetricsMemoryDumpProvider::RegisterForProcess( | 547 void ProcessMetricsMemoryDumpProvider::RegisterForProcess( |
544 base::ProcessId process) { | 548 base::ProcessId process) { |
545 std::unique_ptr<ProcessMetricsMemoryDumpProvider> metrics_provider( | 549 std::unique_ptr<ProcessMetricsMemoryDumpProvider> owned_provider; |
546 new ProcessMetricsMemoryDumpProvider(process)); | 550 if (factory_for_testing) { |
547 base::trace_event::MemoryDumpProvider::Options options; | 551 owned_provider = factory_for_testing(process); |
548 options.target_pid = process; | 552 } else { |
549 options.is_fast_polling_supported = true; | 553 owned_provider = std::unique_ptr<ProcessMetricsMemoryDumpProvider>( |
550 base::trace_event::MemoryDumpManager::GetInstance()->RegisterDumpProvider( | 554 new ProcessMetricsMemoryDumpProvider(process)); |
551 metrics_provider.get(), "ProcessMemoryMetrics", nullptr, options); | 555 } |
| 556 |
| 557 ProcessMetricsMemoryDumpProvider* provider = owned_provider.get(); |
552 bool did_insert = | 558 bool did_insert = |
553 g_dump_providers_map.Get() | 559 g_dump_providers_map.Get() |
554 .insert(std::make_pair(process, std::move(metrics_provider))) | 560 .insert(std::make_pair(process, std::move(owned_provider))) |
555 .second; | 561 .second; |
556 if (!did_insert) { | 562 if (!did_insert) { |
557 DLOG(ERROR) << "ProcessMetricsMemoryDumpProvider already registered for " | 563 DLOG(ERROR) << "ProcessMetricsMemoryDumpProvider already registered for " |
558 << (process == base::kNullProcessId | 564 << (process == base::kNullProcessId |
559 ? "current process" | 565 ? "current process" |
560 : "process id " + base::IntToString(process)); | 566 : "process id " + base::IntToString(process)); |
| 567 return; |
561 } | 568 } |
| 569 base::trace_event::MemoryDumpProvider::Options options; |
| 570 options.target_pid = process; |
| 571 options.is_fast_polling_supported = true; |
| 572 base::trace_event::MemoryDumpManager::GetInstance()->RegisterDumpProvider( |
| 573 provider, "ProcessMemoryMetrics", nullptr, options); |
562 } | 574 } |
563 | 575 |
564 // static | 576 // static |
565 void ProcessMetricsMemoryDumpProvider::UnregisterForProcess( | 577 void ProcessMetricsMemoryDumpProvider::UnregisterForProcess( |
566 base::ProcessId process) { | 578 base::ProcessId process) { |
567 auto iter = g_dump_providers_map.Get().find(process); | 579 auto iter = g_dump_providers_map.Get().find(process); |
568 if (iter == g_dump_providers_map.Get().end()) | 580 if (iter == g_dump_providers_map.Get().end()) |
569 return; | 581 return; |
570 base::trace_event::MemoryDumpManager::GetInstance() | 582 base::trace_event::MemoryDumpManager::GetInstance() |
571 ->UnregisterAndDeleteDumpProviderSoon(std::move(iter->second)); | 583 ->UnregisterAndDeleteDumpProviderSoon(std::move(iter->second)); |
(...skipping 120 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
692 #endif | 704 #endif |
693 } | 705 } |
694 | 706 |
695 void ProcessMetricsMemoryDumpProvider::SuspendFastMemoryPolling() { | 707 void ProcessMetricsMemoryDumpProvider::SuspendFastMemoryPolling() { |
696 #if defined(OS_LINUX) || defined(OS_ANDROID) | 708 #if defined(OS_LINUX) || defined(OS_ANDROID) |
697 fast_polling_statm_fd_.reset(); | 709 fast_polling_statm_fd_.reset(); |
698 #endif | 710 #endif |
699 } | 711 } |
700 | 712 |
701 } // namespace tracing | 713 } // namespace tracing |
OLD | NEW |