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

Side by Side Diff: ui/gfx/ozone/impl/hardware_display_controller_ozone_unittest.cc

Issue 27038004: [Ozone] HardwareDisplayController unittests (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 7 years, 2 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 | Annotate | Revision Log
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(Empty)
1 // Copyright (c) 2013 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/gfx/ozone/impl/drm_skbitmap_ozone.h"
7 #include "ui/gfx/ozone/impl/drm_wrapper_ozone.h"
8 #include "ui/gfx/ozone/impl/hardware_display_controller_ozone.h"
9 #include "ui/gfx/ozone/impl/software_surface_ozone.h"
10
11 namespace {
12
13 // Create a basic mode for a 6x4 screen.
14 const drmModeModeInfo kDefaultMode =
15 {0, 6, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, {'\0'}};
16
17 // Mock file descriptor ID.
18 const int kFd = 3;
19
20 // Mock connector ID.
21 const uint32_t kConnectorId = 1;
22
23 // Mock CRTC ID.
24 const uint32_t kCrtcId = 1;
25
26 // The real DrmWrapper makes actual DRM calls which we can't use in unit tests.
27 class MockDrmWrapperOzone : public gfx::DrmWrapperOzone {
28 public:
29 MockDrmWrapperOzone(int fd) : DrmWrapperOzone(""),
30 get_crtc_call_count(0),
31 free_crtc_call_count(0),
32 restore_crtc_call_count(0),
33 add_framebuffer_call_count(0),
34 remove_framebuffer_call_count(0),
35 set_crtc_expectation(true),
36 add_framebuffer_expectation(true),
37 page_flip_expectation(true) {
38 fd_ = fd;
39 }
40
41 virtual ~MockDrmWrapperOzone() { fd_ = -1; }
42
43 virtual drmModeCrtc* GetCrtc(uint32_t crtc_id) OVERRIDE {
rjkroege 2013/10/11 21:14:54 newline separate the methods.
44 get_crtc_call_count++;
45 return new drmModeCrtc;
46 }
47 virtual void FreeCrtc(drmModeCrtc* crtc) OVERRIDE {
48 free_crtc_call_count++;
49 delete crtc;
50 }
51 virtual bool SetCrtc(uint32_t crtc_id,
52 uint32_t framebuffer,
53 uint32_t* connectors,
54 drmModeModeInfo* mode) OVERRIDE {
55 return set_crtc_expectation;
56 }
57 virtual bool SetCrtc(drmModeCrtc* crtc, uint32_t* connectors) OVERRIDE {
58 restore_crtc_call_count++;
59 return true;
60 }
61 virtual bool AddFramebuffer(const drmModeModeInfo& mode,
62 uint8_t depth,
63 uint8_t bpp,
64 uint32_t stride,
65 uint32_t handle,
66 uint32_t* framebuffer) OVERRIDE {
67 add_framebuffer_call_count++;
68 return add_framebuffer_expectation;
69 }
70 virtual bool RemoveFramebuffer(uint32_t framebuffer) OVERRIDE {
71 remove_framebuffer_call_count++;
72 return true;
73 }
74 virtual bool PageFlip(uint32_t crtc_id,
75 uint32_t framebuffer,
76 void* data) OVERRIDE {
77 return page_flip_expectation;
78 }
79
80 int get_get_crtc_call_count() const {
81 return get_crtc_call_count;
82 }
83
84 int get_free_crtc_call_count() const {
85 return free_crtc_call_count;
86 }
87
88 int get_restore_crtc_call_count() const {
89 return restore_crtc_call_count;
90 }
91
92 int get_add_framebuffer_call_count() const {
93 return add_framebuffer_call_count;
94 }
95
96 int get_remove_framebuffer_call_count() const {
97 return remove_framebuffer_call_count;
98 }
99
100 void set_set_crtc_expectation(bool state) {
101 set_crtc_expectation = state;
102 }
103
104 void set_add_framebuffer_expectation(bool state) {
105 add_framebuffer_expectation = state;
106 }
107
108 void set_page_flip_expectation(bool state) {
109 page_flip_expectation = state;
110 }
111
112 private:
113 int get_crtc_call_count;
114 int free_crtc_call_count;
115 int restore_crtc_call_count;
116 int add_framebuffer_call_count;
117 int remove_framebuffer_call_count;
118
119 bool set_crtc_expectation;
120 bool add_framebuffer_expectation;
121 bool page_flip_expectation;
122
123 DISALLOW_COPY_AND_ASSIGN(MockDrmWrapperOzone);
124 };
125
126 class MockDrmSkBitmapOzone : public gfx::DrmSkBitmapOzone {
127 public:
128 MockDrmSkBitmapOzone(int fd) : DrmSkBitmapOzone(fd) {}
129 virtual ~MockDrmSkBitmapOzone() {}
130
131 virtual bool Initialize() OVERRIDE {
132 return allocPixels();
133 }
134 private:
135 DISALLOW_COPY_AND_ASSIGN(MockDrmSkBitmapOzone);
136 };
137
138 class MockSoftwareSurfaceOzone : public gfx::SoftwareSurfaceOzone {
139 public:
140 MockSoftwareSurfaceOzone(gfx::HardwareDisplayControllerOzone* controller)
141 : SoftwareSurfaceOzone(controller) {}
142 virtual ~MockSoftwareSurfaceOzone() {}
143
144 private:
145 virtual gfx::DrmSkBitmapOzone* CreateBuffer() OVERRIDE {
146 return new MockDrmSkBitmapOzone(kFd);
147 }
148 DISALLOW_COPY_AND_ASSIGN(MockSoftwareSurfaceOzone);
149 };
150
151 } // namespace
152
153 class HardwareDisplayControllerOzoneTest : public testing::Test {
154 public:
155 HardwareDisplayControllerOzoneTest() {}
156 virtual ~HardwareDisplayControllerOzoneTest() {}
157
158 virtual void SetUp() OVERRIDE;
159 virtual void TearDown() OVERRIDE;
160 protected:
161 scoped_ptr<gfx::HardwareDisplayControllerOzone> controller_;
162 scoped_ptr<MockDrmWrapperOzone> drm_;
163
164 private:
165 DISALLOW_COPY_AND_ASSIGN(HardwareDisplayControllerOzoneTest);
166 };
167
168 void HardwareDisplayControllerOzoneTest::SetUp() {
169 controller_.reset(new gfx::HardwareDisplayControllerOzone());
170 drm_.reset(new MockDrmWrapperOzone(kFd));
171 }
172
173 void HardwareDisplayControllerOzoneTest::TearDown() {
174 controller_.reset();
175 drm_.reset();
176 }
177
178 TEST_F(HardwareDisplayControllerOzoneTest, CheckInitialState) {
179 EXPECT_EQ(gfx::HardwareDisplayControllerOzone::UNASSOCIATED,
180 controller_->get_state());
181 }
182
183 TEST_F(HardwareDisplayControllerOzoneTest,
184 CheckStateAfterControllerIsInitialized) {
185 controller_->SetControllerInfo(
186 drm_.get(), kConnectorId, kCrtcId, kDefaultMode);
187
188 EXPECT_EQ(1, drm_->get_get_crtc_call_count());
189 EXPECT_EQ(gfx::HardwareDisplayControllerOzone::UNINITIALIZED,
190 controller_->get_state());
191 }
192
193 TEST_F(HardwareDisplayControllerOzoneTest, CheckStateAfterSurfaceIsBound) {
194 controller_->SetControllerInfo(
195 drm_.get(), kConnectorId, kCrtcId, kDefaultMode);
196 gfx::SoftwareSurfaceOzone* surface =
197 new MockSoftwareSurfaceOzone(controller_.get());
198
199 EXPECT_TRUE(surface->Initialize());
200 EXPECT_TRUE(controller_->BindSurfaceToController(surface));
201
202 EXPECT_EQ(2, drm_->get_add_framebuffer_call_count());
203 EXPECT_EQ(gfx::HardwareDisplayControllerOzone::SURFACE_INITIALIZED,
204 controller_->get_state());
205 }
206
207 TEST_F(HardwareDisplayControllerOzoneTest, CheckStateIfBindingFails) {
208 drm_->set_add_framebuffer_expectation(false);
209
210 controller_->SetControllerInfo(
211 drm_.get(), kConnectorId, kCrtcId, kDefaultMode);
212 gfx::SoftwareSurfaceOzone* surface =
213 new MockSoftwareSurfaceOzone(controller_.get());
214
215 EXPECT_TRUE(surface->Initialize());
216 EXPECT_FALSE(controller_->BindSurfaceToController(surface));
217
218 EXPECT_EQ(1, drm_->get_add_framebuffer_call_count());
219 EXPECT_EQ(gfx::HardwareDisplayControllerOzone::FAILED,
220 controller_->get_state());
221
222 // Normally the controller would take ownership, but we failed to bind, so we
223 // need to clean up.
224 delete surface;
225 }
226
227 TEST_F(HardwareDisplayControllerOzoneTest, CheckStateAfterPageFlip) {
228 controller_->SetControllerInfo(
229 drm_.get(), kConnectorId, kCrtcId, kDefaultMode);
230 gfx::SoftwareSurfaceOzone* surface =
231 new MockSoftwareSurfaceOzone(controller_.get());
232
233 EXPECT_TRUE(surface->Initialize());
234 EXPECT_TRUE(controller_->BindSurfaceToController(surface));
235
236 controller_->SchedulePageFlip();
237
238 EXPECT_EQ(gfx::HardwareDisplayControllerOzone::INITIALIZED,
239 controller_->get_state());
240 }
241
242 TEST_F(HardwareDisplayControllerOzoneTest, CheckStateIfModesetFails) {
243 drm_->set_set_crtc_expectation(false);
244
245 controller_->SetControllerInfo(
246 drm_.get(), kConnectorId, kCrtcId, kDefaultMode);
247 gfx::SoftwareSurfaceOzone* surface =
248 new MockSoftwareSurfaceOzone(controller_.get());
249
250 EXPECT_TRUE(surface->Initialize());
251 EXPECT_TRUE(controller_->BindSurfaceToController(surface));
252
253 controller_->SchedulePageFlip();
254
255 EXPECT_EQ(gfx::HardwareDisplayControllerOzone::FAILED,
256 controller_->get_state());
257 }
258
259 TEST_F(HardwareDisplayControllerOzoneTest, CheckStateIfPageFlipFails) {
260 drm_->set_page_flip_expectation(false);
261
262 controller_->SetControllerInfo(
263 drm_.get(), kConnectorId, kCrtcId, kDefaultMode);
264 gfx::SoftwareSurfaceOzone* surface =
265 new MockSoftwareSurfaceOzone(controller_.get());
266
267 EXPECT_TRUE(surface->Initialize());
268 EXPECT_TRUE(controller_->BindSurfaceToController(surface));
269
270 controller_->SchedulePageFlip();
271
272 EXPECT_EQ(gfx::HardwareDisplayControllerOzone::FAILED,
273 controller_->get_state());
274 }
275
276 TEST_F(HardwareDisplayControllerOzoneTest, CheckProperDestruction) {
277 controller_->SetControllerInfo(
278 drm_.get(), kConnectorId, kCrtcId, kDefaultMode);
279 gfx::SoftwareSurfaceOzone* surface =
280 new MockSoftwareSurfaceOzone(controller_.get());
281
282 EXPECT_TRUE(surface->Initialize());
283 EXPECT_TRUE(controller_->BindSurfaceToController(surface));
284
285 EXPECT_EQ(gfx::HardwareDisplayControllerOzone::SURFACE_INITIALIZED,
286 controller_->get_state());
287
288 controller_.reset();
289
290 EXPECT_EQ(2, drm_->get_remove_framebuffer_call_count());
291 EXPECT_EQ(1, drm_->get_restore_crtc_call_count());
292 EXPECT_EQ(1, drm_->get_free_crtc_call_count());
293 }
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698