Skip to content

Commit

Permalink
VariableRefreshRateController: Observe PowerStatus
Browse files Browse the repository at this point in the history
PowerStatus is a more appropriate level of abstraction for
VariableRefreshRateController to listen to, per OWNERS feedback.

BUG=b:295365782

Change-Id: I8d4a71571aff00110b5d7293a0b8d1c0c185b47b
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/4948110
Reviewed-by: Mitsuru Oshima <oshima@chromium.org>
Commit-Queue: Drew Davenport <ddavenport@chromium.org>
Cr-Commit-Position: refs/heads/main@{#1211308}
  • Loading branch information
ddavenport-chromium authored and Chromium LUCI CQ committed Oct 18, 2023
1 parent 5d09144 commit 56eaae2
Show file tree
Hide file tree
Showing 3 changed files with 16 additions and 24 deletions.
14 changes: 6 additions & 8 deletions chrome/browser/ash/display/variable_refresh_rate_controller.cc
Original file line number Diff line number Diff line change
Expand Up @@ -4,25 +4,22 @@

#include "chrome/browser/ash/display/variable_refresh_rate_controller.h"

#include "chromeos/dbus/power_manager/battery_saver.pb.h"
#include "ui/base/ui_base_features.h"

namespace ash {

VariableRefreshRateController::VariableRefreshRateController(
display::DisplayConfigurator* display_configurator,
chromeos::PowerManagerClient* power_manager_client,
PowerStatus* power_status,
game_mode::GameModeController* game_mode_controller)
: display_configurator_(display_configurator) {
battery_saver_mode_observer_.Observe(power_manager_client);
: display_configurator_(display_configurator), power_status_(power_status) {
power_status_observer_.Observe(power_status);
game_mode_observer_.Observe(game_mode_controller);
}

VariableRefreshRateController::~VariableRefreshRateController() = default;

void VariableRefreshRateController::BatterySaverModeStateChanged(
const power_manager::BatterySaverModeState& state) {
battery_saver_mode_enabled_ = state.has_enabled() && state.enabled();
void VariableRefreshRateController::OnPowerStatusChanged() {
RefreshState();
}

Expand All @@ -32,10 +29,11 @@ void VariableRefreshRateController::OnSetGameMode(GameMode game_mode) {
}

void VariableRefreshRateController::RefreshState() {
const bool battery_saver_mode_enabled = power_status_->IsBatterySaverActive();
display_configurator_->SetVrrEnabled(
::features::IsVariableRefreshRateAlwaysOn() ||
(::features::IsVariableRefreshRateEnabled() &&
!battery_saver_mode_enabled_ && game_mode_ == GameMode::BOREALIS));
!battery_saver_mode_enabled && game_mode_ == GameMode::BOREALIS));
}

} // namespace ash
22 changes: 8 additions & 14 deletions chrome/browser/ash/display/variable_refresh_rate_controller.h
Original file line number Diff line number Diff line change
Expand Up @@ -5,15 +5,11 @@
#ifndef CHROME_BROWSER_ASH_DISPLAY_VARIABLE_REFRESH_RATE_CONTROLLER_H_
#define CHROME_BROWSER_ASH_DISPLAY_VARIABLE_REFRESH_RATE_CONTROLLER_H_

#include "ash/system/power/power_status.h"
#include "base/scoped_observation.h"
#include "chrome/browser/ash/game_mode/game_mode_controller.h"
#include "chromeos/dbus/power/power_manager_client.h"
#include "ui/display/manager/display_configurator.h"

namespace power_manager {
class BatterySaverModeState;
} // namespace power_manager

namespace ash {

namespace {
Expand All @@ -25,12 +21,12 @@ using GameMode = ash::ResourcedClient::GameMode;
// is meant to be enabled as long as Borealis game mode is active, except when
// battery saver mode is also active.
class VariableRefreshRateController
: public chromeos::PowerManagerClient::Observer,
: public PowerStatus::Observer,
public game_mode::GameModeController::Observer {
public:
VariableRefreshRateController(
display::DisplayConfigurator* display_configurator,
chromeos::PowerManagerClient* power_status,
PowerStatus* power_status,
game_mode::GameModeController* game_mode_controller);

VariableRefreshRateController(const VariableRefreshRateController&) = delete;
Expand All @@ -39,25 +35,23 @@ class VariableRefreshRateController

~VariableRefreshRateController() override;

// PowerManagerClient::Observer implementation.
void BatterySaverModeStateChanged(
const power_manager::BatterySaverModeState& state) override;
// PowerStatus::Observer:
void OnPowerStatusChanged() override;

// GameModeController::Observer implementation.
void OnSetGameMode(GameMode game_mode) override;

private:
void RefreshState();

bool battery_saver_mode_enabled_ = false;
GameMode game_mode_ = GameMode::OFF;

// Not owned.
raw_ptr<display::DisplayConfigurator> display_configurator_;
const raw_ptr<PowerStatus, ExperimentalAsh> power_status_;

base::ScopedObservation<chromeos::PowerManagerClient,
chromeos::PowerManagerClient::Observer>
battery_saver_mode_observer_{this};
base::ScopedObservation<ash::PowerStatus, ash::PowerStatus::Observer>
power_status_observer_{this};
base::ScopedObservation<game_mode::GameModeController,
game_mode::GameModeController::Observer>
game_mode_observer_{this};
Expand Down
4 changes: 2 additions & 2 deletions chrome/browser/ui/ash/chrome_browser_main_extra_parts_ash.cc
Original file line number Diff line number Diff line change
Expand Up @@ -345,8 +345,8 @@ void ChromeBrowserMainExtraPartsAsh::PostProfileInit(Profile* profile,
game_mode_controller_ = std::make_unique<game_mode::GameModeController>();
variable_refresh_rate_controller_ =
std::make_unique<ash::VariableRefreshRateController>(
ash::Shell::Get()->display_configurator(),
chromeos::PowerManagerClient::Get(), game_mode_controller_.get());
ash::Shell::Get()->display_configurator(), ash::PowerStatus::Get(),
game_mode_controller_.get());

// Initialize TabScrubberChromeOS after the Ash Shell has been initialized.
TabScrubberChromeOS::GetInstance();
Expand Down

0 comments on commit 56eaae2

Please sign in to comment.