| Index: content/browser/memory/memory_condition_observer.cc
|
| diff --git a/content/browser/memory/memory_state_updater.cc b/content/browser/memory/memory_condition_observer.cc
|
| similarity index 54%
|
| rename from content/browser/memory/memory_state_updater.cc
|
| rename to content/browser/memory/memory_condition_observer.cc
|
| index a432fb3745ae57e861d369f71856e88e37f5fbd6..8c025046ced3b1211959eb4c96285cbd25af7a60 100644
|
| --- a/content/browser/memory/memory_state_updater.cc
|
| +++ b/content/browser/memory/memory_condition_observer.cc
|
| @@ -2,7 +2,7 @@
|
| // Use of this source code is governed by a BSD-style license that can be
|
| // found in the LICENSE file.
|
|
|
| -#include "content/browser/memory/memory_state_updater.h"
|
| +#include "content/browser/memory/memory_condition_observer.h"
|
|
|
| #include "base/metrics/histogram_macros.h"
|
| #include "base/strings/string_number_conversions.h"
|
| @@ -19,16 +19,15 @@ namespace {
|
| const int kDefaultExpectedRendererSizeMB = 40;
|
| #elif defined(OS_WIN)
|
| const int kDefaultExpectedRendererSizeMB = 70;
|
| -#else // Mac, Linux, and ChromeOS
|
| +#else // Mac, Linux, and ChromeOS
|
| const int kDefaultExpectedRendererSizeMB = 120;
|
| #endif
|
|
|
| // Default values for parameters to determine the global state.
|
| -const int kDefaultNewRenderersUntilThrottled = 4;
|
| -const int kDefaultNewRenderersUntilSuspended = 2;
|
| +const int kDefaultNewRenderersUntilWarning = 4;
|
| +const int kDefaultNewRenderersUntilCritical = 2;
|
| const int kDefaultNewRenderersBackToNormal = 5;
|
| -const int kDefaultNewRenderersBackToThrottled = 3;
|
| -const int kDefaultMinimumTransitionPeriodSeconds = 30;
|
| +const int kDefaultNewRenderersBackToWarning = 3;
|
| const int kDefaultMonitoringIntervalSeconds = 5;
|
|
|
| void SetIntVariationParameter(const std::map<std::string, std::string> params,
|
| @@ -60,7 +59,7 @@ void SetSecondsVariationParameter(
|
|
|
| } // namespace
|
|
|
| -MemoryStateUpdater::MemoryStateUpdater(
|
| +MemoryConditionObserver::MemoryConditionObserver(
|
| MemoryCoordinatorImpl* coordinator,
|
| scoped_refptr<base::SingleThreadTaskRunner> task_runner)
|
| : coordinator_(coordinator), task_runner_(task_runner) {
|
| @@ -69,11 +68,16 @@ MemoryStateUpdater::MemoryStateUpdater(
|
| DCHECK(ValidateParameters());
|
| }
|
|
|
| -MemoryStateUpdater::~MemoryStateUpdater() {}
|
| +MemoryConditionObserver::~MemoryConditionObserver() {}
|
|
|
| -base::MemoryState MemoryStateUpdater::CalculateNextState() {
|
| - using MemoryState = base::MemoryState;
|
| +void MemoryConditionObserver::ScheduleUpdateCondition(base::TimeDelta delta) {
|
| + update_condition_closure_.Reset(base::Bind(
|
| + &MemoryConditionObserver::UpdateCondition, base::Unretained(this)));
|
| + task_runner_->PostDelayedTask(FROM_HERE, update_condition_closure_.callback(),
|
| + delta);
|
| +}
|
|
|
| +MemoryCondition MemoryConditionObserver::CalculateNextCondition() {
|
| int available =
|
| coordinator_->memory_monitor()->GetFreeMemoryUntilCriticalMB();
|
|
|
| @@ -83,63 +87,47 @@ base::MemoryState MemoryStateUpdater::CalculateNextState() {
|
| available);
|
|
|
| if (available <= 0)
|
| - return MemoryState::SUSPENDED;
|
| + return MemoryCondition::CRITICAL;
|
|
|
| - auto current_state = coordinator_->GetGlobalMemoryState();
|
| + auto current = coordinator_->GetMemoryCondition();
|
| int expected_renderer_count = available / expected_renderer_size_;
|
|
|
| - switch (current_state) {
|
| - case MemoryState::NORMAL:
|
| - if (expected_renderer_count <= new_renderers_until_suspended_)
|
| - return MemoryState::SUSPENDED;
|
| - if (expected_renderer_count <= new_renderers_until_throttled_)
|
| - return MemoryState::THROTTLED;
|
| - return MemoryState::NORMAL;
|
| - case MemoryState::THROTTLED:
|
| - if (expected_renderer_count <= new_renderers_until_suspended_)
|
| - return MemoryState::SUSPENDED;
|
| + switch (current) {
|
| + case MemoryCondition::NORMAL:
|
| + if (expected_renderer_count <= new_renderers_until_critical_)
|
| + return MemoryCondition::CRITICAL;
|
| + if (expected_renderer_count <= new_renderers_until_warning_)
|
| + return MemoryCondition::WARNING;
|
| + return MemoryCondition::NORMAL;
|
| + case MemoryCondition::WARNING:
|
| + if (expected_renderer_count <= new_renderers_until_critical_)
|
| + return MemoryCondition::CRITICAL;
|
| if (expected_renderer_count >= new_renderers_back_to_normal_)
|
| - return MemoryState::NORMAL;
|
| - return MemoryState::THROTTLED;
|
| - case MemoryState::SUSPENDED:
|
| + return MemoryCondition::NORMAL;
|
| + return MemoryCondition::WARNING;
|
| + case MemoryCondition::CRITICAL:
|
| if (expected_renderer_count >= new_renderers_back_to_normal_)
|
| - return MemoryState::NORMAL;
|
| - if (expected_renderer_count >= new_renderers_back_to_throttled_)
|
| - return MemoryState::THROTTLED;
|
| - return MemoryState::SUSPENDED;
|
| - case MemoryState::UNKNOWN:
|
| - // Fall through
|
| - default:
|
| - NOTREACHED();
|
| - return MemoryState::UNKNOWN;
|
| - }
|
| -}
|
| -
|
| -void MemoryStateUpdater::UpdateState() {
|
| - auto current_state = coordinator_->GetGlobalMemoryState();
|
| - auto next_state = CalculateNextState();
|
| - if (coordinator_->ChangeStateIfNeeded(current_state, next_state)) {
|
| - ScheduleUpdateState(minimum_transition_period_);
|
| - } else {
|
| - ScheduleUpdateState(monitoring_interval_);
|
| + return MemoryCondition::NORMAL;
|
| + if (expected_renderer_count >= new_renderers_back_to_warning_)
|
| + return MemoryCondition::WARNING;
|
| + return MemoryCondition::CRITICAL;
|
| }
|
| + NOTREACHED();
|
| + return MemoryCondition::NORMAL;
|
| }
|
|
|
| -void MemoryStateUpdater::ScheduleUpdateState(base::TimeDelta delta) {
|
| - update_state_closure_.Reset(base::Bind(&MemoryStateUpdater::UpdateState,
|
| - base::Unretained(this)));
|
| - task_runner_->PostDelayedTask(FROM_HERE, update_state_closure_.callback(),
|
| - delta);
|
| +void MemoryConditionObserver::UpdateCondition() {
|
| + auto next_condition = CalculateNextCondition();
|
| + coordinator_->UpdateConditionIfNeeded(next_condition);
|
| + ScheduleUpdateCondition(monitoring_interval_);
|
| }
|
|
|
| -void MemoryStateUpdater::InitializeParameters() {
|
| +void MemoryConditionObserver::InitializeParameters() {
|
| expected_renderer_size_ = kDefaultExpectedRendererSizeMB;
|
| - new_renderers_until_throttled_ = kDefaultNewRenderersUntilThrottled;
|
| - new_renderers_until_suspended_ = kDefaultNewRenderersUntilSuspended;
|
| + new_renderers_until_warning_ = kDefaultNewRenderersUntilWarning;
|
| + new_renderers_until_critical_ = kDefaultNewRenderersUntilCritical;
|
| new_renderers_back_to_normal_ = kDefaultNewRenderersBackToNormal;
|
| - new_renderers_back_to_throttled_ = kDefaultNewRenderersBackToThrottled;
|
| - minimum_transition_period_ =
|
| - base::TimeDelta::FromSeconds(kDefaultMinimumTransitionPeriodSeconds);
|
| + new_renderers_back_to_warning_ = kDefaultNewRenderersBackToWarning;
|
| monitoring_interval_ =
|
| base::TimeDelta::FromSeconds(kDefaultMonitoringIntervalSeconds);
|
|
|
| @@ -153,30 +141,28 @@ void MemoryStateUpdater::InitializeParameters() {
|
| SetIntVariationParameter(params, "expected_renderer_size",
|
| &expected_renderer_size_);
|
| SetIntVariationParameter(params, "new_renderers_until_throttled",
|
| - &new_renderers_until_throttled_);
|
| + &new_renderers_until_warning_);
|
| SetIntVariationParameter(params, "new_renderers_until_warning",
|
| - &new_renderers_until_throttled_);
|
| + &new_renderers_until_warning_);
|
| SetIntVariationParameter(params, "new_renderers_until_suspended",
|
| - &new_renderers_until_suspended_);
|
| + &new_renderers_until_critical_);
|
| SetIntVariationParameter(params, "new_renderers_until_critical",
|
| - &new_renderers_until_suspended_);
|
| + &new_renderers_until_critical_);
|
| SetIntVariationParameter(params, "new_renderers_back_to_normal",
|
| &new_renderers_back_to_normal_);
|
| SetIntVariationParameter(params, "new_renderers_back_to_throttled",
|
| - &new_renderers_back_to_throttled_);
|
| + &new_renderers_back_to_warning_);
|
| SetIntVariationParameter(params, "new_renderers_back_to_warning",
|
| - &new_renderers_back_to_throttled_);
|
| - SetSecondsVariationParameter(params, "minimum_transition_period",
|
| - &minimum_transition_period_);
|
| + &new_renderers_back_to_warning_);
|
| SetSecondsVariationParameter(params, "monitoring_interval",
|
| &monitoring_interval_);
|
| }
|
|
|
| -bool MemoryStateUpdater::ValidateParameters() {
|
| - return (new_renderers_until_throttled_ > new_renderers_until_suspended_) &&
|
| - (new_renderers_back_to_normal_ > new_renderers_back_to_throttled_) &&
|
| - (new_renderers_back_to_normal_ > new_renderers_until_throttled_) &&
|
| - (new_renderers_back_to_throttled_ > new_renderers_until_suspended_);
|
| +bool MemoryConditionObserver::ValidateParameters() {
|
| + return (new_renderers_until_warning_ > new_renderers_until_critical_) &&
|
| + (new_renderers_back_to_normal_ > new_renderers_back_to_warning_) &&
|
| + (new_renderers_back_to_normal_ > new_renderers_until_warning_) &&
|
| + (new_renderers_back_to_warning_ > new_renderers_until_critical_);
|
| }
|
|
|
| } // namespace content
|
|
|