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

Side by Side Diff: ui/ozone/platform/drm/gpu/drm_window_unittest.cc

Issue 1420943003: [Ozone-DRM] Fix double call of swap buffers callback on failure (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@2526
Patch Set: Created 5 years, 1 month 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
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 <vector> 5 #include <vector>
6 6
7 #include "base/memory/scoped_ptr.h" 7 #include "base/memory/scoped_ptr.h"
8 #include "base/message_loop/message_loop.h" 8 #include "base/message_loop/message_loop.h"
9 #include "testing/gtest/include/gtest/gtest.h" 9 #include "testing/gtest/include/gtest/gtest.h"
10 #include "third_party/skia/include/core/SkCanvas.h" 10 #include "third_party/skia/include/core/SkCanvas.h"
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after
54 54
55 } // namespace 55 } // namespace
56 56
57 class DrmWindowTest : public testing::Test { 57 class DrmWindowTest : public testing::Test {
58 public: 58 public:
59 DrmWindowTest() {} 59 DrmWindowTest() {}
60 60
61 void SetUp() override; 61 void SetUp() override;
62 void TearDown() override; 62 void TearDown() override;
63 63
64 void OnSwapBuffers(gfx::SwapResult result) {
65 on_swap_buffers_count_++;
66 last_swap_buffers_result_ = result;
67 }
68
64 protected: 69 protected:
65 scoped_ptr<base::MessageLoop> message_loop_; 70 scoped_ptr<base::MessageLoop> message_loop_;
66 scoped_refptr<ui::MockDrmDevice> drm_; 71 scoped_refptr<ui::MockDrmDevice> drm_;
67 scoped_ptr<ui::DrmBufferGenerator> buffer_generator_; 72 scoped_ptr<ui::DrmBufferGenerator> buffer_generator_;
68 scoped_ptr<ui::ScreenManager> screen_manager_; 73 scoped_ptr<ui::ScreenManager> screen_manager_;
69 scoped_ptr<ui::DrmDeviceManager> drm_device_manager_; 74 scoped_ptr<ui::DrmDeviceManager> drm_device_manager_;
70 75
76 int on_swap_buffers_count_;
77 gfx::SwapResult last_swap_buffers_result_;
78
71 private: 79 private:
72 DISALLOW_COPY_AND_ASSIGN(DrmWindowTest); 80 DISALLOW_COPY_AND_ASSIGN(DrmWindowTest);
73 }; 81 };
74 82
75 void DrmWindowTest::SetUp() { 83 void DrmWindowTest::SetUp() {
84 on_swap_buffers_count_ = 0;
85 last_swap_buffers_result_ = gfx::SwapResult::SWAP_FAILED;
86
76 message_loop_.reset(new base::MessageLoopForUI); 87 message_loop_.reset(new base::MessageLoopForUI);
77 drm_ = new ui::MockDrmDevice(); 88 drm_ = new ui::MockDrmDevice();
78 buffer_generator_.reset(new ui::DrmBufferGenerator()); 89 buffer_generator_.reset(new ui::DrmBufferGenerator());
79 screen_manager_.reset(new ui::ScreenManager(buffer_generator_.get())); 90 screen_manager_.reset(new ui::ScreenManager(buffer_generator_.get()));
80 screen_manager_->AddDisplayController(drm_, kDefaultCrtc, kDefaultConnector); 91 screen_manager_->AddDisplayController(drm_, kDefaultCrtc, kDefaultConnector);
81 screen_manager_->ConfigureDisplayController( 92 screen_manager_->ConfigureDisplayController(
82 drm_, kDefaultCrtc, kDefaultConnector, gfx::Point(), kDefaultMode); 93 drm_, kDefaultCrtc, kDefaultConnector, gfx::Point(), kDefaultMode);
83 94
84 drm_device_manager_.reset(new ui::DrmDeviceManager(nullptr)); 95 drm_device_manager_.reset(new ui::DrmDeviceManager(nullptr));
85 96
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after
140 // Move window to the display on the new device. 151 // Move window to the display on the new device.
141 screen_manager_->GetWindow(kDefaultWidgetHandle) 152 screen_manager_->GetWindow(kDefaultWidgetHandle)
142 ->OnBoundsChanged(gfx::Rect(0, kDefaultMode.vdisplay, 153 ->OnBoundsChanged(gfx::Rect(0, kDefaultMode.vdisplay,
143 kDefaultMode.hdisplay, 154 kDefaultMode.hdisplay,
144 kDefaultMode.vdisplay)); 155 kDefaultMode.vdisplay));
145 156
146 EXPECT_EQ(2u, GetCursorBuffers(drm).size()); 157 EXPECT_EQ(2u, GetCursorBuffers(drm).size());
147 // Make sure the cursor is showing on the new display. 158 // Make sure the cursor is showing on the new display.
148 EXPECT_NE(0u, drm->get_cursor_handle_for_crtc(kDefaultCrtc)); 159 EXPECT_NE(0u, drm->get_cursor_handle_for_crtc(kDefaultCrtc));
149 } 160 }
161
162 TEST_F(DrmWindowTest, CheckCallbackOnFailedSwap) {
163 const gfx::Size window_size(6, 4);
164 ui::MockBufferGenerator buffer_generator;
165 ui::DrmWindow* window = screen_manager_->GetWindow(kDefaultWidgetHandle);
166 ui::OverlayPlane plane(
167 buffer_generator.Create(drm_, gfx::BufferFormat::BGRX_8888, window_size));
168
169 drm_->set_page_flip_expectation(false);
170
171 // Window was re-sized, so the expectation is to re-create the buffers first.
172 window->SchedulePageFlip(
173 std::vector<ui::OverlayPlane>(1, ui::OverlayPlane(plane)),
174 base::Bind(&DrmWindowTest::OnSwapBuffers, base::Unretained(this)));
175 EXPECT_EQ(1, on_swap_buffers_count_);
176 EXPECT_EQ(gfx::SwapResult::SWAP_NAK_RECREATE_BUFFERS,
177 last_swap_buffers_result_);
178
179 window->SchedulePageFlip(
180 std::vector<ui::OverlayPlane>(1, ui::OverlayPlane(plane)),
181 base::Bind(&DrmWindowTest::OnSwapBuffers, base::Unretained(this)));
182 EXPECT_EQ(2, on_swap_buffers_count_);
183 EXPECT_EQ(gfx::SwapResult::SWAP_FAILED, last_swap_buffers_result_);
184 }
OLDNEW
« no previous file with comments | « ui/ozone/platform/drm/gpu/drm_window.cc ('k') | ui/ozone/platform/drm/gpu/hardware_display_controller.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698