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

Side by Side Diff: ui/ozone/platform/dri/hardware_display_controller_unittest.cc

Issue 851853002: It is time. (Closed) Base URL: https://github.com/domokit/mojo.git@master
Patch Set: Trying to reup because the last upload failed. Created 5 years, 11 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 unified diff | Download patch
OLDNEW
(Empty)
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 "third_party/skia/include/core/SkCanvas.h"
7 #include "ui/ozone/platform/dri/crtc_controller.h"
8 #include "ui/ozone/platform/dri/dri_buffer.h"
9 #include "ui/ozone/platform/dri/dri_wrapper.h"
10 #include "ui/ozone/platform/dri/hardware_display_controller.h"
11 #include "ui/ozone/platform/dri/test/mock_dri_wrapper.h"
12 #include "ui/ozone/public/native_pixmap.h"
13
14 namespace {
15
16 // Create a basic mode for a 6x4 screen.
17 const drmModeModeInfo kDefaultMode =
18 {0, 6, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, {'\0'}};
19
20 const uint32_t kPrimaryCrtc = 1;
21 const uint32_t kPrimaryConnector = 2;
22 const uint32_t kSecondaryCrtc = 3;
23 const uint32_t kSecondaryConnector = 4;
24
25 const gfx::Size kDefaultModeSize(kDefaultMode.hdisplay, kDefaultMode.vdisplay);
26 const gfx::SizeF kDefaultModeSizeF(1.0, 1.0);
27
28 class MockScanoutBuffer : public ui::ScanoutBuffer {
29 public:
30 MockScanoutBuffer(const gfx::Size& size) : size_(size) {}
31
32 // ScanoutBuffer:
33 virtual uint32_t GetFramebufferId() const override {return 0; }
34 virtual uint32_t GetHandle() const override { return 0; }
35 virtual gfx::Size GetSize() const override { return size_; }
36
37 private:
38 virtual ~MockScanoutBuffer() {}
39
40 gfx::Size size_;
41
42 DISALLOW_COPY_AND_ASSIGN(MockScanoutBuffer);
43 };
44
45 } // namespace
46
47 class HardwareDisplayControllerTest : public testing::Test {
48 public:
49 HardwareDisplayControllerTest() {}
50 virtual ~HardwareDisplayControllerTest() {}
51
52 virtual void SetUp() override;
53 virtual void TearDown() override;
54 protected:
55 scoped_ptr<ui::HardwareDisplayController> controller_;
56 scoped_ptr<ui::MockDriWrapper> drm_;
57
58 private:
59 DISALLOW_COPY_AND_ASSIGN(HardwareDisplayControllerTest);
60 };
61
62 void HardwareDisplayControllerTest::SetUp() {
63 drm_.reset(new ui::MockDriWrapper(3));
64 controller_.reset(new ui::HardwareDisplayController(
65 scoped_ptr<ui::CrtcController>(new ui::CrtcController(
66 drm_.get(), kPrimaryCrtc, kPrimaryConnector))));
67 }
68
69 void HardwareDisplayControllerTest::TearDown() {
70 controller_.reset();
71 drm_.reset();
72 }
73
74 TEST_F(HardwareDisplayControllerTest, CheckModesettingResult) {
75 ui::OverlayPlane plane(scoped_refptr<ui::ScanoutBuffer>(
76 new MockScanoutBuffer(kDefaultModeSize)));
77
78 EXPECT_TRUE(controller_->Modeset(plane, kDefaultMode));
79 EXPECT_FALSE(plane.buffer->HasOneRef());
80 }
81
82 TEST_F(HardwareDisplayControllerTest, CheckStateAfterPageFlip) {
83 ui::OverlayPlane plane1(scoped_refptr<ui::ScanoutBuffer>(
84 new MockScanoutBuffer(kDefaultModeSize)));
85
86 EXPECT_TRUE(controller_->Modeset(plane1, kDefaultMode));
87
88 ui::OverlayPlane plane2(scoped_refptr<ui::ScanoutBuffer>(
89 new MockScanoutBuffer(kDefaultModeSize)));
90 controller_->QueueOverlayPlane(plane2);
91 EXPECT_TRUE(controller_->SchedulePageFlip());
92 controller_->WaitForPageFlipEvent();
93 EXPECT_TRUE(plane1.buffer->HasOneRef());
94 EXPECT_FALSE(plane2.buffer->HasOneRef());
95
96 EXPECT_EQ(1, drm_->get_page_flip_call_count());
97 EXPECT_EQ(0, drm_->get_overlay_flip_call_count());
98 }
99
100 TEST_F(HardwareDisplayControllerTest, CheckStateIfModesetFails) {
101 drm_->set_set_crtc_expectation(false);
102
103 ui::OverlayPlane plane(scoped_refptr<ui::ScanoutBuffer>(new MockScanoutBuffer(
104 kDefaultModeSize)));
105
106 EXPECT_FALSE(controller_->Modeset(plane, kDefaultMode));
107 }
108
109 TEST_F(HardwareDisplayControllerTest, CheckStateIfPageFlipFails) {
110 drm_->set_page_flip_expectation(false);
111
112 ui::OverlayPlane plane1(scoped_refptr<ui::ScanoutBuffer>(
113 new MockScanoutBuffer(kDefaultModeSize)));
114
115 EXPECT_TRUE(controller_->Modeset(plane1, kDefaultMode));
116
117 ui::OverlayPlane plane2(scoped_refptr<ui::ScanoutBuffer>(
118 new MockScanoutBuffer(kDefaultModeSize)));
119 controller_->QueueOverlayPlane(plane2);
120 EXPECT_FALSE(controller_->SchedulePageFlip());
121 EXPECT_FALSE(plane1.buffer->HasOneRef());
122 EXPECT_FALSE(plane2.buffer->HasOneRef());
123
124 controller_->WaitForPageFlipEvent();
125 EXPECT_FALSE(plane1.buffer->HasOneRef());
126 EXPECT_TRUE(plane2.buffer->HasOneRef());
127 }
128
129 TEST_F(HardwareDisplayControllerTest, VerifyNoDRMCallsWhenDisabled) {
130 ui::OverlayPlane plane1(scoped_refptr<ui::ScanoutBuffer>(
131 new MockScanoutBuffer(kDefaultModeSize)));
132
133 EXPECT_TRUE(controller_->Modeset(plane1, kDefaultMode));
134 controller_->Disable();
135 ui::OverlayPlane plane2(scoped_refptr<ui::ScanoutBuffer>(
136 new MockScanoutBuffer(kDefaultModeSize)));
137 controller_->QueueOverlayPlane(plane2);
138 EXPECT_TRUE(controller_->SchedulePageFlip());
139 controller_->WaitForPageFlipEvent();
140 EXPECT_EQ(0, drm_->get_page_flip_call_count());
141
142 EXPECT_TRUE(controller_->Modeset(plane1, kDefaultMode));
143 controller_->QueueOverlayPlane(plane2);
144 EXPECT_TRUE(controller_->SchedulePageFlip());
145 controller_->WaitForPageFlipEvent();
146 EXPECT_EQ(1, drm_->get_page_flip_call_count());
147 }
148
149 TEST_F(HardwareDisplayControllerTest, CheckOverlayPresent) {
150 ui::OverlayPlane plane1(scoped_refptr<ui::ScanoutBuffer>(
151 new MockScanoutBuffer(kDefaultModeSize)));
152 ui::OverlayPlane plane2(
153 scoped_refptr<ui::ScanoutBuffer>(new MockScanoutBuffer(kDefaultModeSize)),
154 1,
155 gfx::OVERLAY_TRANSFORM_NONE,
156 gfx::Rect(kDefaultModeSize),
157 gfx::RectF(kDefaultModeSizeF));
158 plane2.overlay_plane = 1; // Force association with a plane.
159
160 EXPECT_TRUE(controller_->Modeset(plane1, kDefaultMode));
161
162 controller_->QueueOverlayPlane(plane1);
163 controller_->QueueOverlayPlane(plane2);
164
165 EXPECT_TRUE(controller_->SchedulePageFlip());
166 controller_->WaitForPageFlipEvent();
167 EXPECT_EQ(1, drm_->get_page_flip_call_count());
168 EXPECT_EQ(1, drm_->get_overlay_flip_call_count());
169 }
170
171 TEST_F(HardwareDisplayControllerTest, PageflipMirroredControllers) {
172 controller_->AddCrtc(scoped_ptr<ui::CrtcController>(
173 new ui::CrtcController(drm_.get(), kSecondaryCrtc, kSecondaryConnector)));
174
175 ui::OverlayPlane plane1(scoped_refptr<ui::ScanoutBuffer>(
176 new MockScanoutBuffer(kDefaultModeSize)));
177 EXPECT_TRUE(controller_->Modeset(plane1, kDefaultMode));
178 EXPECT_EQ(2, drm_->get_set_crtc_call_count());
179
180 ui::OverlayPlane plane2(scoped_refptr<ui::ScanoutBuffer>(
181 new MockScanoutBuffer(kDefaultModeSize)));
182 controller_->QueueOverlayPlane(plane2);
183 EXPECT_TRUE(controller_->SchedulePageFlip());
184 EXPECT_EQ(2, drm_->get_page_flip_call_count());
185
186 controller_->WaitForPageFlipEvent();
187 EXPECT_EQ(2, drm_->get_handle_events_count());
188 }
189
190 TEST_F(HardwareDisplayControllerTest,
191 PageflipMirroredControllersWithInvertedCrtcOrder) {
192 scoped_ptr<ui::CrtcController> crtc1(
193 new ui::CrtcController(drm_.get(), kPrimaryCrtc, kPrimaryConnector));
194 scoped_ptr<ui::CrtcController> crtc2(
195 new ui::CrtcController(drm_.get(), kSecondaryCrtc, kSecondaryConnector));
196
197 // Make sure that if the order is reversed everything is still fine.
198 std::queue<ui::CrtcController*> crtc_queue;
199 crtc_queue.push(crtc2.get());
200 crtc_queue.push(crtc1.get());
201
202 controller_.reset(new ui::HardwareDisplayController(crtc1.Pass()));
203 controller_->AddCrtc(crtc2.Pass());
204
205 ui::OverlayPlane plane1(scoped_refptr<ui::ScanoutBuffer>(
206 new MockScanoutBuffer(kDefaultModeSize)));
207 EXPECT_TRUE(controller_->Modeset(plane1, kDefaultMode));
208 EXPECT_EQ(2, drm_->get_set_crtc_call_count());
209
210 ui::OverlayPlane plane2(scoped_refptr<ui::ScanoutBuffer>(
211 new MockScanoutBuffer(kDefaultModeSize)));
212 controller_->QueueOverlayPlane(plane2);
213 EXPECT_TRUE(controller_->SchedulePageFlip());
214 EXPECT_EQ(2, drm_->get_page_flip_call_count());
215
216 drm_->set_controllers(crtc_queue);
217 controller_->WaitForPageFlipEvent();
218 EXPECT_EQ(2, drm_->get_handle_events_count());
219 }
OLDNEW
« no previous file with comments | « ui/ozone/platform/dri/hardware_display_controller.cc ('k') | ui/ozone/platform/dri/hardware_display_plane.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698