Upstream version 9.38.198.0
[platform/framework/web/crosswalk.git] / src / ui / ozone / platform / dri / screen_manager_unittest.cc
index 0851000..074b67a 100644 (file)
@@ -3,10 +3,10 @@
 // found in the LICENSE file.
 
 #include "testing/gtest/include/gtest/gtest.h"
+#include "ui/ozone/platform/dri/dri_buffer.h"
 #include "ui/ozone/platform/dri/hardware_display_controller.h"
 #include "ui/ozone/platform/dri/screen_manager.h"
 #include "ui/ozone/platform/dri/test/mock_dri_wrapper.h"
-#include "ui/ozone/platform/dri/test/mock_surface_generator.h"
 
 namespace {
 
@@ -14,11 +14,16 @@ namespace {
 const drmModeModeInfo kDefaultMode =
     {0, 6, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, {'\0'}};
 
+const uint32_t kPrimaryCrtc = 1;
+const uint32_t kPrimaryConnector = 2;
+const uint32_t kSecondaryCrtc = 3;
+const uint32_t kSecondaryConnector = 4;
+
 class MockScreenManager : public ui::ScreenManager {
  public:
   MockScreenManager(ui::DriWrapper* dri,
-                    ui::ScanoutSurfaceGenerator* surface_generator)
-      : ScreenManager(dri, surface_generator), dri_(dri) {}
+                    ui::ScanoutBufferGenerator* buffer_generator)
+      : ScreenManager(dri, buffer_generator), dri_(dri) {}
 
   virtual void ForceInitializationOfPrimaryDisplay() OVERRIDE {}
 
@@ -37,9 +42,9 @@ class ScreenManagerTest : public testing::Test {
 
   virtual void SetUp() OVERRIDE {
     dri_.reset(new ui::MockDriWrapper(3));
-    surface_generator_.reset(new ui::MockSurfaceGenerator(dri_.get()));
+    buffer_generator_.reset(new ui::DriBufferGenerator(dri_.get()));
     screen_manager_.reset(new MockScreenManager(
-        dri_.get(), surface_generator_.get()));
+        dri_.get(), buffer_generator_.get()));
   }
   virtual void TearDown() OVERRIDE {
     screen_manager_.reset();
@@ -48,7 +53,7 @@ class ScreenManagerTest : public testing::Test {
 
  protected:
   scoped_ptr<ui::MockDriWrapper> dri_;
-  scoped_ptr<ui::MockSurfaceGenerator> surface_generator_;
+  scoped_ptr<ui::DriBufferGenerator> buffer_generator_;
   scoped_ptr<MockScreenManager> screen_manager_;
 
  private:
@@ -60,53 +65,61 @@ TEST_F(ScreenManagerTest, CheckWithNoControllers) {
 }
 
 TEST_F(ScreenManagerTest, CheckWithValidController) {
-  screen_manager_->ConfigureDisplayController(1, 2, kDefaultMode);
+  screen_manager_->ConfigureDisplayController(
+      kPrimaryCrtc, kPrimaryConnector, gfx::Point(), kDefaultMode);
   base::WeakPtr<ui::HardwareDisplayController> controller =
       screen_manager_->GetDisplayController(1);
 
   EXPECT_TRUE(controller);
-  EXPECT_EQ(1u, controller->crtc_id());
-  EXPECT_EQ(2u, controller->connector_id());
+  EXPECT_TRUE(controller->HasCrtc(kPrimaryCrtc));
 }
 
 TEST_F(ScreenManagerTest, CheckWithInvalidId) {
-  screen_manager_->ConfigureDisplayController(1, 2, kDefaultMode);
+  screen_manager_->ConfigureDisplayController(
+      kPrimaryCrtc, kPrimaryConnector, gfx::Point(), kDefaultMode);
 
   EXPECT_TRUE(screen_manager_->GetDisplayController(1));
   EXPECT_FALSE(screen_manager_->GetDisplayController(2));
 }
 
 TEST_F(ScreenManagerTest, CheckForSecondValidController) {
-  screen_manager_->ConfigureDisplayController(1, 2, kDefaultMode);
-  screen_manager_->ConfigureDisplayController(3, 4, kDefaultMode);
+  screen_manager_->ConfigureDisplayController(
+      kPrimaryCrtc, kPrimaryConnector, gfx::Point(), kDefaultMode);
+  screen_manager_->ConfigureDisplayController(
+      3, 4, gfx::Point(6, 0), kDefaultMode);
 
   EXPECT_TRUE(screen_manager_->GetDisplayController(1));
   EXPECT_TRUE(screen_manager_->GetDisplayController(2));
 }
 
 TEST_F(ScreenManagerTest, CheckControllerAfterItIsRemoved) {
-  screen_manager_->ConfigureDisplayController(1, 2, kDefaultMode);
+  screen_manager_->ConfigureDisplayController(
+      kPrimaryCrtc, kPrimaryConnector, gfx::Point(), kDefaultMode);
   base::WeakPtr<ui::HardwareDisplayController> controller =
       screen_manager_->GetDisplayController(1);
 
   EXPECT_TRUE(controller);
-  screen_manager_->RemoveDisplayController(1, 2);
+  screen_manager_->RemoveDisplayController(1);
   EXPECT_FALSE(controller);
 }
 
 TEST_F(ScreenManagerTest, CheckDuplicateConfiguration) {
-  screen_manager_->ConfigureDisplayController(1, 2, kDefaultMode);
-  screen_manager_->ConfigureDisplayController(1, 2, kDefaultMode);
+  screen_manager_->ConfigureDisplayController(
+      kPrimaryCrtc, kPrimaryConnector, gfx::Point(), kDefaultMode);
+  screen_manager_->ConfigureDisplayController(
+      kPrimaryCrtc, kPrimaryConnector, gfx::Point(), kDefaultMode);
 
   EXPECT_TRUE(screen_manager_->GetDisplayController(1));
   EXPECT_FALSE(screen_manager_->GetDisplayController(2));
 }
 
 TEST_F(ScreenManagerTest, CheckChangingMode) {
-  screen_manager_->ConfigureDisplayController(1, 2, kDefaultMode);
+  screen_manager_->ConfigureDisplayController(
+      kPrimaryCrtc, kPrimaryConnector, gfx::Point(), kDefaultMode);
   drmModeModeInfo new_mode = kDefaultMode;
   new_mode.vdisplay = 10;
-  screen_manager_->ConfigureDisplayController(1, 2, new_mode);
+  screen_manager_->ConfigureDisplayController(
+      kPrimaryCrtc, kPrimaryConnector, gfx::Point(), new_mode);
 
   EXPECT_TRUE(screen_manager_->GetDisplayController(1));
   EXPECT_FALSE(screen_manager_->GetDisplayController(2));
@@ -114,3 +127,50 @@ TEST_F(ScreenManagerTest, CheckChangingMode) {
   EXPECT_EQ(new_mode.vdisplay, mode.vdisplay);
   EXPECT_EQ(new_mode.hdisplay, mode.hdisplay);
 }
+
+TEST_F(ScreenManagerTest, CheckForControllersInMirroredMode) {
+  screen_manager_->ConfigureDisplayController(
+      kPrimaryCrtc, kPrimaryConnector, gfx::Point(), kDefaultMode);
+  screen_manager_->ConfigureDisplayController(
+      kSecondaryCrtc, kSecondaryConnector, gfx::Point(), kDefaultMode);
+
+  EXPECT_TRUE(screen_manager_->GetDisplayController(1));
+  EXPECT_FALSE(screen_manager_->GetDisplayController(2));
+}
+
+TEST_F(ScreenManagerTest, CheckMirrorModeTransitions) {
+  screen_manager_->ConfigureDisplayController(
+      kPrimaryCrtc, kPrimaryConnector, gfx::Point(), kDefaultMode);
+  screen_manager_->ConfigureDisplayController(
+      kSecondaryCrtc, kSecondaryConnector, gfx::Point(6, 0), kDefaultMode);
+
+  EXPECT_TRUE(screen_manager_->GetDisplayController(1));
+  EXPECT_TRUE(screen_manager_->GetDisplayController(2));
+
+  screen_manager_->ConfigureDisplayController(
+      kPrimaryCrtc, kPrimaryConnector, gfx::Point(), kDefaultMode);
+  screen_manager_->ConfigureDisplayController(
+      kSecondaryCrtc, kSecondaryConnector, gfx::Point(), kDefaultMode);
+  EXPECT_TRUE(screen_manager_->GetDisplayController(1));
+  EXPECT_FALSE(screen_manager_->GetDisplayController(2));
+
+  screen_manager_->ConfigureDisplayController(
+      kPrimaryCrtc, kPrimaryConnector, gfx::Point(6, 0), kDefaultMode);
+  screen_manager_->ConfigureDisplayController(
+      kSecondaryCrtc, kSecondaryConnector, gfx::Point(), kDefaultMode);
+  EXPECT_TRUE(screen_manager_->GetDisplayController(1));
+  EXPECT_TRUE(screen_manager_->GetDisplayController(3));
+}
+
+TEST_F(ScreenManagerTest, MonitorGoneInMirrorMode) {
+  screen_manager_->ConfigureDisplayController(
+      kPrimaryCrtc, kPrimaryConnector, gfx::Point(), kDefaultMode);
+  screen_manager_->ConfigureDisplayController(
+      kSecondaryCrtc, kSecondaryConnector, gfx::Point(), kDefaultMode);
+
+  screen_manager_->RemoveDisplayController(kSecondaryCrtc);
+  EXPECT_TRUE(screen_manager_->ConfigureDisplayController(
+      kPrimaryCrtc, kPrimaryConnector, gfx::Point(), kDefaultMode));
+  EXPECT_TRUE(screen_manager_->GetDisplayController(1));
+  EXPECT_FALSE(screen_manager_->GetDisplayController(2));
+}