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

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

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

Powered by Google App Engine
This is Rietveld 408576698