Upstream version 5.34.104.0
[platform/framework/web/crosswalk.git] / src / ash / display / display_controller.cc
index 7b7cc58..ef6809e 100644 (file)
@@ -9,12 +9,13 @@
 #include <map>
 
 #include "ash/ash_switches.h"
+#include "ash/display/cursor_window_controller.h"
 #include "ash/display/display_layout_store.h"
 #include "ash/display/display_manager.h"
 #include "ash/display/mirror_window_controller.h"
 #include "ash/display/root_window_transformers.h"
 #include "ash/display/virtual_keyboard_window_controller.h"
-#include "ash/host/root_window_host_factory.h"
+#include "ash/host/window_tree_host_factory.h"
 #include "ash/root_window_controller.h"
 #include "ash/root_window_settings.h"
 #include "ash/screen_util.h"
@@ -33,6 +34,7 @@
 #include "ui/aura/window_property.h"
 #include "ui/aura/window_tracker.h"
 #include "ui/compositor/compositor.h"
+#include "ui/compositor/compositor_vsync_manager.h"
 #include "ui/gfx/display.h"
 #include "ui/gfx/screen.h"
 
@@ -119,6 +121,14 @@ void SetDisplayPropertiesOnHostWindow(aura::RootWindow* root,
   scoped_ptr<aura::RootWindowTransformer> transformer(
       internal::CreateRootWindowTransformerForDisplay(root->window(), display));
   root->host()->SetRootWindowTransformer(transformer.Pass());
+
+  internal::DisplayMode mode;
+  if (GetDisplayManager()->GetSelectedModeForDisplayId(display.id(), &mode) &&
+      mode.refresh_rate > 0.0f) {
+    root->host()->compositor()->vsync_manager()->SetAuthoritativeVSyncInterval(
+        base::TimeDelta::FromMicroseconds(base::Time::kMicrosecondsPerSecond /
+                                          mode.refresh_rate));
+  }
 }
 
 }  // namespace
@@ -216,7 +226,8 @@ bool DisplayController::DisplayChangeLimiter::IsThrottled() const {
 DisplayController::DisplayController()
     : primary_root_window_for_replace_(NULL),
       focus_activation_store_(new internal::FocusActivationStore()),
-      mirror_window_controller_(new internal::MirrorWindowController),
+      cursor_window_controller_(new internal::CursorWindowController()),
+      mirror_window_controller_(new internal::MirrorWindowController()),
       virtual_keyboard_window_controller_(
           new internal::VirtualKeyboardWindowController) {
 #if defined(OS_CHROMEOS)
@@ -249,6 +260,7 @@ void DisplayController::Shutdown() {
   // DisplayManager outlives DisplayController.
   Shell::GetInstance()->display_manager()->set_delegate(NULL);
 
+  cursor_window_controller_.reset();
   mirror_window_controller_.reset();
   virtual_keyboard_window_controller_.reset();
 
@@ -613,6 +625,7 @@ void DisplayController::OnWindowTreeHostResized(const aura::RootWindow* root) {
           display.id(),
           root->host()->GetBounds())) {
     mirror_window_controller_->UpdateWindow();
+    cursor_window_controller_->UpdateContainer();
   }
 }
 
@@ -621,10 +634,12 @@ void DisplayController::CreateOrUpdateNonDesktopDisplay(
   switch (GetDisplayManager()->second_display_mode()) {
     case internal::DisplayManager::MIRRORING:
       mirror_window_controller_->UpdateWindow(info);
+      cursor_window_controller_->UpdateContainer();
       virtual_keyboard_window_controller_->Close();
       break;
     case internal::DisplayManager::VIRTUAL_KEYBOARD:
       mirror_window_controller_->Close();
+      cursor_window_controller_->UpdateContainer();
       virtual_keyboard_window_controller_->UpdateWindow(info);
       break;
     case internal::DisplayManager::EXTENDED:
@@ -634,6 +649,7 @@ void DisplayController::CreateOrUpdateNonDesktopDisplay(
 
 void DisplayController::CloseNonDesktopDisplay() {
   mirror_window_controller_->Close();
+  cursor_window_controller_->UpdateContainer();
   virtual_keyboard_window_controller_->Close();
 }
 
@@ -691,7 +707,7 @@ aura::RootWindow* DisplayController::AddRootWindowForDisplay(
       GetDisplayManager()->GetDisplayInfo(display.id());
   const gfx::Rect& bounds_in_native = display_info.bounds_in_native();
   aura::RootWindow::CreateParams params(bounds_in_native);
-  params.host = Shell::GetInstance()->root_window_host_factory()->
+  params.host = Shell::GetInstance()->window_tree_host_factory()->
       CreateWindowTreeHost(bounds_in_native);
   aura::RootWindow* root_window = new aura::RootWindow(params);
   root_window->window()->SetName(
@@ -702,7 +718,7 @@ aura::RootWindow* DisplayController::AddRootWindowForDisplay(
   root_window->AddRootWindowObserver(this);
   internal::InitRootWindowSettings(root_window->window())->display_id =
       display.id();
-  root_window->Init();
+  root_window->host()->InitHost();
 
   root_windows_[display.id()] = root_window->window();
   SetDisplayPropertiesOnHostWindow(root_window, display);