Index: ui/ozone/platform/dri/dri_surface_unittest.cc |
diff --git a/ui/ozone/platform/dri/dri_surface_unittest.cc b/ui/ozone/platform/dri/dri_surface_unittest.cc |
index 949c8c53241deae3dbb6e9a8d12133f085acae3d..7a5b8c51ba4c1a6956bf26757eb43e8dd11a7328 100644 |
--- a/ui/ozone/platform/dri/dri_surface_unittest.cc |
+++ b/ui/ozone/platform/dri/dri_surface_unittest.cc |
@@ -11,7 +11,9 @@ |
#include "ui/ozone/platform/dri/dri_buffer.h" |
#include "ui/ozone/platform/dri/dri_surface.h" |
#include "ui/ozone/platform/dri/dri_window_delegate.h" |
+#include "ui/ozone/platform/dri/drm_device_manager.h" |
#include "ui/ozone/platform/dri/hardware_display_controller.h" |
+#include "ui/ozone/platform/dri/screen_manager.h" |
#include "ui/ozone/platform/dri/test/mock_drm_device.h" |
namespace { |
@@ -20,43 +22,11 @@ namespace { |
const drmModeModeInfo kDefaultMode = |
{0, 6, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, {'\0'}}; |
+const gfx::AcceleratedWidget kDefaultWidgetHandle = 1; |
const uint32_t kDefaultCrtc = 1; |
const uint32_t kDefaultConnector = 2; |
const size_t kPlanesPerCrtc = 1; |
- |
-class MockDriWindowDelegate : public ui::DriWindowDelegate { |
- public: |
- MockDriWindowDelegate(ui::DrmDevice* drm) { |
- controller_.reset(new ui::HardwareDisplayController(make_scoped_ptr( |
- new ui::CrtcController(drm, kDefaultCrtc, kDefaultConnector)))); |
- scoped_refptr<ui::DriBuffer> buffer(new ui::DriBuffer(drm)); |
- SkImageInfo info = SkImageInfo::MakeN32Premul(kDefaultMode.hdisplay, |
- kDefaultMode.vdisplay); |
- EXPECT_TRUE(buffer->Initialize(info, true)); |
- EXPECT_TRUE(controller_->Modeset(ui::OverlayPlane(buffer), kDefaultMode)); |
- } |
- ~MockDriWindowDelegate() override {} |
- |
- // DriWindowDelegate: |
- void Initialize() override {} |
- void Shutdown() override {} |
- gfx::AcceleratedWidget GetAcceleratedWidget() override { return 1; } |
- ui::HardwareDisplayController* GetController() override { |
- return controller_.get(); |
- } |
- void OnBoundsChanged(const gfx::Rect& bounds) override {} |
- void SetCursor(const std::vector<SkBitmap>& bitmaps, |
- const gfx::Point& location, |
- int frame_delay_ms) override {} |
- void SetCursorWithoutAnimations(const std::vector<SkBitmap>& bitmaps, |
- const gfx::Point& location) override {} |
- void MoveCursor(const gfx::Point& location) override {} |
- |
- private: |
- scoped_ptr<ui::HardwareDisplayController> controller_; |
- |
- DISALLOW_COPY_AND_ASSIGN(MockDriWindowDelegate); |
-}; |
+const uint32_t kDefaultCursorSize = 64; |
} // namespace |
@@ -70,7 +40,10 @@ class DriSurfaceTest : public testing::Test { |
protected: |
scoped_ptr<base::MessageLoop> message_loop_; |
scoped_refptr<ui::MockDrmDevice> drm_; |
- scoped_ptr<MockDriWindowDelegate> window_delegate_; |
+ scoped_ptr<ui::DriBufferGenerator> buffer_generator_; |
+ scoped_ptr<ui::ScreenManager> screen_manager_; |
+ scoped_ptr<ui::DrmDeviceManager> drm_device_manager_; |
+ scoped_ptr<ui::DriWindowDelegate> window_delegate_; |
scoped_ptr<ui::DriSurface> surface_; |
private: |
@@ -82,7 +55,19 @@ void DriSurfaceTest::SetUp() { |
std::vector<uint32_t> crtcs; |
crtcs.push_back(kDefaultCrtc); |
drm_ = new ui::MockDrmDevice(true, crtcs, kPlanesPerCrtc); |
- window_delegate_.reset(new MockDriWindowDelegate(drm_.get())); |
+ buffer_generator_.reset(new ui::DriBufferGenerator()); |
+ screen_manager_.reset(new ui::ScreenManager(buffer_generator_.get())); |
+ screen_manager_->AddDisplayController(drm_, kDefaultCrtc, kDefaultConnector); |
+ screen_manager_->ConfigureDisplayController( |
+ drm_, kDefaultCrtc, kDefaultConnector, gfx::Point(), kDefaultMode); |
+ |
+ drm_device_manager_.reset(new ui::DrmDeviceManager(drm_)); |
+ window_delegate_.reset(new ui::DriWindowDelegate( |
+ kDefaultWidgetHandle, drm_device_manager_.get(), screen_manager_.get())); |
+ window_delegate_->Initialize(); |
+ window_delegate_->OnBoundsChanged( |
+ gfx::Rect(gfx::Size(kDefaultMode.hdisplay, kDefaultMode.vdisplay))); |
+ |
surface_.reset(new ui::DriSurface(window_delegate_.get())); |
surface_->ResizeCanvas(gfx::Size(kDefaultMode.hdisplay, |
kDefaultMode.vdisplay)); |
@@ -90,7 +75,7 @@ void DriSurfaceTest::SetUp() { |
void DriSurfaceTest::TearDown() { |
surface_.reset(); |
- window_delegate_.reset(); |
+ window_delegate_->Shutdown(); |
drm_ = nullptr; |
message_loop_.reset(); |
} |
@@ -113,12 +98,22 @@ TEST_F(DriSurfaceTest, CheckSurfaceContents) { |
gfx::Rect(0, 0, kDefaultMode.hdisplay / 2, kDefaultMode.vdisplay / 2)); |
SkBitmap image; |
- // Buffer 0 is the buffer used in SetUp for modesetting and buffer 1 is the |
- // frontbuffer. |
- // Buffer 2 is the backbuffer we just painted in, so we want to make sure its |
- // contents are correct. |
- image.setInfo(drm_->buffers()[2]->getCanvas()->imageInfo()); |
- EXPECT_TRUE(drm_->buffers()[2]->getCanvas()->readPixels(&image, 0, 0)); |
+ std::vector<skia::RefPtr<SkSurface>> framebuffers; |
+ for (const auto& buffer : drm_->buffers()) { |
+ // Skip cursor buffers. |
+ if (buffer->width() == kDefaultCursorSize && |
+ buffer->height() == kDefaultCursorSize) |
+ continue; |
+ |
+ framebuffers.push_back(buffer); |
+ } |
+ |
+ // Buffer 0 is the modesetting buffer, buffer 1 is the frontbuffer and buffer |
+ // 2 is the backbuffer. |
+ EXPECT_EQ(3u, framebuffers.size()); |
+ |
+ image.setInfo(framebuffers[2]->getCanvas()->imageInfo()); |
+ EXPECT_TRUE(framebuffers[2]->getCanvas()->readPixels(&image, 0, 0)); |
EXPECT_EQ(kDefaultMode.hdisplay, image.width()); |
EXPECT_EQ(kDefaultMode.vdisplay, image.height()); |