Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(294)

Side by Side Diff: base/trace_event/process_memory_totals_dump_provider.cc

Issue 1417003003: [tracing] Dump child processes' memory metrics in browser (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@web_cache2_base
Patch Set: Remove manager Created 5 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
(Empty)
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.
4
5 #include "base/trace_event/process_memory_totals_dump_provider.h"
6
7 #include "base/process/process_metrics.h"
8 #include "base/trace_event/process_memory_dump.h"
9 #include "base/trace_event/process_memory_totals.h"
10
11 #if defined(OS_LINUX) || defined(OS_ANDROID)
12 #include <fcntl.h>
13
14 #include "base/files/file_util.h"
15
16 namespace {
17 bool kernel_supports_rss_peak_reset = true;
18 const char kClearPeakRssCommand[] = "5";
19 }
20 #endif
21
22 namespace base {
23 namespace trace_event {
24
25 // static
26 uint64 ProcessMemoryTotalsDumpProvider::rss_bytes_for_testing = 0;
27
28 // static
29 ProcessMemoryTotalsDumpProvider*
30 ProcessMemoryTotalsDumpProvider::GetInstance() {
31 return Singleton<
32 ProcessMemoryTotalsDumpProvider,
33 LeakySingletonTraits<ProcessMemoryTotalsDumpProvider>>::get();
34 }
35
36 ProcessMemoryTotalsDumpProvider::ProcessMemoryTotalsDumpProvider()
37 : process_metrics_(ProcessMetrics::CreateCurrentProcessMetrics()) {}
38
39 ProcessMemoryTotalsDumpProvider::~ProcessMemoryTotalsDumpProvider() {
40 }
41
42 // Called at trace dump point time. Creates a snapshot the memory counters for
43 // the current process.
44 bool ProcessMemoryTotalsDumpProvider::OnMemoryDump(const MemoryDumpArgs& args,
45 ProcessMemoryDump* pmd) {
46 const uint64 rss_bytes = rss_bytes_for_testing
47 ? rss_bytes_for_testing
48 : process_metrics_->GetWorkingSetSize();
49
50 uint64 peak_rss_bytes = 0;
51
52 #if !defined(OS_IOS)
53 peak_rss_bytes = process_metrics_->GetPeakWorkingSetSize();
54 #if defined(OS_LINUX) || defined(OS_ANDROID)
55 if (kernel_supports_rss_peak_reset) {
56 // TODO(ssid): Fix crbug.com/461788 to write to the file from sandboxed
57 // processes.
58 int clear_refs_fd = open("/proc/self/clear_refs", O_WRONLY);
59 if (clear_refs_fd > 0 &&
60 WriteFileDescriptor(clear_refs_fd, kClearPeakRssCommand,
61 sizeof(kClearPeakRssCommand))) {
62 pmd->process_totals()->set_is_peak_rss_resetable(true);
63 } else {
64 kernel_supports_rss_peak_reset = false;
65 }
66 close(clear_refs_fd);
67 }
68 #elif defined(OS_MACOSX)
69 size_t private_bytes;
70 bool res = process_metrics_->GetMemoryBytes(&private_bytes,
71 nullptr /* shared_bytes */);
72 if (res) {
73 pmd->process_totals()->SetExtraFieldInBytes("private_bytes", private_bytes);
74 }
75 #endif // defined(OS_LINUX) || defined(OS_ANDROID)
76 #endif // !defined(OS_IOS)
77
78 if (rss_bytes > 0) {
79 pmd->process_totals()->set_resident_set_bytes(rss_bytes);
80 pmd->process_totals()->set_peak_resident_set_bytes(peak_rss_bytes);
81 pmd->set_has_process_totals();
82 return true;
83 }
84
85 return false;
86 }
87
88 } // namespace trace_event
89 } // namespace base
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698