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

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

Issue 393233005: [Ozone-DRI] Convert HardwareDisplayController to use scanout buffers (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: . Created 6 years, 5 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
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 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 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "testing/gtest/include/gtest/gtest.h" 5 #include "testing/gtest/include/gtest/gtest.h"
6 #include "third_party/skia/include/core/SkCanvas.h" 6 #include "third_party/skia/include/core/SkCanvas.h"
7 #include "ui/ozone/platform/dri/dri_buffer.h" 7 #include "ui/ozone/platform/dri/dri_buffer.h"
8 #include "ui/ozone/platform/dri/dri_surface.h"
9 #include "ui/ozone/platform/dri/dri_wrapper.h" 8 #include "ui/ozone/platform/dri/dri_wrapper.h"
10 #include "ui/ozone/platform/dri/hardware_display_controller.h" 9 #include "ui/ozone/platform/dri/hardware_display_controller.h"
11 #include "ui/ozone/platform/dri/test/mock_dri_wrapper.h" 10 #include "ui/ozone/platform/dri/test/mock_dri_wrapper.h"
12 #include "ui/ozone/public/native_pixmap.h" 11 #include "ui/ozone/public/native_pixmap.h"
13 12
14 namespace { 13 namespace {
15 14
16 // Create a basic mode for a 6x4 screen. 15 // Create a basic mode for a 6x4 screen.
17 const drmModeModeInfo kDefaultMode = 16 const drmModeModeInfo kDefaultMode =
18 {0, 6, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, {'\0'}}; 17 {0, 6, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, {'\0'}};
19 18
20 const gfx::Size kDefaultModeSize(kDefaultMode.hdisplay, kDefaultMode.vdisplay); 19 const gfx::Size kDefaultModeSize(kDefaultMode.hdisplay, kDefaultMode.vdisplay);
21 const gfx::SizeF kDefaultModeSizeF(1.0, 1.0); 20 const gfx::SizeF kDefaultModeSizeF(1.0, 1.0);
22 21
22 class MockScanoutBuffer : public ui::ScanoutBuffer {
23 public:
24 MockScanoutBuffer(const gfx::Size& size) : size_(size) {}
25
26 // ScanoutBuffer:
27 virtual uint32_t GetFramebufferId() const OVERRIDE {return 0; }
28 virtual uint32_t GetHandle() const OVERRIDE { return 0; }
29 virtual gfx::Size GetSize() const OVERRIDE { return size_; }
30
31 private:
32 virtual ~MockScanoutBuffer() {}
33
34 gfx::Size size_;
35
36 DISALLOW_COPY_AND_ASSIGN(MockScanoutBuffer);
37 };
38
23 } // namespace 39 } // namespace
24 40
25 class HardwareDisplayControllerTest : public testing::Test { 41 class HardwareDisplayControllerTest : public testing::Test {
26 public: 42 public:
27 HardwareDisplayControllerTest() {} 43 HardwareDisplayControllerTest() {}
28 virtual ~HardwareDisplayControllerTest() {} 44 virtual ~HardwareDisplayControllerTest() {}
29 45
30 virtual void SetUp() OVERRIDE; 46 virtual void SetUp() OVERRIDE;
31 virtual void TearDown() OVERRIDE; 47 virtual void TearDown() OVERRIDE;
32 protected: 48 protected:
33 scoped_ptr<ui::HardwareDisplayController> controller_; 49 scoped_ptr<ui::HardwareDisplayController> controller_;
34 scoped_ptr<ui::MockDriWrapper> drm_; 50 scoped_ptr<ui::MockDriWrapper> drm_;
35 51
36 private: 52 private:
37 DISALLOW_COPY_AND_ASSIGN(HardwareDisplayControllerTest); 53 DISALLOW_COPY_AND_ASSIGN(HardwareDisplayControllerTest);
38 }; 54 };
39 55
40 void HardwareDisplayControllerTest::SetUp() { 56 void HardwareDisplayControllerTest::SetUp() {
41 drm_.reset(new ui::MockDriWrapper(3)); 57 drm_.reset(new ui::MockDriWrapper(3));
42 controller_.reset(new ui::HardwareDisplayController(drm_.get(), 1, 1)); 58 controller_.reset(new ui::HardwareDisplayController(drm_.get(), 1, 1));
43 } 59 }
44 60
45 void HardwareDisplayControllerTest::TearDown() { 61 void HardwareDisplayControllerTest::TearDown() {
46 controller_.reset(); 62 controller_.reset();
47 drm_.reset(); 63 drm_.reset();
48 } 64 }
49 65
50 TEST_F(HardwareDisplayControllerTest, CheckStateAfterSurfaceIsBound) { 66 TEST_F(HardwareDisplayControllerTest, CheckModesettingResult) {
51 scoped_ptr<ui::ScanoutSurface> surface( 67 ui::OverlayPlane plane(scoped_refptr<ui::ScanoutBuffer>(
52 new ui::DriSurface(drm_.get(), kDefaultModeSize)); 68 new MockScanoutBuffer(kDefaultModeSize)));
53 69
54 EXPECT_TRUE(surface->Initialize()); 70 EXPECT_TRUE(controller_->Modeset(plane, kDefaultMode));
55 EXPECT_TRUE(controller_->BindSurfaceToController(surface.Pass(), 71 EXPECT_FALSE(plane.buffer->HasOneRef());
56 kDefaultMode));
57 EXPECT_TRUE(controller_->surface() != NULL);
58 } 72 }
59 73
60 TEST_F(HardwareDisplayControllerTest, CheckStateAfterPageFlip) { 74 TEST_F(HardwareDisplayControllerTest, CheckStateAfterPageFlip) {
61 scoped_ptr<ui::ScanoutSurface> surface( 75 ui::OverlayPlane plane1(scoped_refptr<ui::ScanoutBuffer>(
62 new ui::DriSurface(drm_.get(), kDefaultModeSize)); 76 new MockScanoutBuffer(kDefaultModeSize)));
63 77
64 EXPECT_TRUE(surface->Initialize()); 78 EXPECT_TRUE(controller_->Modeset(plane1, kDefaultMode));
65 EXPECT_TRUE(controller_->BindSurfaceToController(surface.Pass(), 79
66 kDefaultMode)); 80 ui::OverlayPlane plane2(scoped_refptr<ui::ScanoutBuffer>(
81 new MockScanoutBuffer(kDefaultModeSize)));
67 EXPECT_TRUE(controller_->SchedulePageFlip( 82 EXPECT_TRUE(controller_->SchedulePageFlip(
68 std::vector<ui::OzoneOverlayPlane>(), NULL)); 83 std::vector<ui::OverlayPlane>(1, plane2)));
69 EXPECT_TRUE(controller_->surface() != NULL); 84 controller_->WaitForPageFlipEvent();
85 EXPECT_TRUE(plane1.buffer->HasOneRef());
86 EXPECT_FALSE(plane2.buffer->HasOneRef());
87
88 EXPECT_EQ(1, drm_->get_page_flip_call_count());
89 EXPECT_EQ(0, drm_->get_overlay_flip_call_count());
70 } 90 }
71 91
72 TEST_F(HardwareDisplayControllerTest, CheckStateIfModesetFails) { 92 TEST_F(HardwareDisplayControllerTest, CheckStateIfModesetFails) {
73 drm_->set_set_crtc_expectation(false); 93 drm_->set_set_crtc_expectation(false);
74 94
75 scoped_ptr<ui::ScanoutSurface> surface( 95 ui::OverlayPlane plane(scoped_refptr<ui::ScanoutBuffer>(new MockScanoutBuffer(
76 new ui::DriSurface(drm_.get(), kDefaultModeSize)); 96 kDefaultModeSize)));
77 97
78 EXPECT_TRUE(surface->Initialize()); 98 EXPECT_FALSE(controller_->Modeset(plane, kDefaultMode));
79 EXPECT_FALSE(controller_->BindSurfaceToController(surface.Pass(), 99 EXPECT_TRUE(plane.buffer->HasOneRef());
80 kDefaultMode));
81 EXPECT_EQ(NULL, controller_->surface());
82 } 100 }
83 101
84 TEST_F(HardwareDisplayControllerTest, CheckStateIfPageFlipFails) { 102 TEST_F(HardwareDisplayControllerTest, CheckStateIfPageFlipFails) {
85 drm_->set_page_flip_expectation(false); 103 drm_->set_page_flip_expectation(false);
86 104
87 scoped_ptr<ui::ScanoutSurface> surface( 105 ui::OverlayPlane plane1(scoped_refptr<ui::ScanoutBuffer>(
88 new ui::DriSurface(drm_.get(), kDefaultModeSize)); 106 new MockScanoutBuffer(kDefaultModeSize)));
89 107
90 EXPECT_TRUE(surface->Initialize()); 108 EXPECT_TRUE(controller_->Modeset(plane1, kDefaultMode));
91 EXPECT_TRUE(controller_->BindSurfaceToController(surface.Pass(), 109
92 kDefaultMode)); 110 ui::OverlayPlane plane2(scoped_refptr<ui::ScanoutBuffer>(
111 new MockScanoutBuffer(kDefaultModeSize)));
93 EXPECT_FALSE(controller_->SchedulePageFlip( 112 EXPECT_FALSE(controller_->SchedulePageFlip(
94 std::vector<ui::OzoneOverlayPlane>(), NULL)); 113 std::vector<ui::OverlayPlane>(1, plane2)));
114 EXPECT_FALSE(plane1.buffer->HasOneRef());
115 EXPECT_TRUE(plane2.buffer->HasOneRef());
95 } 116 }
96 117
97 TEST_F(HardwareDisplayControllerTest, VerifyNoDRMCallsWhenDisabled) { 118 TEST_F(HardwareDisplayControllerTest, VerifyNoDRMCallsWhenDisabled) {
98 scoped_ptr<ui::ScanoutSurface> surface( 119 ui::OverlayPlane plane1(scoped_refptr<ui::ScanoutBuffer>(
99 new ui::DriSurface(drm_.get(), kDefaultModeSize)); 120 new MockScanoutBuffer(kDefaultModeSize)));
100 121
101 EXPECT_TRUE(surface->Initialize()); 122 EXPECT_TRUE(controller_->Modeset(plane1, kDefaultMode));
102 EXPECT_TRUE(controller_->BindSurfaceToController(surface.Pass(),
103 kDefaultMode));
104 controller_->Disable(); 123 controller_->Disable();
124 ui::OverlayPlane plane2(scoped_refptr<ui::ScanoutBuffer>(
125 new MockScanoutBuffer(kDefaultModeSize)));
105 EXPECT_TRUE(controller_->SchedulePageFlip( 126 EXPECT_TRUE(controller_->SchedulePageFlip(
106 std::vector<ui::OzoneOverlayPlane>(), NULL)); 127 std::vector<ui::OverlayPlane>(1, plane2)));
128 controller_->WaitForPageFlipEvent();
107 EXPECT_EQ(0, drm_->get_page_flip_call_count()); 129 EXPECT_EQ(0, drm_->get_page_flip_call_count());
108 130
109 surface.reset(new ui::DriSurface(drm_.get(), kDefaultModeSize)); 131 EXPECT_TRUE(controller_->Modeset(plane1, kDefaultMode));
110
111 EXPECT_TRUE(surface->Initialize());
112 EXPECT_TRUE(controller_->BindSurfaceToController(surface.Pass(),
113 kDefaultMode));
114 EXPECT_TRUE(controller_->SchedulePageFlip( 132 EXPECT_TRUE(controller_->SchedulePageFlip(
115 std::vector<ui::OzoneOverlayPlane>(), NULL)); 133 std::vector<ui::OverlayPlane>(1, plane2)));
134 controller_->WaitForPageFlipEvent();
116 EXPECT_EQ(1, drm_->get_page_flip_call_count()); 135 EXPECT_EQ(1, drm_->get_page_flip_call_count());
117 } 136 }
118 137
119 TEST_F(HardwareDisplayControllerTest, CheckOverlayMainSurfaceReplacement) { 138 TEST_F(HardwareDisplayControllerTest, CheckOverlayPresent) {
120 scoped_ptr<ui::ScanoutSurface> surface( 139 ui::OverlayPlane plane1(scoped_refptr<ui::ScanoutBuffer>(
121 new ui::DriSurface(drm_.get(), kDefaultModeSize)); 140 new MockScanoutBuffer(kDefaultModeSize)));
122 scoped_ptr<ui::ScanoutSurface> overlay( 141 ui::OverlayPlane plane2(
123 new ui::DriSurface(drm_.get(), kDefaultModeSize)); 142 scoped_refptr<ui::ScanoutBuffer>(new MockScanoutBuffer(kDefaultModeSize)),
143 1,
144 gfx::OVERLAY_TRANSFORM_NONE,
145 gfx::Rect(kDefaultModeSize),
146 gfx::RectF(kDefaultModeSizeF));
147 plane2.overlay_plane = 1; // Force association with a plane.
124 148
125 EXPECT_TRUE(surface->Initialize()); 149 EXPECT_TRUE(controller_->Modeset(plane1, kDefaultMode));
126 EXPECT_TRUE(
127 controller_->BindSurfaceToController(surface.Pass(), kDefaultMode));
128 EXPECT_TRUE(overlay->Initialize());
129 150
130 std::vector<ui::OzoneOverlayPlane> overlays; 151 std::vector<ui::OverlayPlane> overlays;
131 std::vector<scoped_refptr<ui::NativePixmap> > overlay_refs; 152 overlays.push_back(plane1);
153 overlays.push_back(plane2);
132 154
133 overlays.push_back(ui::OzoneOverlayPlane(overlay.get(), 155 EXPECT_TRUE(controller_->SchedulePageFlip(overlays));
134 0, 156 controller_->WaitForPageFlipEvent();
135 gfx::OVERLAY_TRANSFORM_NONE,
136 gfx::Rect(kDefaultModeSize),
137 gfx::RectF(kDefaultModeSizeF)));
138
139 EXPECT_TRUE(controller_->SchedulePageFlip(overlays, &overlay_refs));
140 EXPECT_EQ(1, drm_->get_page_flip_call_count());
141 EXPECT_EQ(0, drm_->get_overlay_flip_call_count());
142 }
143
144 TEST_F(HardwareDisplayControllerTest, CheckOverlayPresent) {
145 scoped_ptr<ui::ScanoutSurface> surface(
146 new ui::DriSurface(drm_.get(), kDefaultModeSize));
147 scoped_ptr<ui::ScanoutSurface> overlay(
148 new ui::DriSurface(drm_.get(), kDefaultModeSize));
149
150 EXPECT_TRUE(surface->Initialize());
151 EXPECT_TRUE(
152 controller_->BindSurfaceToController(surface.Pass(), kDefaultMode));
153 EXPECT_TRUE(overlay->Initialize());
154
155 std::vector<ui::OzoneOverlayPlane> overlays;
156 std::vector<scoped_refptr<ui::NativePixmap> > overlay_refs;
157
158 overlays.push_back(ui::OzoneOverlayPlane(overlay.get(),
159 1,
160 gfx::OVERLAY_TRANSFORM_NONE,
161 gfx::Rect(kDefaultModeSize),
162 gfx::RectF(kDefaultModeSizeF)));
163 overlays.back().overlay_plane = 1; // Force association with a plane.
164
165 EXPECT_TRUE(controller_->SchedulePageFlip(overlays, &overlay_refs));
166 EXPECT_EQ(1, drm_->get_page_flip_call_count()); 157 EXPECT_EQ(1, drm_->get_page_flip_call_count());
167 EXPECT_EQ(1, drm_->get_overlay_flip_call_count()); 158 EXPECT_EQ(1, drm_->get_overlay_flip_call_count());
168 } 159 }
OLDNEW
« no previous file with comments | « ui/ozone/platform/dri/hardware_display_controller.cc ('k') | ui/ozone/platform/dri/ozone_platform_dri.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698