#include "ash/display/display_performance_mode_controller.h"
namespace ash {
using ModeState = DisplayPerformanceModeController::ModeState;
DisplayPerformanceModeController::DisplayPerformanceModeController()
: power_status_(PowerStatus::Get()->GetWeakPtr()) {
power_status_->AddObserver(this);
}
DisplayPerformanceModeController::~DisplayPerformanceModeController() {
if (power_status_) {
power_status_->RemoveObserver(this);
}
}
ModeState DisplayPerformanceModeController::AddObserver(Observer* observer) {
observers_.AddObserver(observer);
return current_state_;
}
void DisplayPerformanceModeController::RemoveObserver(Observer* observer) {
observers_.RemoveObserver(observer);
}
void DisplayPerformanceModeController::OnPowerStatusChanged() {
UpdateCurrentStateAndNotifyIfChanged();
}
void DisplayPerformanceModeController::SetHighPerformanceModeByUser(
bool is_high_performance_enabled) {
is_high_performance_enabled_ = is_high_performance_enabled;
UpdateCurrentStateAndNotifyIfChanged();
}
void DisplayPerformanceModeController::UpdateCurrentStateAndNotifyIfChanged() {
ModeState new_state = ModeState::kIntelligent;
if (is_high_performance_enabled_) {
new_state = ModeState::kHighPerformance;
} else if (PowerStatus::Get()->IsBatterySaverActive()) {
new_state = ModeState::kPowerSaver;
}
if (new_state != current_state_) {
current_state_ = new_state;
NotifyObservers();
}
}
void DisplayPerformanceModeController::NotifyObservers() {
for (Observer& observer : observers_) {
observer.OnDisplayPerformanceModeChanged(current_state_);
}
}
}