1// Copyright 2014 The Chromium Authors. All rights reserved. 2// Use of this source code is governed by a BSD-style license that can be 3// found in the LICENSE file. 4 5#include "testing/gtest/include/gtest/gtest.h" 6#include "ui/ozone/platform/dri/hardware_display_controller.h" 7#include "ui/ozone/platform/dri/screen_manager.h" 8#include "ui/ozone/platform/dri/test/mock_dri_wrapper.h" 9#include "ui/ozone/platform/dri/test/mock_surface_generator.h" 10 11namespace { 12 13// Create a basic mode for a 6x4 screen. 14const drmModeModeInfo kDefaultMode = 15 {0, 6, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, {'\0'}}; 16 17class MockScreenManager : public ui::ScreenManager { 18 public: 19 MockScreenManager(ui::DriWrapper* dri, 20 ui::ScanoutSurfaceGenerator* surface_generator) 21 : ScreenManager(dri, surface_generator), dri_(dri) {} 22 23 virtual void ForceInitializationOfPrimaryDisplay() OVERRIDE {} 24 25 private: 26 ui::DriWrapper* dri_; 27 28 DISALLOW_COPY_AND_ASSIGN(MockScreenManager); 29}; 30 31} // namespace 32 33class ScreenManagerTest : public testing::Test { 34 public: 35 ScreenManagerTest() {} 36 virtual ~ScreenManagerTest() {} 37 38 virtual void SetUp() OVERRIDE { 39 dri_.reset(new ui::MockDriWrapper(3)); 40 surface_generator_.reset(new ui::MockSurfaceGenerator(dri_.get())); 41 screen_manager_.reset(new MockScreenManager( 42 dri_.get(), surface_generator_.get())); 43 } 44 virtual void TearDown() OVERRIDE { 45 screen_manager_.reset(); 46 dri_.reset(); 47 } 48 49 protected: 50 scoped_ptr<ui::MockDriWrapper> dri_; 51 scoped_ptr<ui::MockSurfaceGenerator> surface_generator_; 52 scoped_ptr<MockScreenManager> screen_manager_; 53 54 private: 55 DISALLOW_COPY_AND_ASSIGN(ScreenManagerTest); 56}; 57 58TEST_F(ScreenManagerTest, CheckWithNoControllers) { 59 EXPECT_FALSE(screen_manager_->GetDisplayController(1)); 60} 61 62TEST_F(ScreenManagerTest, CheckWithValidController) { 63 screen_manager_->ConfigureDisplayController(1, 2, kDefaultMode); 64 base::WeakPtr<ui::HardwareDisplayController> controller = 65 screen_manager_->GetDisplayController(1); 66 67 EXPECT_TRUE(controller); 68 EXPECT_EQ(1u, controller->crtc_id()); 69 EXPECT_EQ(2u, controller->connector_id()); 70} 71 72TEST_F(ScreenManagerTest, CheckWithInvalidId) { 73 screen_manager_->ConfigureDisplayController(1, 2, kDefaultMode); 74 75 EXPECT_TRUE(screen_manager_->GetDisplayController(1)); 76 EXPECT_FALSE(screen_manager_->GetDisplayController(2)); 77} 78 79TEST_F(ScreenManagerTest, CheckForSecondValidController) { 80 screen_manager_->ConfigureDisplayController(1, 2, kDefaultMode); 81 screen_manager_->ConfigureDisplayController(3, 4, kDefaultMode); 82 83 EXPECT_TRUE(screen_manager_->GetDisplayController(1)); 84 EXPECT_TRUE(screen_manager_->GetDisplayController(2)); 85} 86 87TEST_F(ScreenManagerTest, CheckControllerAfterItIsRemoved) { 88 screen_manager_->ConfigureDisplayController(1, 2, kDefaultMode); 89 base::WeakPtr<ui::HardwareDisplayController> controller = 90 screen_manager_->GetDisplayController(1); 91 92 EXPECT_TRUE(controller); 93 screen_manager_->RemoveDisplayController(1, 2); 94 EXPECT_FALSE(controller); 95} 96 97TEST_F(ScreenManagerTest, CheckDuplicateConfiguration) { 98 screen_manager_->ConfigureDisplayController(1, 2, kDefaultMode); 99 screen_manager_->ConfigureDisplayController(1, 2, kDefaultMode); 100 101 EXPECT_TRUE(screen_manager_->GetDisplayController(1)); 102 EXPECT_FALSE(screen_manager_->GetDisplayController(2)); 103} 104 105TEST_F(ScreenManagerTest, CheckChangingMode) { 106 screen_manager_->ConfigureDisplayController(1, 2, kDefaultMode); 107 drmModeModeInfo new_mode = kDefaultMode; 108 new_mode.vdisplay = 10; 109 screen_manager_->ConfigureDisplayController(1, 2, new_mode); 110 111 EXPECT_TRUE(screen_manager_->GetDisplayController(1)); 112 EXPECT_FALSE(screen_manager_->GetDisplayController(2)); 113 drmModeModeInfo mode = screen_manager_->GetDisplayController(1)->get_mode(); 114 EXPECT_EQ(new_mode.vdisplay, mode.vdisplay); 115 EXPECT_EQ(new_mode.hdisplay, mode.hdisplay); 116} 117