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

Side by Side Diff: chrome/browser/chromeos/memory/oom_priority_manager.cc

Issue 11475016: cros: Add UMA stat for graphics driver memory on tab discard (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: rebase Created 8 years 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 | Annotate | Revision Log
« no previous file with comments | « base/process_util_linux.cc ('k') | chrome/browser/memory_details.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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 "chrome/browser/chromeos/memory/oom_priority_manager.h" 5 #include "chrome/browser/chromeos/memory/oom_priority_manager.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 #include <set> 8 #include <set>
9 #include <vector> 9 #include <vector>
10 10
11 #include "base/bind.h" 11 #include "base/bind.h"
12 #include "base/bind_helpers.h" 12 #include "base/bind_helpers.h"
13 #include "base/command_line.h" 13 #include "base/command_line.h"
14 #include "base/metrics/field_trial.h" 14 #include "base/metrics/field_trial.h"
15 #include "base/metrics/histogram.h" 15 #include "base/metrics/histogram.h"
16 #include "base/process.h" 16 #include "base/process.h"
17 #include "base/process_util.h" 17 #include "base/process_util.h"
18 #include "base/string16.h" 18 #include "base/string16.h"
19 #include "base/string_number_conversions.h" 19 #include "base/string_number_conversions.h"
20 #include "base/string_util.h"
20 #include "base/synchronization/lock.h" 21 #include "base/synchronization/lock.h"
21 #include "base/threading/thread.h" 22 #include "base/threading/thread.h"
22 #include "base/time.h" 23 #include "base/time.h"
23 #include "base/utf_string_conversions.h" 24 #include "base/utf_string_conversions.h"
24 #include "build/build_config.h" 25 #include "build/build_config.h"
25 #include "chrome/browser/browser_process.h" 26 #include "chrome/browser/browser_process.h"
26 #include "chrome/browser/chromeos/memory/low_memory_observer.h" 27 #include "chrome/browser/chromeos/memory/low_memory_observer.h"
27 #include "chrome/browser/memory_details.h" 28 #include "chrome/browser/memory_details.h"
28 #include "chrome/browser/ui/browser.h" 29 #include "chrome/browser/ui/browser.h"
29 #include "chrome/browser/ui/browser_list.h" 30 #include "chrome/browser/ui/browser_list.h"
30 #include "chrome/browser/ui/tabs/tab_strip_model.h" 31 #include "chrome/browser/ui/tabs/tab_strip_model.h"
31 #include "chrome/common/chrome_constants.h" 32 #include "chrome/common/chrome_constants.h"
32 #include "chrome/common/chrome_switches.h" 33 #include "chrome/common/chrome_switches.h"
33 #include "content/public/browser/browser_thread.h" 34 #include "content/public/browser/browser_thread.h"
34 #include "content/public/browser/notification_service.h" 35 #include "content/public/browser/notification_service.h"
35 #include "content/public/browser/notification_types.h" 36 #include "content/public/browser/notification_types.h"
36 #include "content/public/browser/render_process_host.h" 37 #include "content/public/browser/render_process_host.h"
37 #include "content/public/browser/render_widget_host.h" 38 #include "content/public/browser/render_widget_host.h"
38 #include "content/public/browser/web_contents.h" 39 #include "content/public/browser/web_contents.h"
39 #include "content/public/browser/zygote_host_linux.h" 40 #include "content/public/browser/zygote_host_linux.h"
41 #include "ui/base/text/bytes_formatting.h"
40 42
41 using base::TimeDelta; 43 using base::TimeDelta;
42 using base::TimeTicks; 44 using base::TimeTicks;
43 using content::BrowserThread; 45 using content::BrowserThread;
44 using content::WebContents; 46 using content::WebContents;
45 47
46 namespace chromeos { 48 namespace chromeos {
47 49
48 namespace { 50 namespace {
49 51
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after
102 104
103 OomMemoryDetails::OomMemoryDetails() { 105 OomMemoryDetails::OomMemoryDetails() {
104 AddRef(); // Released in OnDetailsAvailable(). 106 AddRef(); // Released in OnDetailsAvailable().
105 start_time_ = TimeTicks::Now(); 107 start_time_ = TimeTicks::Now();
106 } 108 }
107 109
108 void OomMemoryDetails::OnDetailsAvailable() { 110 void OomMemoryDetails::OnDetailsAvailable() {
109 TimeDelta delta = TimeTicks::Now() - start_time_; 111 TimeDelta delta = TimeTicks::Now() - start_time_;
110 // These logs are collected by user feedback reports. We want them to help 112 // These logs are collected by user feedback reports. We want them to help
111 // diagnose user-reported problems with frequently discarded tabs. 113 // diagnose user-reported problems with frequently discarded tabs.
114 std::string log_string = ToLogString();
115 base::SystemMemoryInfoKB memory;
116 if (base::GetSystemMemoryInfo(&memory) && memory.gem_size != -1) {
117 log_string += "Graphics ";
118 log_string += UTF16ToASCII(ui::FormatBytes(memory.gem_size));
119 }
112 LOG(WARNING) << "OOM details (" << delta.InMilliseconds() << " ms):\n" 120 LOG(WARNING) << "OOM details (" << delta.InMilliseconds() << " ms):\n"
113 << ToLogString(); 121 << log_string;
114 if (g_browser_process && g_browser_process->oom_priority_manager()) 122 if (g_browser_process && g_browser_process->oom_priority_manager())
115 g_browser_process->oom_priority_manager()->DiscardTab(); 123 g_browser_process->oom_priority_manager()->DiscardTab();
116 // Delete ourselves so we don't have to worry about OomPriorityManager 124 // Delete ourselves so we don't have to worry about OomPriorityManager
117 // deleting us when we're still working. 125 // deleting us when we're still working.
118 Release(); 126 Release();
119 } 127 }
120 128
121 } // namespace 129 } // namespace
122 130
123 //////////////////////////////////////////////////////////////////////////////// 131 ////////////////////////////////////////////////////////////////////////////////
(...skipping 148 matching lines...) Expand 10 before | Expand all | Expand 10 after
272 TimeDelta interval = TimeTicks::Now() - last_discard_time_; 280 TimeDelta interval = TimeTicks::Now() - last_discard_time_;
273 int interval_ms = static_cast<int>(interval.InMilliseconds()); 281 int interval_ms = static_cast<int>(interval.InMilliseconds());
274 // Record time in milliseconds over an interval of approximately 1 day. 282 // Record time in milliseconds over an interval of approximately 1 day.
275 // Start at 100 ms to get extra resolution in the target 750 ms range. 283 // Start at 100 ms to get extra resolution in the target 750 ms range.
276 EXPERIMENT_CUSTOM_COUNTS( 284 EXPERIMENT_CUSTOM_COUNTS(
277 "Tabs.Discard.IntervalTime2", interval_ms, 100, 100000 * 1000, 50); 285 "Tabs.Discard.IntervalTime2", interval_ms, 100, 100000 * 1000, 50);
278 } 286 }
279 // Record Chrome's concept of system memory usage at the time of the discard. 287 // Record Chrome's concept of system memory usage at the time of the discard.
280 base::SystemMemoryInfoKB memory; 288 base::SystemMemoryInfoKB memory;
281 if (base::GetSystemMemoryInfo(&memory)) { 289 if (base::GetSystemMemoryInfo(&memory)) {
290 // TODO(jamescook): Remove this after R25 is deployed to stable. It does
291 // not have sufficient resolution in the 2-4 GB range and does not properly
292 // account for graphics memory on ARM. Replace with MemAllocatedMB below.
282 int mem_anonymous_mb = (memory.active_anon + memory.inactive_anon) / 1024; 293 int mem_anonymous_mb = (memory.active_anon + memory.inactive_anon) / 1024;
283 EXPERIMENT_HISTOGRAM_MEGABYTES("Tabs.Discard.MemAnonymousMB", 294 EXPERIMENT_HISTOGRAM_MEGABYTES("Tabs.Discard.MemAnonymousMB",
284 mem_anonymous_mb); 295 mem_anonymous_mb);
285 296
297 // On Intel, graphics objects are in anonymous pages, but on ARM they are
298 // not. For a total "allocated count" add in graphics pages on ARM.
299 int mem_allocated_mb = mem_anonymous_mb;
300 #if defined(ARCH_CPU_ARM_FAMILY)
301 if (memory.gem_size != -1)
302 mem_allocated_mb += memory.gem_size / 1024 / 1024;
303 #endif
304 EXPERIMENT_CUSTOM_COUNTS("Tabs.Discard.MemAllocatedMB", mem_allocated_mb,
305 256, 32768, 50)
306
286 int mem_available_mb = 307 int mem_available_mb =
287 (memory.active_file + memory.inactive_file + memory.free) / 1024; 308 (memory.active_file + memory.inactive_file + memory.free) / 1024;
288 EXPERIMENT_HISTOGRAM_MEGABYTES("Tabs.Discard.MemAvailableMB", 309 EXPERIMENT_HISTOGRAM_MEGABYTES("Tabs.Discard.MemAvailableMB",
289 mem_available_mb); 310 mem_available_mb);
290 } 311 }
291 // Set up to record the next interval. 312 // Set up to record the next interval.
292 last_discard_time_ = TimeTicks::Now(); 313 last_discard_time_ = TimeTicks::Now();
293 } 314 }
294 315
295 int OomPriorityManager::GetTabCount() const { 316 int OomPriorityManager::GetTabCount() const {
(...skipping 214 matching lines...) Expand 10 before | Expand all | Expand 10 after
510 content::ZygoteHost::GetInstance()->AdjustRendererOOMScore( 531 content::ZygoteHost::GetInstance()->AdjustRendererOOMScore(
511 iterator->renderer_handle, score); 532 iterator->renderer_handle, score);
512 pid_to_oom_score_[iterator->renderer_handle] = score; 533 pid_to_oom_score_[iterator->renderer_handle] = score;
513 } 534 }
514 priority += priority_increment; 535 priority += priority_increment;
515 } 536 }
516 } 537 }
517 } 538 }
518 539
519 } // namespace chromeos 540 } // namespace chromeos
OLDNEW
« no previous file with comments | « base/process_util_linux.cc ('k') | chrome/browser/memory_details.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698