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

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

Issue 2388933003: Make ResourceReporter a client of memory coordinator (Closed)
Patch Set: (rebasing) 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
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 30d3041fa8945618ea9cbd2d5fca6a65acc9c8ea..ee7ea67d13c8a7ef9f28bee056ba4e713f0ed186 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/memory_pressure_monitor.h"
#include "base/memory/ptr_util.h"
#include "base/rand_util.h"
@@ -218,7 +219,9 @@ ResourceReporter::ResourceReporter()
last_gpu_process_cpu_(0.0),
last_browser_process_memory_(0),
last_gpu_process_memory_(0),
- is_monitoring_(false) {}
+ is_monitoring_(false) {
+ base::MemoryCoordinatorClientRegistry::GetInstance()->Register(this);
afakhry 2016/10/18 16:20:20 I believe this line belongs to StartMonitoring().
hajimehoshi 2016/10/25 07:39:42 Done.
+}
// static
std::unique_ptr<rappor::Sample> ResourceReporter::CreateRapporSample(
@@ -391,35 +394,61 @@ void ResourceReporter::OnMemoryPressure(
MemoryPressureLevel memory_pressure_level) {
if (memory_pressure_level ==
MemoryPressureLevel::MEMORY_PRESSURE_LEVEL_CRITICAL) {
- // If we are already listening to the task manager, then we're waiting for
- // a refresh event.
- if (observed_task_manager())
+ StartRecordingCurrentState();
+ } else {
+ StopRecordingCurrentState();
+ }
+}
+
+void ResourceReporter::StartRecordingCurrentState() {
+ // If we are already listening to the task manager, then we're waiting for
+ // a refresh event.
+ if (observed_task_manager())
+ 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 (g_browser_process->local_state()) {
+ const base::Time now = base::Time::NowFromSystemTime();
+ const base::Time last_rappor_report_time = base::Time::FromDoubleT(
+ g_browser_process->local_state()->GetDouble(kLastRapporReportTimeKey));
+ const base::TimeDelta delta_since_last_report =
+ now >= last_rappor_report_time ? now - last_rappor_report_time
+ : base::TimeDelta::Max();
+
+ if (delta_since_last_report < kMinimumTimeBetweenReports)
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 (g_browser_process->local_state()) {
- const base::Time now = base::Time::NowFromSystemTime();
- const base::Time last_rappor_report_time =
- base::Time::FromDoubleT(g_browser_process->local_state()->GetDouble(
- kLastRapporReportTimeKey));
- const base::TimeDelta delta_since_last_report =
- now >= last_rappor_report_time ? now - last_rappor_report_time
- : base::TimeDelta::Max();
-
- if (delta_since_last_report < kMinimumTimeBetweenReports)
- return;
- }
+ // Start listening to the task manager and wait for the first refresh event
+ // with background calculations completion.
+ task_manager_to_observe_->AddObserver(this);
+}
- // Start listening to the task manager and wait for the first refresh event
- // with background calculations completion.
- task_manager_to_observe_->AddObserver(this);
- } else {
- // If we are still listening to the task manager from an earlier critical
- // memory pressure level, we need to stop listening to it.
- if (observed_task_manager())
- observed_task_manager()->RemoveObserver(this);
+void ResourceReporter::StopRecordingCurrentState() {
+ // If we are still listening to the task manager from an earlier critical
+ // memory pressure level, we need to stop listening to it.
+ if (observed_task_manager())
+ observed_task_manager()->RemoveObserver(this);
+}
+
+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
afakhry 2016/10/18 16:20:20 I don't understand this comment. The ResourceRepor
haraken 2016/10/18 18:52:20 You're correct. ResourceReporter is used only for
hajimehoshi 2016/10/25 07:39:42 Hmm, so this doesn't match with MemoryCoordinator'
hajimehoshi 2016/10/26 07:42:36 On second thought, this starting/stopping recordin
chrisha 2016/10/26 21:32:43 Yeah, this seems like a reasonable use to me, to g
+ // present.
+ switch (state) {
+ case base::MemoryState::NORMAL:
+ StopRecordingCurrentState();
+ break;
+ case base::MemoryState::THROTTLED:
+ StartRecordingCurrentState();
+ break;
+ case base::MemoryState::SUSPENDED:
+ // Note: Not supported at present. Fall through.
+ case base::MemoryState::UNKNOWN:
+ NOTREACHED();
afakhry 2016/10/18 16:20:20 What effect does this NOTREACHED() have on Chrome
hajimehoshi 2016/10/25 07:39:42 Right, SUSPENDED and UNKNOWN never come to this co
+ break;
}
}

Powered by Google App Engine
This is Rietveld 408576698