OLD | NEW |
---|---|
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 "base/message_loop/message_loop.h" | 5 #include "base/message_loop/message_loop.h" |
6 #include "testing/gtest/include/gtest/gtest.h" | 6 #include "testing/gtest/include/gtest/gtest.h" |
7 #include "third_party/skia/include/core/SkCanvas.h" | 7 #include "third_party/skia/include/core/SkCanvas.h" |
8 #include "third_party/skia/include/core/SkColor.h" | 8 #include "third_party/skia/include/core/SkColor.h" |
9 #include "third_party/skia/include/core/SkDevice.h" | 9 #include "third_party/skia/include/core/SkDevice.h" |
10 #include "ui/ozone/platform/dri/crtc_state.h" | 10 #include "ui/ozone/platform/dri/crtc_state.h" |
11 #include "ui/ozone/platform/dri/dri_buffer.h" | 11 #include "ui/ozone/platform/dri/dri_buffer.h" |
12 #include "ui/ozone/platform/dri/dri_surface.h" | 12 #include "ui/ozone/platform/dri/dri_surface.h" |
13 #include "ui/ozone/platform/dri/dri_window_delegate.h" | |
13 #include "ui/ozone/platform/dri/hardware_display_controller.h" | 14 #include "ui/ozone/platform/dri/hardware_display_controller.h" |
14 #include "ui/ozone/platform/dri/test/mock_dri_wrapper.h" | 15 #include "ui/ozone/platform/dri/test/mock_dri_wrapper.h" |
15 | 16 |
16 namespace { | 17 namespace { |
17 | 18 |
18 // Create a basic mode for a 6x4 screen. | 19 // Create a basic mode for a 6x4 screen. |
19 const drmModeModeInfo kDefaultMode = | 20 const drmModeModeInfo kDefaultMode = |
20 {0, 6, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, {'\0'}}; | 21 {0, 6, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, {'\0'}}; |
21 | 22 |
22 const uint32_t kDefaultCrtc = 1; | 23 const uint32_t kDefaultCrtc = 1; |
23 const uint32_t kDefaultConnector = 2; | 24 const uint32_t kDefaultConnector = 2; |
24 | 25 |
26 class MockDriWindowDelegate : public ui::DriWindowDelegate { | |
27 public: | |
28 MockDriWindowDelegate(ui::DriWrapper* drm) { | |
29 controller_.reset(new ui::HardwareDisplayController( | |
30 drm, | |
31 scoped_ptr<ui::CrtcState>( | |
alexst (slow to review)
2014/08/20 21:51:09
nit: I think using make_scoped_ptr() is a bit clea
dnicoara
2014/08/21 20:54:17
Done.
| |
32 new ui::CrtcState(drm, kDefaultCrtc, kDefaultConnector)))); | |
33 scoped_refptr<ui::DriBuffer> buffer(new ui::DriBuffer(drm)); | |
34 SkImageInfo info = SkImageInfo::MakeN32Premul(kDefaultMode.hdisplay, | |
35 kDefaultMode.vdisplay); | |
36 EXPECT_TRUE(buffer->Initialize(info)); | |
37 EXPECT_TRUE(controller_->Modeset(ui::OverlayPlane(buffer), kDefaultMode)); | |
38 } | |
39 virtual ~MockDriWindowDelegate() {} | |
40 | |
41 // DriWindowDelegate: | |
42 virtual void Initialize() OVERRIDE {} | |
43 virtual void Shutdown() OVERRIDE {} | |
44 virtual gfx::AcceleratedWidget GetAcceleratedWidget() OVERRIDE { return 1; } | |
45 virtual ui::HardwareDisplayController* GetController() OVERRIDE { | |
46 return controller_.get(); | |
47 } | |
48 virtual void OnBoundsChanged(const gfx::Rect& bounds) OVERRIDE {} | |
49 | |
50 private: | |
51 scoped_ptr<ui::HardwareDisplayController> controller_; | |
52 | |
53 DISALLOW_COPY_AND_ASSIGN(MockDriWindowDelegate); | |
54 }; | |
55 | |
25 } // namespace | 56 } // namespace |
26 | 57 |
27 class DriSurfaceTest : public testing::Test { | 58 class DriSurfaceTest : public testing::Test { |
28 public: | 59 public: |
29 DriSurfaceTest() {} | 60 DriSurfaceTest() {} |
30 | 61 |
31 virtual void SetUp() OVERRIDE; | 62 virtual void SetUp() OVERRIDE; |
32 virtual void TearDown() OVERRIDE; | 63 virtual void TearDown() OVERRIDE; |
33 | 64 |
34 protected: | 65 protected: |
35 scoped_ptr<base::MessageLoop> message_loop_; | 66 scoped_ptr<base::MessageLoop> message_loop_; |
36 scoped_ptr<ui::MockDriWrapper> drm_; | 67 scoped_ptr<ui::MockDriWrapper> drm_; |
37 scoped_ptr<ui::HardwareDisplayController> controller_; | 68 scoped_ptr<MockDriWindowDelegate> window_delegate_; |
38 scoped_ptr<ui::DriSurface> surface_; | 69 scoped_ptr<ui::DriSurface> surface_; |
39 | 70 |
40 private: | 71 private: |
41 DISALLOW_COPY_AND_ASSIGN(DriSurfaceTest); | 72 DISALLOW_COPY_AND_ASSIGN(DriSurfaceTest); |
42 }; | 73 }; |
43 | 74 |
44 void DriSurfaceTest::SetUp() { | 75 void DriSurfaceTest::SetUp() { |
45 message_loop_.reset(new base::MessageLoopForUI); | 76 message_loop_.reset(new base::MessageLoopForUI); |
46 drm_.reset(new ui::MockDriWrapper(3)); | 77 drm_.reset(new ui::MockDriWrapper(3)); |
47 | 78 window_delegate_.reset(new MockDriWindowDelegate(drm_.get())); |
48 controller_.reset(new ui::HardwareDisplayController( | 79 surface_.reset(new ui::DriSurface(window_delegate_.get(), drm_.get())); |
49 drm_.get(), | |
50 scoped_ptr<ui::CrtcState>( | |
51 new ui::CrtcState(drm_.get(), kDefaultCrtc, kDefaultConnector)))); | |
52 scoped_refptr<ui::DriBuffer> buffer(new ui::DriBuffer(drm_.get())); | |
53 SkImageInfo info = SkImageInfo::MakeN32Premul(kDefaultMode.hdisplay, | |
54 kDefaultMode.vdisplay); | |
55 EXPECT_TRUE(buffer->Initialize(info)); | |
56 EXPECT_TRUE(controller_->Modeset(ui::OverlayPlane(buffer), kDefaultMode)); | |
57 | |
58 surface_.reset(new ui::DriSurface(drm_.get(), controller_->AsWeakPtr())); | |
59 surface_->ResizeCanvas(gfx::Size(kDefaultMode.hdisplay, | 80 surface_->ResizeCanvas(gfx::Size(kDefaultMode.hdisplay, |
60 kDefaultMode.vdisplay)); | 81 kDefaultMode.vdisplay)); |
61 } | 82 } |
62 | 83 |
63 void DriSurfaceTest::TearDown() { | 84 void DriSurfaceTest::TearDown() { |
64 surface_.reset(); | 85 surface_.reset(); |
65 controller_.reset(); | 86 window_delegate_.reset(); |
66 drm_.reset(); | 87 drm_.reset(); |
67 message_loop_.reset(); | 88 message_loop_.reset(); |
68 } | 89 } |
69 | 90 |
70 TEST_F(DriSurfaceTest, CheckFBIDOnSwap) { | 91 TEST_F(DriSurfaceTest, CheckFBIDOnSwap) { |
71 surface_->PresentCanvas(gfx::Rect()); | 92 surface_->PresentCanvas(gfx::Rect()); |
72 // Framebuffer ID 1 is allocated in SetUp for the buffer used to modeset. | 93 // Framebuffer ID 1 is allocated in SetUp for the buffer used to modeset. |
73 EXPECT_EQ(3u, drm_->current_framebuffer()); | 94 EXPECT_EQ(3u, drm_->current_framebuffer()); |
74 surface_->PresentCanvas(gfx::Rect()); | 95 surface_->PresentCanvas(gfx::Rect()); |
75 EXPECT_EQ(2u, drm_->current_framebuffer()); | 96 EXPECT_EQ(2u, drm_->current_framebuffer()); |
(...skipping 22 matching lines...) Expand all Loading... | |
98 // Make sure the updates are correctly propagated to the native surface. | 119 // Make sure the updates are correctly propagated to the native surface. |
99 for (int i = 0; i < image.height(); ++i) { | 120 for (int i = 0; i < image.height(); ++i) { |
100 for (int j = 0; j < image.width(); ++j) { | 121 for (int j = 0; j < image.width(); ++j) { |
101 if (j < kDefaultMode.hdisplay / 2 && i < kDefaultMode.vdisplay / 2) | 122 if (j < kDefaultMode.hdisplay / 2 && i < kDefaultMode.vdisplay / 2) |
102 EXPECT_EQ(SK_ColorWHITE, image.getColor(j, i)); | 123 EXPECT_EQ(SK_ColorWHITE, image.getColor(j, i)); |
103 else | 124 else |
104 EXPECT_EQ(SK_ColorBLACK, image.getColor(j, i)); | 125 EXPECT_EQ(SK_ColorBLACK, image.getColor(j, i)); |
105 } | 126 } |
106 } | 127 } |
107 } | 128 } |
OLD | NEW |