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

Unified Diff: ash/display/display_configuration_controller.cc

Issue 2910413002: cros: Do not cache |root_window| in ScreenRotationAnimator. (Closed)
Patch Set: Tie ScreenRotationAnimator to |root_window|. Created 3 years, 7 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: ash/display/display_configuration_controller.cc
diff --git a/ash/display/display_configuration_controller.cc b/ash/display/display_configuration_controller.cc
index 013b9bc785f048f396274e910c52a09bf82bb401..454fd2d9ac7b4d5a176363a7d8a5f8fdc644cab7 100644
--- a/ash/display/display_configuration_controller.cc
+++ b/ash/display/display_configuration_controller.cc
@@ -7,14 +7,19 @@
#include "ash/display/display_animator.h"
#include "ash/display/display_animator_chromeos.h"
#include "ash/display/display_util.h"
+#include "ash/display/window_tree_host_manager.h"
#include "ash/rotator/screen_rotation_animator.h"
+#include "ash/shell.h"
#include "ash/strings/grit/ash_strings.h"
#include "base/time/time.h"
#include "chromeos/system/devicemode.h"
+#include "ui/base/class_property.h"
#include "ui/base/l10n/l10n_util.h"
#include "ui/display/display_layout.h"
#include "ui/display/manager/display_manager.h"
+DECLARE_UI_CLASS_PROPERTY_TYPE(ash::ScreenRotationAnimator*);
+
namespace {
// Specifies how long the display change should have been disabled
@@ -27,6 +32,18 @@ const int64_t kAfterDisplayChangeThrottleTimeoutMs = 500;
const int64_t kCycleDisplayThrottleTimeoutMs = 4000;
const int64_t kSetPrimaryDisplayThrottleTimeoutMs = 500;
+// A property key to store the ScreenRotationAnimator of the window; Used for
+// screen rotation.
+DEFINE_OWNED_UI_CLASS_PROPERTY_KEY(ash::ScreenRotationAnimator,
+ kScreenRotationAnimatorKey,
+ nullptr);
+
+aura::Window* GetRootWindow(int64_t display_id) {
+ return ash::Shell::Get()
+ ->window_tree_host_manager()
+ ->GetRootWindowForDisplayId(display_id);
+}
+
} // namespace
namespace ash {
@@ -107,7 +124,7 @@ void DisplayConfigurationController::SetDisplayRotation(
if (display_manager_->IsDisplayIdValid(display_id)) {
ScreenRotationAnimator* screen_rotation_animator =
GetScreenRotationAnimatorForDisplay(display_id);
- screen_rotation_animator->Rotate(rotation, source);
+ screen_rotation_animator->Rotate(display_id, rotation, source);
} else {
display_manager_->SetDisplayRotation(display_id, rotation, source);
}
@@ -174,15 +191,14 @@ void DisplayConfigurationController::SetPrimaryDisplayIdImpl(
ScreenRotationAnimator*
DisplayConfigurationController::GetScreenRotationAnimatorForDisplay(
int64_t display_id) {
- auto iter = rotation_animator_map_.find(display_id);
- if (iter != rotation_animator_map_.end())
- return iter->second.get();
-
- auto animator = base::MakeUnique<ScreenRotationAnimator>(display_id);
- ScreenRotationAnimator* result = animator.get();
- rotation_animator_map_.insert(
- std::make_pair(display_id, std::move(animator)));
- return result;
+ aura::Window* root_window = GetRootWindow(display_id);
+ ScreenRotationAnimator* animator =
+ root_window->GetProperty(kScreenRotationAnimatorKey);
+ if (!animator) {
+ animator = new ScreenRotationAnimator(root_window);
+ root_window->SetProperty(kScreenRotationAnimatorKey, animator);
+ }
+ return animator;
}
} // namespace ash

Powered by Google App Engine
This is Rietveld 408576698