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
3 // found in the LICENSE file.
5 #include "base/trace_event/process_memory_maps_dump_provider.h"
9 #include "base/logging.h"
10 #include "base/process/process_metrics.h"
11 #include "base/trace_event/process_memory_dump.h"
12 #include "base/trace_event/process_memory_maps.h"
15 namespace trace_event
{
17 #if defined(OS_LINUX) || defined(OS_ANDROID)
19 std::istream
* ProcessMemoryMapsDumpProvider::proc_smaps_for_testing
= nullptr;
22 uint32
ReadLinuxProcSmapsFile(std::istream
* smaps
, ProcessMemoryMaps
* pmm
) {
24 LOG(ERROR
) << "Could not read smaps file.";
27 uint32 num_regions_processed
= 0;
28 // TODO(primiano): in next CLs add the actual code to process the smaps file.
29 return num_regions_processed
;
32 #endif // defined(OS_LINUX) || defined(OS_ANDROID)
35 ProcessMemoryMapsDumpProvider
* ProcessMemoryMapsDumpProvider::GetInstance() {
36 return Singleton
<ProcessMemoryMapsDumpProvider
,
37 LeakySingletonTraits
<ProcessMemoryMapsDumpProvider
>>::get();
40 ProcessMemoryMapsDumpProvider::ProcessMemoryMapsDumpProvider() {
43 ProcessMemoryMapsDumpProvider::~ProcessMemoryMapsDumpProvider() {
46 // Called at trace dump point time. Creates a snapshot the memory maps for the
48 void ProcessMemoryMapsDumpProvider::DumpInto(ProcessMemoryDump
* pmd
) {
51 #if defined(OS_LINUX) || defined(OS_ANDROID)
52 if (UNLIKELY(proc_smaps_for_testing
)) {
53 res
= ReadLinuxProcSmapsFile(proc_smaps_for_testing
, pmd
->process_mmaps());
55 std::ifstream
proc_self_smaps("/proc/self/smaps");
56 res
= ReadLinuxProcSmapsFile(&proc_self_smaps
, pmd
->process_mmaps());
59 LOG(ERROR
) << "ProcessMemoryMaps dump provider is supported only on Linux";
63 pmd
->set_has_process_mmaps();
66 } // namespace trace_event