| OLD | NEW |
| 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 |
| (...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 51 using base::TimeDelta; | 51 using base::TimeDelta; |
| 52 using base::TimeTicks; | 52 using base::TimeTicks; |
| 53 using content::BrowserThread; | 53 using content::BrowserThread; |
| 54 using content::WebContents; | 54 using content::WebContents; |
| 55 | 55 |
| 56 namespace chromeos { | 56 namespace chromeos { |
| 57 | 57 |
| 58 namespace { | 58 namespace { |
| 59 | 59 |
| 60 // Record a size in megabytes, over a potential interval up to 32 GB. | 60 // Record a size in megabytes, over a potential interval up to 32 GB. |
| 61 #define HISTOGRAM_MEGABYTES(name, sample) \ | 61 #define UMA_HISTOGRAM_MEGABYTES(name, sample) \ |
| 62 UMA_HISTOGRAM_CUSTOM_COUNTS(name, sample, 1, 32768, 50) | 62 UMA_HISTOGRAM_CUSTOM_COUNTS(name, sample, 1, 32768, 50) |
| 63 | 63 |
| 64 // The default interval in seconds after which to adjust the oom_score_adj | 64 // The default interval in seconds after which to adjust the oom_score_adj |
| 65 // value. | 65 // value. |
| 66 const int kAdjustmentIntervalSeconds = 10; | 66 const int kAdjustmentIntervalSeconds = 10; |
| 67 | 67 |
| 68 // For each period of this length we record a statistic to indicate whether | 68 // For each period of this length we record a statistic to indicate whether |
| 69 // or not the user experienced a low memory event. If you change this interval | 69 // or not the user experienced a low memory event. If you change this interval |
| 70 // you must replace Tabs.Discard.DiscardInLastMinute with a new statistic. | 70 // you must replace Tabs.Discard.DiscardInLastMinute with a new statistic. |
| 71 const int kRecentTabDiscardIntervalSeconds = 60; | 71 const int kRecentTabDiscardIntervalSeconds = 60; |
| (...skipping 277 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 349 UMA_HISTOGRAM_CUSTOM_COUNTS( | 349 UMA_HISTOGRAM_CUSTOM_COUNTS( |
| 350 "Tabs.Discard.IntervalTime2", interval_ms, 100, 100000 * 1000, 50); | 350 "Tabs.Discard.IntervalTime2", interval_ms, 100, 100000 * 1000, 50); |
| 351 } | 351 } |
| 352 // Record Chrome's concept of system memory usage at the time of the discard. | 352 // Record Chrome's concept of system memory usage at the time of the discard. |
| 353 base::SystemMemoryInfoKB memory; | 353 base::SystemMemoryInfoKB memory; |
| 354 if (base::GetSystemMemoryInfo(&memory)) { | 354 if (base::GetSystemMemoryInfo(&memory)) { |
| 355 // TODO(jamescook): Remove this after R25 is deployed to stable. It does | 355 // TODO(jamescook): Remove this after R25 is deployed to stable. It does |
| 356 // not have sufficient resolution in the 2-4 GB range and does not properly | 356 // not have sufficient resolution in the 2-4 GB range and does not properly |
| 357 // account for graphics memory on ARM. Replace with MemAllocatedMB below. | 357 // account for graphics memory on ARM. Replace with MemAllocatedMB below. |
| 358 int mem_anonymous_mb = (memory.active_anon + memory.inactive_anon) / 1024; | 358 int mem_anonymous_mb = (memory.active_anon + memory.inactive_anon) / 1024; |
| 359 HISTOGRAM_MEGABYTES("Tabs.Discard.MemAnonymousMB", mem_anonymous_mb); | 359 UMA_HISTOGRAM_MEGABYTES("Tabs.Discard.MemAnonymousMB", mem_anonymous_mb); |
| 360 | 360 |
| 361 // Record graphics GEM object size in a histogram with 50 MB buckets. | 361 // Record graphics GEM object size in a histogram with 50 MB buckets. |
| 362 int mem_graphics_gem_mb = 0; | 362 int mem_graphics_gem_mb = 0; |
| 363 if (memory.gem_size != -1) | 363 if (memory.gem_size != -1) |
| 364 mem_graphics_gem_mb = memory.gem_size / 1024 / 1024; | 364 mem_graphics_gem_mb = memory.gem_size / 1024 / 1024; |
| 365 RecordLinearHistogram( | 365 RecordLinearHistogram( |
| 366 "Tabs.Discard.MemGraphicsMB", mem_graphics_gem_mb, 2500, 50); | 366 "Tabs.Discard.MemGraphicsMB", mem_graphics_gem_mb, 2500, 50); |
| 367 | 367 |
| 368 // Record shared memory (used by renderer/GPU buffers). | 368 // Record shared memory (used by renderer/GPU buffers). |
| 369 int mem_shmem_mb = memory.shmem / 1024; | 369 int mem_shmem_mb = memory.shmem / 1024; |
| 370 RecordLinearHistogram("Tabs.Discard.MemShmemMB", mem_shmem_mb, 2500, 50); | 370 RecordLinearHistogram("Tabs.Discard.MemShmemMB", mem_shmem_mb, 2500, 50); |
| 371 | 371 |
| 372 // On Intel, graphics objects are in anonymous pages, but on ARM they are | 372 // On Intel, graphics objects are in anonymous pages, but on ARM they are |
| 373 // not. For a total "allocated count" add in graphics pages on ARM. | 373 // not. For a total "allocated count" add in graphics pages on ARM. |
| 374 int mem_allocated_mb = mem_anonymous_mb; | 374 int mem_allocated_mb = mem_anonymous_mb; |
| 375 #if defined(ARCH_CPU_ARM_FAMILY) | 375 #if defined(ARCH_CPU_ARM_FAMILY) |
| 376 mem_allocated_mb += mem_graphics_gem_mb; | 376 mem_allocated_mb += mem_graphics_gem_mb; |
| 377 #endif | 377 #endif |
| 378 UMA_HISTOGRAM_CUSTOM_COUNTS( | 378 UMA_HISTOGRAM_CUSTOM_COUNTS( |
| 379 "Tabs.Discard.MemAllocatedMB", mem_allocated_mb, 256, 32768, 50); | 379 "Tabs.Discard.MemAllocatedMB", mem_allocated_mb, 256, 32768, 50); |
| 380 | 380 |
| 381 int mem_available_mb = | 381 int mem_available_mb = |
| 382 (memory.active_file + memory.inactive_file + memory.free) / 1024; | 382 (memory.active_file + memory.inactive_file + memory.free) / 1024; |
| 383 HISTOGRAM_MEGABYTES("Tabs.Discard.MemAvailableMB", mem_available_mb); | 383 UMA_HISTOGRAM_MEGABYTES("Tabs.Discard.MemAvailableMB", mem_available_mb); |
| 384 } | 384 } |
| 385 // Set up to record the next interval. | 385 // Set up to record the next interval. |
| 386 last_discard_time_ = TimeTicks::Now(); | 386 last_discard_time_ = TimeTicks::Now(); |
| 387 } | 387 } |
| 388 | 388 |
| 389 void OomPriorityManager::RecordRecentTabDiscard() { | 389 void OomPriorityManager::RecordRecentTabDiscard() { |
| 390 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 390 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
| 391 // If we change the interval we need to change the histogram name. | 391 // If we change the interval we need to change the histogram name. |
| 392 UMA_HISTOGRAM_BOOLEAN("Tabs.Discard.DiscardInLastMinute", | 392 UMA_HISTOGRAM_BOOLEAN("Tabs.Discard.DiscardInLastMinute", |
| 393 recent_tab_discard_); | 393 recent_tab_discard_); |
| (...skipping 259 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 653 if (it == pid_to_oom_score_.end() || it->second != score) { | 653 if (it == pid_to_oom_score_.end() || it->second != score) { |
| 654 content::ZygoteHost::GetInstance()->AdjustRendererOOMScore(*iterator, | 654 content::ZygoteHost::GetInstance()->AdjustRendererOOMScore(*iterator, |
| 655 score); | 655 score); |
| 656 pid_to_oom_score_[*iterator] = score; | 656 pid_to_oom_score_[*iterator] = score; |
| 657 } | 657 } |
| 658 priority += priority_increment; | 658 priority += priority_increment; |
| 659 } | 659 } |
| 660 } | 660 } |
| 661 | 661 |
| 662 } // namespace chromeos | 662 } // namespace chromeos |
| OLD | NEW |