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

Unified Diff: content/browser/memory/memory_condition_observer.cc

Issue 2731913002: NotForReview: Expose the global memory budget (chromium side)
Patch Set: Add --simulate-memory-pressure Created 3 years, 9 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: content/browser/memory/memory_condition_observer.cc
diff --git a/content/browser/memory/memory_condition_observer.cc b/content/browser/memory/memory_condition_observer.cc
index d429f077ab6f37644bb1854f29a9ad84a7d5bc74..026438c0e976bd26e5c92ae943646a9efc10fa42 100644
--- a/content/browser/memory/memory_condition_observer.cc
+++ b/content/browser/memory/memory_condition_observer.cc
@@ -62,37 +62,37 @@ void SetSecondsVariationParameter(
MemoryConditionObserver::MemoryConditionObserver(
MemoryCoordinatorImpl* coordinator,
scoped_refptr<base::SingleThreadTaskRunner> task_runner)
- : coordinator_(coordinator), task_runner_(task_runner) {
+ : coordinator_(coordinator),
+ task_runner_(task_runner),
+ current_available_(0) {
DCHECK(coordinator_);
InitializeParameters();
DCHECK(ValidateParameters());
+ update_condition_closure_.Reset(base::Bind(
+ &MemoryConditionObserver::UpdateCondition, base::Unretained(this)));
}
MemoryConditionObserver::~MemoryConditionObserver() {}
-void MemoryConditionObserver::ScheduleUpdateCondition(base::TimeDelta delta) {
- update_condition_closure_.Reset(base::Bind(
- &MemoryConditionObserver::UpdateCondition, base::Unretained(this)));
+void MemoryConditionObserver::ScheduleUpdateCondition(
+ base::TimeDelta interval) {
+ if (!interval.is_zero() && interval != monitoring_interval_) {
+ monitoring_interval_ = interval;
+ update_condition_closure_.Reset(base::Bind(
+ &MemoryConditionObserver::UpdateCondition, base::Unretained(this)));
+ }
task_runner_->PostDelayedTask(FROM_HERE, update_condition_closure_.callback(),
- delta);
+ interval);
}
MemoryCondition MemoryConditionObserver::CalculateNextCondition() {
- int available =
- coordinator_->memory_monitor()->GetFreeMemoryUntilCriticalMB();
-
- // TODO(chrisha): Move this histogram recording to a better place when
- // https://codereview.chromium.org/2479673002/ is landed.
- UMA_HISTOGRAM_MEMORY_LARGE_MB("Memory.Coordinator.FreeMemoryUntilCritical",
- available);
-
- if (available <= 0)
+ if (current_available_ <= 0)
return MemoryCondition::CRITICAL;
- auto current = coordinator_->GetMemoryCondition();
- int expected_renderer_count = available / expected_renderer_size_;
+ auto current_condition = coordinator_->GetMemoryCondition();
+ int expected_renderer_count = current_available_ / expected_renderer_size_;
- switch (current) {
+ switch (current_condition) {
case MemoryCondition::NORMAL:
if (expected_renderer_count <= new_renderers_until_critical_)
return MemoryCondition::CRITICAL;
@@ -117,7 +117,13 @@ MemoryCondition MemoryConditionObserver::CalculateNextCondition() {
}
void MemoryConditionObserver::UpdateCondition() {
+ int available =
+ coordinator_->memory_monitor()->GetFreeMemoryUntilCriticalMB();
+ UMA_HISTOGRAM_MEMORY_LARGE_MB("Memory.Coordinator.FreeMemoryUntilCritical",
+ available);
+ current_available_ = std::min(available, max_available_);
auto next_condition = CalculateNextCondition();
+ coordinator_->UpdateGlobalBudget(current_available_);
coordinator_->UpdateConditionIfNeeded(next_condition);
ScheduleUpdateCondition(monitoring_interval_);
}
@@ -147,6 +153,17 @@ void MemoryConditionObserver::InitializeParameters() {
&new_renderers_back_to_warning_);
SetSecondsVariationParameter(params, "monitoring_interval",
&monitoring_interval_);
+
+ const std::string simulate_option =
+ base::CommandLine::ForCurrentProcess()->GetSwitchValueASCII(
+ "simulate-memory-pressure");
+ if (simulate_option == "warning") {
+ max_available_ = expected_renderer_size_ * new_renderers_until_warning_;
+ } else if (simulate_option == "critical") {
+ max_available_ = expected_renderer_size_ * new_renderers_until_critical_;
+ } else {
+ max_available_ = INT_MAX;
+ }
}
bool MemoryConditionObserver::ValidateParameters() {
« no previous file with comments | « content/browser/memory/memory_condition_observer.h ('k') | content/browser/memory/memory_coordinator_impl.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698