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

Unified Diff: chrome/browser/chromeos/resource_reporter/resource_reporter.cc

Issue 2388933003: Make ResourceReporter a client of memory coordinator (Closed)
Patch Set: Created 4 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « chrome/browser/chromeos/resource_reporter/resource_reporter.h ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/browser/chromeos/resource_reporter/resource_reporter.cc
diff --git a/chrome/browser/chromeos/resource_reporter/resource_reporter.cc b/chrome/browser/chromeos/resource_reporter/resource_reporter.cc
index 0266e488f83e0217f31d50990bec68312256ab5e..1becaa3c5fc7cff142e6aeaa099d3a2714d1c807 100644
--- a/chrome/browser/chromeos/resource_reporter/resource_reporter.cc
+++ b/chrome/browser/chromeos/resource_reporter/resource_reporter.cc
@@ -9,6 +9,7 @@
#include <utility>
#include "base/bind.h"
+#include "base/memory/memory_coordinator_client_registry.h"
#include "base/memory/ptr_util.h"
#include "base/rand_util.h"
#include "base/strings/utf_string_conversions.h"
@@ -247,7 +248,9 @@ ResourceReporter::ResourceReporter()
task_manager::REFRESH_TYPE_CPU |
task_manager::REFRESH_TYPE_MEMORY |
task_manager::REFRESH_TYPE_PRIORITY),
- system_cpu_cores_range_(GetCurrentSystemCpuCoresRange()) {}
+ system_cpu_cores_range_(GetCurrentSystemCpuCoresRange()) {
+ base::MemoryCoordinatorClientRegistry::GetInstance()->Register(this);
+}
// static
std::unique_ptr<rappor::Sample> ResourceReporter::CreateRapporSample(
@@ -356,73 +359,98 @@ ResourceReporter::SampleTaskByMemory() const {
void ResourceReporter::OnMemoryPressure(
MemoryPressureLevel memory_pressure_level) {
- if (have_seen_first_task_manager_refresh_ &&
- memory_pressure_level ==
+ if (memory_pressure_level ==
MemoryPressureLevel::MEMORY_PRESSURE_LEVEL_CRITICAL) {
- // Report browser and GPU processes usage using UMA histograms.
- UMA_HISTOGRAM_ENUMERATION(
- "ResourceReporter.BrowserProcess.CpuUsage",
- GET_ENUM_VAL(GetCpuUsageRange(last_browser_process_cpu_)),
- GET_ENUM_VAL(CpuUsageRange::NUM_RANGES));
- UMA_HISTOGRAM_ENUMERATION(
- "ResourceReporter.BrowserProcess.MemoryUsage",
- GET_ENUM_VAL(GetMemoryUsageRange(last_browser_process_memory_)),
- GET_ENUM_VAL(MemoryUsageRange::NUM_RANGES));
- UMA_HISTOGRAM_ENUMERATION(
- "ResourceReporter.GpuProcess.CpuUsage",
- GET_ENUM_VAL(GetCpuUsageRange(last_gpu_process_cpu_)),
- GET_ENUM_VAL(CpuUsageRange::NUM_RANGES));
- UMA_HISTOGRAM_ENUMERATION(
- "ResourceReporter.GpuProcess.MemoryUsage",
- GET_ENUM_VAL(GetMemoryUsageRange(last_gpu_process_memory_)),
- GET_ENUM_VAL(MemoryUsageRange::NUM_RANGES));
+ RecordCurrentState();
+ }
+}
- // For the rest of tasks, report them using Rappor.
- auto* rappor_service = g_browser_process->rappor_service();
- if (!rappor_service)
- return;
-
- // We only record Rappor samples only if it's the first ever critical memory
- // pressure event we receive, or it has been more than
- // |kMinimumTimeBetweenReportsInMs| since the last time we recorded samples.
- if (!have_seen_first_memory_pressure_event_) {
- have_seen_first_memory_pressure_event_ = true;
- } else if ((base::TimeTicks::Now() - last_memory_pressure_event_time_) <
- base::TimeDelta::FromMilliseconds(kMinimumTimeBetweenReportsInMs)) {
- return;
- }
+void ResourceReporter::OnMemoryStateChange(base::MemoryState state) {
+ // TODO(hajimehoshi): Adjust the size of this memory usage according to
+ // |state|. ResourceReporter doesn't have a feature to limit memory usage at
+ // present.
+ switch (state) {
+ case base::MemoryState::NORMAL:
+ break;
+ case base::MemoryState::THROTTLED:
+ RecordCurrentState();
bashi 2016/10/04 10:12:20 If I remember the thread we've discussed this migr
hajimehoshi 2016/10/18 10:13:45 The situation has been changed by https://coderevi
+ break;
+ case base::MemoryState::SUSPENDED:
+ // Note: Not supported at present. Fall through.
+ case base::MemoryState::UNKNOWN:
+ NOTREACHED();
+ break;
+ }
+}
- last_memory_pressure_event_time_ = base::TimeTicks::Now();
-
- // Use weighted random sampling to select a task to report in the CPU
- // metric.
- const TaskRecord* sampled_cpu_task = SampleTaskByCpu();
- if (sampled_cpu_task) {
- std::unique_ptr<rappor::Sample> cpu_sample(
- CreateRapporSample(rappor_service, *sampled_cpu_task));
- cpu_sample->SetFlagsField(kRapporNumCoresRangeFlagsField,
- GET_ENUM_VAL(system_cpu_cores_range_),
- GET_ENUM_VAL(CpuCoresNumberRange::NUM_RANGES));
- cpu_sample->SetFlagsField(
- kRapporUsageRangeFlagsField,
- GET_ENUM_VAL(GetCpuUsageRange(sampled_cpu_task->cpu_percent)),
- GET_ENUM_VAL(CpuUsageRange::NUM_RANGES));
- rappor_service->RecordSampleObj(kCpuRapporMetric, std::move(cpu_sample));
- }
+void ResourceReporter::RecordCurrentState() {
+ if (!have_seen_first_task_manager_refresh_)
+ return;
- // Use weighted random sampling to select a task to report in the memory
- // metric.
- const TaskRecord* sampled_memory_task = SampleTaskByMemory();
- if (sampled_memory_task) {
- std::unique_ptr<rappor::Sample> memory_sample(
- CreateRapporSample(rappor_service, *sampled_memory_task));
- memory_sample->SetFlagsField(
- kRapporUsageRangeFlagsField,
- GET_ENUM_VAL(GetMemoryUsageRange(sampled_memory_task->memory_bytes)),
- GET_ENUM_VAL(MemoryUsageRange::NUM_RANGES));
- rappor_service->RecordSampleObj(kMemoryRapporMetric,
- std::move(memory_sample));
- }
+ // Report browser and GPU processes usage using UMA histograms.
+ UMA_HISTOGRAM_ENUMERATION(
+ "ResourceReporter.BrowserProcess.CpuUsage",
+ GET_ENUM_VAL(GetCpuUsageRange(last_browser_process_cpu_)),
+ GET_ENUM_VAL(CpuUsageRange::NUM_RANGES));
+ UMA_HISTOGRAM_ENUMERATION(
+ "ResourceReporter.BrowserProcess.MemoryUsage",
+ GET_ENUM_VAL(GetMemoryUsageRange(last_browser_process_memory_)),
+ GET_ENUM_VAL(MemoryUsageRange::NUM_RANGES));
+ UMA_HISTOGRAM_ENUMERATION(
+ "ResourceReporter.GpuProcess.CpuUsage",
+ GET_ENUM_VAL(GetCpuUsageRange(last_gpu_process_cpu_)),
+ GET_ENUM_VAL(CpuUsageRange::NUM_RANGES));
+ UMA_HISTOGRAM_ENUMERATION(
+ "ResourceReporter.GpuProcess.MemoryUsage",
+ GET_ENUM_VAL(GetMemoryUsageRange(last_gpu_process_memory_)),
+ GET_ENUM_VAL(MemoryUsageRange::NUM_RANGES));
+
+ // For the rest of tasks, report them using Rappor.
+ auto* rappor_service = g_browser_process->rappor_service();
+ if (!rappor_service)
+ return;
+
+ // We only record Rappor samples only if it's the first ever critical memory
+ // pressure event we receive, or it has been more than
+ // |kMinimumTimeBetweenReportsInMs| since the last time we recorded samples.
+ if (!have_seen_first_memory_pressure_event_) {
+ have_seen_first_memory_pressure_event_ = true;
+ } else if ((base::TimeTicks::Now() - last_memory_pressure_event_time_) <
+ base::TimeDelta::FromMilliseconds(
+ kMinimumTimeBetweenReportsInMs)) {
+ return;
+ }
+
+ last_memory_pressure_event_time_ = base::TimeTicks::Now();
+
+ // Use weighted random sampling to select a task to report in the CPU
+ // metric.
+ const TaskRecord* sampled_cpu_task = SampleTaskByCpu();
+ if (sampled_cpu_task) {
+ std::unique_ptr<rappor::Sample> cpu_sample(
+ CreateRapporSample(rappor_service, *sampled_cpu_task));
+ cpu_sample->SetFlagsField(kRapporNumCoresRangeFlagsField,
+ GET_ENUM_VAL(system_cpu_cores_range_),
+ GET_ENUM_VAL(CpuCoresNumberRange::NUM_RANGES));
+ cpu_sample->SetFlagsField(
+ kRapporUsageRangeFlagsField,
+ GET_ENUM_VAL(GetCpuUsageRange(sampled_cpu_task->cpu_percent)),
+ GET_ENUM_VAL(CpuUsageRange::NUM_RANGES));
+ rappor_service->RecordSampleObj(kCpuRapporMetric, std::move(cpu_sample));
+ }
+
+ // Use weighted random sampling to select a task to report in the memory
+ // metric.
+ const TaskRecord* sampled_memory_task = SampleTaskByMemory();
+ if (sampled_memory_task) {
+ std::unique_ptr<rappor::Sample> memory_sample(
+ CreateRapporSample(rappor_service, *sampled_memory_task));
+ memory_sample->SetFlagsField(
+ kRapporUsageRangeFlagsField,
+ GET_ENUM_VAL(GetMemoryUsageRange(sampled_memory_task->memory_bytes)),
+ GET_ENUM_VAL(MemoryUsageRange::NUM_RANGES));
+ rappor_service->RecordSampleObj(kMemoryRapporMetric,
+ std::move(memory_sample));
}
}
« no previous file with comments | « chrome/browser/chromeos/resource_reporter/resource_reporter.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698