Add iOS bots to 10% CQ experiment
[chromium-blink-merge.git] / base / trace_event / process_memory_maps_dump_provider.cc
blobb6fba80c73629809808a83f0e61f30cad00ee269
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"
7 #include <fstream>
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"
14 namespace base {
15 namespace trace_event {
17 #if defined(OS_LINUX) || defined(OS_ANDROID)
18 // static
19 std::istream* ProcessMemoryMapsDumpProvider::proc_smaps_for_testing = nullptr;
21 namespace {
22 uint32 ReadLinuxProcSmapsFile(std::istream* smaps, ProcessMemoryMaps* pmm) {
23 if (!smaps->good()) {
24 LOG(ERROR) << "Could not read smaps file.";
25 return 0;
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;
31 } // namespace
32 #endif // defined(OS_LINUX) || defined(OS_ANDROID)
34 // static
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
47 // current process.
48 void ProcessMemoryMapsDumpProvider::DumpInto(ProcessMemoryDump* pmd) {
49 uint32 res = 0;
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());
54 } else {
55 std::ifstream proc_self_smaps("/proc/self/smaps");
56 res = ReadLinuxProcSmapsFile(&proc_self_smaps, pmd->process_mmaps());
58 #else
59 LOG(ERROR) << "ProcessMemoryMaps dump provider is supported only on Linux";
60 #endif
62 if (res > 0)
63 pmd->set_has_process_mmaps();
66 } // namespace trace_event
67 } // namespace base