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

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

Issue 1384363002: [NOT TO COMMIT YET] Using proc/pid/status file contents to get process metrics in linux. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@smaps_fscan
Patch Set: Renames and fixes. Created 5 years, 2 months 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
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 "base/trace_event/process_memory_totals_dump_provider.h" 5 #include "base/trace_event/process_memory_totals_dump_provider.h"
6 6
7 #include "base/process/process_metrics.h" 7 #include "base/process/process_metrics.h"
8 #include "base/trace_event/process_memory_dump.h" 8 #include "base/trace_event/process_memory_dump.h"
9 #include "base/trace_event/process_memory_totals.h" 9 #include "base/trace_event/process_memory_totals.h"
10 10
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
48 : process_metrics_(CreateProcessMetricsForCurrentProcess()) { 48 : process_metrics_(CreateProcessMetricsForCurrentProcess()) {
49 } 49 }
50 50
51 ProcessMemoryTotalsDumpProvider::~ProcessMemoryTotalsDumpProvider() { 51 ProcessMemoryTotalsDumpProvider::~ProcessMemoryTotalsDumpProvider() {
52 } 52 }
53 53
54 // Called at trace dump point time. Creates a snapshot the memory counters for 54 // Called at trace dump point time. Creates a snapshot the memory counters for
55 // the current process. 55 // the current process.
56 bool ProcessMemoryTotalsDumpProvider::OnMemoryDump(const MemoryDumpArgs& args, 56 bool ProcessMemoryTotalsDumpProvider::OnMemoryDump(const MemoryDumpArgs& args,
57 ProcessMemoryDump* pmd) { 57 ProcessMemoryDump* pmd) {
58 const uint64 rss_bytes = rss_bytes_for_testing 58 uint64 rss_bytes;
59 ? rss_bytes_for_testing
60 : process_metrics_->GetWorkingSetSize();
61
62 uint64 peak_rss_bytes = 0; 59 uint64 peak_rss_bytes = 0;
63 60
61 if (UNLIKELY(rss_bytes_for_testing)) {
62 rss_bytes = rss_bytes_for_testing;
63 #if defined(OS_LINUX)
Lei Zhang 2015/10/06 21:09:00 I haven't thought about this much, but if there's
ssid 2015/10/07 09:12:15 I cannot remove the ifdef totally since proc_statu
64 } else if (proc_status_fd.is_valid()) {
65 rss_bytes = process_metrics_->GetWorkingSetSize(proc_status_fd.get());
66 peak_rss_bytes =
67 process_metrics_->GetPeakWorkingSetSize(proc_status_fd.get());
68 #endif
69 } else {
70 rss_bytes = process_metrics_->GetWorkingSetSize();
64 #if !defined(OS_IOS) 71 #if !defined(OS_IOS)
65 peak_rss_bytes = process_metrics_->GetPeakWorkingSetSize(); 72 peak_rss_bytes = process_metrics_->GetPeakWorkingSetSize();
73 #endif
74 }
75
66 #if defined(OS_LINUX) || defined(OS_ANDROID) 76 #if defined(OS_LINUX) || defined(OS_ANDROID)
67 if (kernel_supports_rss_peak_reset) { 77 if (kernel_supports_rss_peak_reset) {
68 // TODO(ssid): Fix crbug.com/461788 to write to the file from sandboxed 78 // TODO(ssid): Fix crbug.com/461788 to write to the file from sandboxed
69 // processes. 79 // processes.
70 int clear_refs_fd = open("/proc/self/clear_refs", O_WRONLY); 80 int clear_refs_fd = open("/proc/self/clear_refs", O_WRONLY);
71 if (clear_refs_fd > 0 && 81 if (clear_refs_fd > 0 &&
72 WriteFileDescriptor(clear_refs_fd, kClearPeakRssCommand, 82 WriteFileDescriptor(clear_refs_fd, kClearPeakRssCommand,
73 sizeof(kClearPeakRssCommand))) { 83 sizeof(kClearPeakRssCommand))) {
74 pmd->process_totals()->set_is_peak_rss_resetable(true); 84 pmd->process_totals()->set_is_peak_rss_resetable(true);
75 } else { 85 } else {
76 kernel_supports_rss_peak_reset = false; 86 kernel_supports_rss_peak_reset = false;
77 } 87 }
78 close(clear_refs_fd); 88 close(clear_refs_fd);
79 } 89 }
80 #endif // defined(OS_LINUX) || defined(OS_ANDROID) 90 #endif // defined(OS_LINUX) || defined(OS_ANDROID)
81 #endif // !defined(OS_IOS)
82 91
83 if (rss_bytes > 0) { 92 if (rss_bytes > 0) {
84 pmd->process_totals()->set_resident_set_bytes(rss_bytes); 93 pmd->process_totals()->set_resident_set_bytes(rss_bytes);
85 pmd->process_totals()->set_peak_resident_set_bytes(peak_rss_bytes); 94 pmd->process_totals()->set_peak_resident_set_bytes(peak_rss_bytes);
86 pmd->set_has_process_totals(); 95 pmd->set_has_process_totals();
87 return true; 96 return true;
88 } 97 }
89 98
90 return false; 99 return false;
91 } 100 }
92 101
93 } // namespace trace_event 102 } // namespace trace_event
94 } // namespace base 103 } // namespace base
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698