diff options
author | dnicoara@chromium.org <dnicoara@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2014-07-17 21:28:59 +0000 |
---|---|---|
committer | dnicoara@chromium.org <dnicoara@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2014-07-17 21:28:59 +0000 |
commit | 89318cd3b6eb85781d4b6e63b932bbdf1f898b56 (patch) | |
tree | 444f4d12a1d8a8fd275a4ee34d8064bc879032b2 | |
parent | d355780d6cd5bea76c3cd797c79c2b312a4baa86 (diff) | |
download | chromium_src-89318cd3b6eb85781d4b6e63b932bbdf1f898b56.zip chromium_src-89318cd3b6eb85781d4b6e63b932bbdf1f898b56.tar.gz chromium_src-89318cd3b6eb85781d4b6e63b932bbdf1f898b56.tar.bz2 |
[Ozone-DRI] Removing MockDriSurface implementation
Consolidating all the mocked components in DriWrapper for easier
testability of the DRI platform. This should also simplify unittesting
since there won't be a need for interfaces and factories for the sake of
testing.
BUG=none
NOTRY=true
Review URL: https://codereview.chromium.org/402773002
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@283885 0039d316-1c4b-4281-b951-d872f2087c98
-rw-r--r-- | ui/ozone/platform/dri/dri.gypi | 2 | ||||
-rw-r--r-- | ui/ozone/platform/dri/dri_buffer.cc | 57 | ||||
-rw-r--r-- | ui/ozone/platform/dri/dri_buffer.h | 6 | ||||
-rw-r--r-- | ui/ozone/platform/dri/dri_surface.cc | 4 | ||||
-rw-r--r-- | ui/ozone/platform/dri/dri_surface.h | 3 | ||||
-rw-r--r-- | ui/ozone/platform/dri/dri_surface_factory_unittest.cc | 64 | ||||
-rw-r--r-- | ui/ozone/platform/dri/dri_surface_unittest.cc | 36 | ||||
-rw-r--r-- | ui/ozone/platform/dri/dri_wrapper.cc | 67 | ||||
-rw-r--r-- | ui/ozone/platform/dri/dri_wrapper.h | 12 | ||||
-rw-r--r-- | ui/ozone/platform/dri/hardware_display_controller_unittest.cc | 21 | ||||
-rw-r--r-- | ui/ozone/platform/dri/test/mock_dri_surface.cc | 53 | ||||
-rw-r--r-- | ui/ozone/platform/dri/test/mock_dri_surface.h | 45 | ||||
-rw-r--r-- | ui/ozone/platform/dri/test/mock_dri_wrapper.cc | 28 | ||||
-rw-r--r-- | ui/ozone/platform/dri/test/mock_dri_wrapper.h | 22 | ||||
-rw-r--r-- | ui/ozone/platform/dri/test/mock_surface_generator.cc | 2 | ||||
-rw-r--r-- | ui/ozone/platform/dri/test/mock_surface_generator.h | 6 |
16 files changed, 171 insertions, 257 deletions
diff --git a/ui/ozone/platform/dri/dri.gypi b/ui/ozone/platform/dri/dri.gypi index e26cb20..ab5ba6a 100644 --- a/ui/ozone/platform/dri/dri.gypi +++ b/ui/ozone/platform/dri/dri.gypi @@ -98,8 +98,6 @@ 'dri_surface_unittest.cc', 'hardware_display_controller_unittest.cc', 'screen_manager_unittest.cc', - 'test/mock_dri_surface.cc', - 'test/mock_dri_surface.h', 'test/mock_dri_wrapper.cc', 'test/mock_dri_wrapper.h', 'test/mock_surface_generator.cc', diff --git a/ui/ozone/platform/dri/dri_buffer.cc b/ui/ozone/platform/dri/dri_buffer.cc index 1933fe6..6fab686 100644 --- a/ui/ozone/platform/dri/dri_buffer.cc +++ b/ui/ozone/platform/dri/dri_buffer.cc @@ -4,14 +4,7 @@ #include "ui/ozone/platform/dri/dri_buffer.h" -#include <errno.h> -#include <sys/mman.h> -#include <sys/types.h> -#include <xf86drm.h> - #include "base/logging.h" -#include "third_party/skia/include/core/SkCanvas.h" -#include "ui/ozone/platform/dri/dri_util.h" #include "ui/ozone/platform/dri/dri_wrapper.h" namespace ui { @@ -39,40 +32,6 @@ uint8_t GetColorDepth(SkColorType type) { } } -void DestroyDumbBuffer(int fd, uint32_t handle) { - struct drm_mode_destroy_dumb destroy_request; - memset(&destroy_request, 0, sizeof(destroy_request)); - destroy_request.handle = handle; - drmIoctl(fd, DRM_IOCTL_MODE_DESTROY_DUMB, &destroy_request); -} - -bool CreateDumbBuffer(int fd, - const SkImageInfo& info, - uint32_t* handle, - uint32_t* stride) { - struct drm_mode_create_dumb request; - memset(&request, 0, sizeof(request)); - request.width = info.width(); - request.height = info.height(); - request.bpp = info.bytesPerPixel() << 3; - request.flags = 0; - - if (drmIoctl(fd, DRM_IOCTL_MODE_CREATE_DUMB, &request) < 0) { - VLOG(2) << "Cannot create dumb buffer (" << errno << ") " - << strerror(errno); - return false; - } - - // The driver may choose to align the last row as well. We don't care about - // the last alignment bits since they aren't used for display purposes, so - // just check that the expected size is <= to what the driver allocated. - DCHECK_LE(info.getSafeSize(request.pitch), request.size); - - *handle = request.handle; - *stride = request.pitch; - return true; -} - } // namespace DriBuffer::DriBuffer(DriWrapper* dri) @@ -90,23 +49,13 @@ DriBuffer::~DriBuffer() { if (!pixels) return; - munmap(pixels, info.getSafeSize(stride_)); - DestroyDumbBuffer(dri_->get_fd(), handle_); + dri_->DestroyDumbBuffer(info, handle_, stride_, pixels); } bool DriBuffer::Initialize(const SkImageInfo& info) { void* pixels = NULL; - if (!CreateDumbBuffer(dri_->get_fd(), info, &handle_, &stride_)) { - VLOG(2) << "Cannot allocate drm dumb buffer"; - return false; - } - - if (!MapDumbBuffer(dri_->get_fd(), - handle_, - info.getSafeSize(stride_), - &pixels)) { - VLOG(2) << "Cannot map drm dumb buffer"; - DestroyDumbBuffer(dri_->get_fd(), handle_); + if (!dri_->CreateDumbBuffer(info, &handle_, &stride_, &pixels)) { + VLOG(2) << "Cannot create drm dumb buffer"; return false; } diff --git a/ui/ozone/platform/dri/dri_buffer.h b/ui/ozone/platform/dri/dri_buffer.h index 072e007..342f6a6 100644 --- a/ui/ozone/platform/dri/dri_buffer.h +++ b/ui/ozone/platform/dri/dri_buffer.h @@ -21,7 +21,7 @@ class DriWrapper; class DriBuffer { public: DriBuffer(DriWrapper* dri); - virtual ~DriBuffer(); + ~DriBuffer(); uint32_t stride() const { return stride_; } uint32_t handle() const { return handle_; } @@ -30,9 +30,9 @@ class DriBuffer { // Allocates the backing pixels and wraps them in |surface_|. |info| is used // to describe the buffer characteristics (size, color format). - virtual bool Initialize(const SkImageInfo& info); + bool Initialize(const SkImageInfo& info); - protected: + private: DriWrapper* dri_; // Not owned. // Wrapper around the native pixel memory. diff --git a/ui/ozone/platform/dri/dri_surface.cc b/ui/ozone/platform/dri/dri_surface.cc index 0dbfdf9..634654a 100644 --- a/ui/ozone/platform/dri/dri_surface.cc +++ b/ui/ozone/platform/dri/dri_surface.cc @@ -31,7 +31,7 @@ DriSurface::~DriSurface() { bool DriSurface::Initialize() { for (size_t i = 0; i < arraysize(bitmaps_); ++i) { - bitmaps_[i].reset(CreateBuffer()); + bitmaps_[i].reset(new DriBuffer(dri_)); // TODO(dnicoara) Should select the configuration based on what the // underlying system supports. SkImageInfo info = SkImageInfo::MakeN32Premul(size_.width(), @@ -76,6 +76,4 @@ SkCanvas* DriSurface::GetDrawableForWidget() { return backbuffer()->canvas(); } -DriBuffer* DriSurface::CreateBuffer() { return new DriBuffer(dri_); } - } // namespace ui diff --git a/ui/ozone/platform/dri/dri_surface.h b/ui/ozone/platform/dri/dri_surface.h index f2fb199..f6fa413 100644 --- a/ui/ozone/platform/dri/dri_surface.h +++ b/ui/ozone/platform/dri/dri_surface.h @@ -40,9 +40,6 @@ class DriSurface : public ScanoutSurface { DriBuffer* frontbuffer() const { return bitmaps_[front_buffer_].get(); } DriBuffer* backbuffer() const { return bitmaps_[front_buffer_ ^ 1].get(); } - // Used to create the backing buffers. - virtual DriBuffer* CreateBuffer(); - // Stores the connection to the graphics card. Pointer not owned by this // class. DriWrapper* dri_; diff --git a/ui/ozone/platform/dri/dri_surface_factory_unittest.cc b/ui/ozone/platform/dri/dri_surface_factory_unittest.cc index 13d81cb..e5bf3c0 100644 --- a/ui/ozone/platform/dri/dri_surface_factory_unittest.cc +++ b/ui/ozone/platform/dri/dri_surface_factory_unittest.cc @@ -15,7 +15,6 @@ #include "ui/ozone/platform/dri/dri_surface_factory.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_dri_surface.h" #include "ui/ozone/platform/dri/test/mock_dri_wrapper.h" #include "ui/ozone/platform/dri/test/mock_surface_generator.h" #include "ui/ozone/public/surface_factory_ozone.h" @@ -26,33 +25,6 @@ namespace { const drmModeModeInfo kDefaultMode = {0, 6, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, {'\0'}}; -// SSFO would normally allocate DRM resources. We can't rely on having a DRM -// backend to allocate and display our buffers. Thus, we replace these -// resources with stubs. For DRM calls, we simply use stubs that do nothing and -// for buffers we use the default SkBitmap allocator. -class MockDriSurfaceFactory : public ui::DriSurfaceFactory { - public: - MockDriSurfaceFactory(ui::DriWrapper* dri, ui::ScreenManager* screen_manager) - : DriSurfaceFactory(dri, screen_manager), dri_(dri) {} - virtual ~MockDriSurfaceFactory() {}; - - const std::vector<ui::MockDriSurface*>& get_surfaces() const { - return surfaces_; - } - - private: - virtual ui::DriSurface* CreateSurface(const gfx::Size& size) OVERRIDE { - ui::MockDriSurface* surface = new ui::MockDriSurface(dri_, size); - surfaces_.push_back(surface); - return surface; - } - - ui::DriWrapper* dri_; - std::vector<ui::MockDriSurface*> surfaces_; // Not owned. - - DISALLOW_COPY_AND_ASSIGN(MockDriSurfaceFactory); -}; - class MockScreenManager : public ui::ScreenManager { public: MockScreenManager(ui::DriWrapper* dri, @@ -69,7 +41,6 @@ class MockScreenManager : public ui::ScreenManager { private: ui::DriWrapper* dri_; // Not owned. - std::vector<ui::MockDriSurface*> surfaces_; // Not owned. DISALLOW_COPY_AND_ASSIGN(MockScreenManager); }; @@ -87,7 +58,7 @@ class DriSurfaceFactoryTest : public testing::Test { scoped_ptr<ui::MockDriWrapper> dri_; scoped_ptr<ui::MockSurfaceGenerator> surface_generator_; scoped_ptr<MockScreenManager> screen_manager_; - scoped_ptr<MockDriSurfaceFactory> factory_; + scoped_ptr<ui::DriSurfaceFactory> factory_; private: DISALLOW_COPY_AND_ASSIGN(DriSurfaceFactoryTest); @@ -99,7 +70,7 @@ void DriSurfaceFactoryTest::SetUp() { surface_generator_.reset(new ui::MockSurfaceGenerator(dri_.get())); screen_manager_.reset(new MockScreenManager(dri_.get(), surface_generator_.get())); - factory_.reset(new MockDriSurfaceFactory(dri_.get(), screen_manager_.get())); + factory_.reset(new ui::DriSurfaceFactory(dri_.get(), screen_manager_.get())); } void DriSurfaceFactoryTest::TearDown() { @@ -139,15 +110,24 @@ TEST_F(DriSurfaceFactoryTest, CheckNativeSurfaceContents) { surface->ResizeCanvas( gfx::Size(kDefaultMode.hdisplay, kDefaultMode.vdisplay)); - surface->GetCanvas()->drawColor(SK_ColorWHITE); + + SkPaint paint; + paint.setColor(SK_ColorWHITE); + SkRect rect = SkRect::MakeWH(kDefaultMode.hdisplay / 2, + kDefaultMode.vdisplay / 2); + surface->GetCanvas()->drawRect(rect, paint); surface->PresentCanvas( gfx::Rect(0, 0, kDefaultMode.hdisplay / 2, kDefaultMode.vdisplay / 2)); - const std::vector<ui::DriBuffer*>& bitmaps = - surface_generator_->surfaces()[0]->bitmaps(); - SkBitmap image; - bitmaps[1]->canvas()->readPixels(&image, 0, 0); + // Buffers 0 and 1 are the cursor buffers and 2 and 3 are the surface buffers. + // Buffer 3 is the backbuffer we just painted in, so we want to make sure its + // contents are correct. + image.setInfo(dri_->buffers()[3]->getCanvas()->imageInfo()); + EXPECT_TRUE(dri_->buffers()[3]->getCanvas()->readPixels(&image, 0, 0)); + + EXPECT_EQ(kDefaultMode.hdisplay, image.width()); + EXPECT_EQ(kDefaultMode.vdisplay, image.height()); // Make sure the updates are correctly propagated to the native surface. for (int i = 0; i < image.height(); ++i) { @@ -177,17 +157,11 @@ TEST_F(DriSurfaceFactoryTest, SetCursorImage) { image.eraseColor(SK_ColorWHITE); factory_->SetHardwareCursor(w, image, gfx::Point(4, 2)); - const std::vector<ui::MockDriSurface*>& surfaces = factory_->get_surfaces(); - - // The first surface is the cursor surface since it is allocated early in the - // initialization process. - const std::vector<ui::DriBuffer*>& bitmaps = surfaces[0]->bitmaps(); - - // The surface should have been initialized to a double-buffered surface. - EXPECT_EQ(2u, bitmaps.size()); SkBitmap cursor; - bitmaps[1]->canvas()->readPixels(&cursor, 0, 0); + // Buffers 0 and 1 are the cursor buffers. + cursor.setInfo(dri_->buffers()[1]->getCanvas()->imageInfo()); + EXPECT_TRUE(dri_->buffers()[1]->getCanvas()->readPixels(&cursor, 0, 0)); // Check that the frontbuffer is displaying the right image as set above. for (int i = 0; i < cursor.height(); ++i) { diff --git a/ui/ozone/platform/dri/dri_surface_unittest.cc b/ui/ozone/platform/dri/dri_surface_unittest.cc index 397e54f..7d7fdb0 100644 --- a/ui/ozone/platform/dri/dri_surface_unittest.cc +++ b/ui/ozone/platform/dri/dri_surface_unittest.cc @@ -9,7 +9,6 @@ #include "ui/ozone/platform/dri/dri_buffer.h" #include "ui/ozone/platform/dri/dri_surface.h" #include "ui/ozone/platform/dri/hardware_display_controller.h" -#include "ui/ozone/platform/dri/test/mock_dri_surface.h" #include "ui/ozone/platform/dri/test/mock_dri_wrapper.h" namespace { @@ -30,7 +29,7 @@ class DriSurfaceTest : public testing::Test { protected: scoped_ptr<ui::MockDriWrapper> drm_; scoped_ptr<ui::HardwareDisplayController> controller_; - scoped_ptr<ui::MockDriSurface> surface_; + scoped_ptr<ui::DriSurface> surface_; private: DISALLOW_COPY_AND_ASSIGN(DriSurfaceTest); @@ -40,7 +39,7 @@ void DriSurfaceTest::SetUp() { drm_.reset(new ui::MockDriWrapper(3)); controller_.reset(new ui::HardwareDisplayController(drm_.get(), 1, 1)); - surface_.reset(new ui::MockDriSurface( + surface_.reset(new ui::DriSurface( drm_.get(), gfx::Size(kDefaultMode.hdisplay, kDefaultMode.vdisplay))); } @@ -51,7 +50,7 @@ void DriSurfaceTest::TearDown() { } TEST_F(DriSurfaceTest, FailInitialization) { - surface_->set_initialize_expectation(false); + drm_->set_create_dumb_buffer_expectation(false); EXPECT_FALSE(surface_->Initialize()); } @@ -87,32 +86,3 @@ TEST_F(DriSurfaceTest, CheckPixelPointerOnSwap) { // pixels have been changed. EXPECT_NE(bitmap_pixels1, bitmap_pixels2); } - -TEST_F(DriSurfaceTest, CheckCorrectBufferSync) { - EXPECT_TRUE(surface_->Initialize()); - - SkCanvas* canvas = surface_->GetDrawableForWidget(); - SkRect clip; - // Modify part of the canvas. - clip.set(0, 0, - canvas->getDeviceSize().width() / 2, - canvas->getDeviceSize().height() / 2); - canvas->clipRect(clip, SkRegion::kReplace_Op); - - canvas->drawColor(SK_ColorWHITE); - - surface_->SwapBuffers(); - - // Verify that the modified contents have been copied over on swap (make sure - // the 2 buffers have the same content). - for (int i = 0; i < canvas->getDeviceSize().height(); ++i) { - for (int j = 0; j < canvas->getDeviceSize().width(); ++j) { - if (i < clip.height() && j < clip.width()) - EXPECT_EQ(SK_ColorWHITE, - canvas->getDevice()->accessBitmap(false).getColor(j, i)); - else - EXPECT_EQ(SK_ColorBLACK, - canvas->getDevice()->accessBitmap(false).getColor(j, i)); - } - } -} diff --git a/ui/ozone/platform/dri/dri_wrapper.cc b/ui/ozone/platform/dri/dri_wrapper.cc index 908ddf0..035243c 100644 --- a/ui/ozone/platform/dri/dri_wrapper.cc +++ b/ui/ozone/platform/dri/dri_wrapper.cc @@ -5,18 +5,58 @@ #include "ui/ozone/platform/dri/dri_wrapper.h" #include <fcntl.h> +#include <sys/mman.h> #include <unistd.h> #include <xf86drm.h> #include <xf86drmMode.h> #include "base/logging.h" +#include "third_party/skia/include/core/SkImageInfo.h" +#include "ui/ozone/platform/dri/dri_util.h" namespace ui { + namespace { + uint32_t ToFixedPoint(double v) { // This returns a number in a 16-bit.16-bit fixed point. return v * 65536.0; } + +bool DrmCreateDumbBuffer(int fd, + const SkImageInfo& info, + uint32_t* handle, + uint32_t* stride) { + struct drm_mode_create_dumb request; + memset(&request, 0, sizeof(request)); + request.width = info.width(); + request.height = info.height(); + request.bpp = info.bytesPerPixel() << 3; + request.flags = 0; + + if (drmIoctl(fd, DRM_IOCTL_MODE_CREATE_DUMB, &request) < 0) { + VLOG(2) << "Cannot create dumb buffer (" << errno << ") " + << strerror(errno); + return false; + } + + // The driver may choose to align the last row as well. We don't care about + // the last alignment bits since they aren't used for display purposes, so + // just check that the expected size is <= to what the driver allocated. + DCHECK_LE(info.getSafeSize(request.pitch), request.size); + + *handle = request.handle; + *stride = request.pitch; + return true; +} + +void DrmDestroyDumbBuffer(int fd, uint32_t handle) { + struct drm_mode_destroy_dumb destroy_request; + memset(&destroy_request, 0, sizeof(destroy_request)); + destroy_request.handle = handle; + drmIoctl(fd, DRM_IOCTL_MODE_DESTROY_DUMB, &destroy_request); +} + } // namespace DriWrapper::DriWrapper(const char* device_path) { @@ -174,4 +214,31 @@ void DriWrapper::HandleEvent(drmEventContext& event) { drmHandleEvent(fd_, &event); } +bool DriWrapper::CreateDumbBuffer(const SkImageInfo& info, + uint32_t* handle, + uint32_t* stride, + void** pixels) { + CHECK(fd_ >= 0); + + if (!DrmCreateDumbBuffer(fd_, info, handle, stride)) + return false; + + if (!MapDumbBuffer(fd_, *handle, info.getSafeSize(*stride), pixels)) { + DrmDestroyDumbBuffer(fd_, *handle); + return false; + } + + return true; +} + +void DriWrapper::DestroyDumbBuffer(const SkImageInfo& info, + uint32_t handle, + uint32_t stride, + void* pixels) { + CHECK(fd_ >= 0); + munmap(pixels, info.getSafeSize(stride)); + DrmDestroyDumbBuffer(fd_, handle); +} + + } // namespace ui diff --git a/ui/ozone/platform/dri/dri_wrapper.h b/ui/ozone/platform/dri/dri_wrapper.h index 9b94ddd..adb828f 100644 --- a/ui/ozone/platform/dri/dri_wrapper.h +++ b/ui/ozone/platform/dri/dri_wrapper.h @@ -16,6 +16,8 @@ typedef struct _drmEventContext drmEventContext; typedef struct _drmModeModeInfo drmModeModeInfo; +struct SkImageInfo; + namespace ui { // Wraps DRM calls into a nice interface. Used to provide different @@ -111,6 +113,16 @@ class DriWrapper { virtual void HandleEvent(drmEventContext& event); + virtual bool CreateDumbBuffer(const SkImageInfo& info, + uint32_t* handle, + uint32_t* stride, + void** pixels); + + virtual void DestroyDumbBuffer(const SkImageInfo& info, + uint32_t handle, + uint32_t stride, + void* pixels); + int get_fd() const { return fd_; } protected: diff --git a/ui/ozone/platform/dri/hardware_display_controller_unittest.cc b/ui/ozone/platform/dri/hardware_display_controller_unittest.cc index 16b2dab..0aa2fde 100644 --- a/ui/ozone/platform/dri/hardware_display_controller_unittest.cc +++ b/ui/ozone/platform/dri/hardware_display_controller_unittest.cc @@ -8,7 +8,6 @@ #include "ui/ozone/platform/dri/dri_surface.h" #include "ui/ozone/platform/dri/dri_wrapper.h" #include "ui/ozone/platform/dri/hardware_display_controller.h" -#include "ui/ozone/platform/dri/test/mock_dri_surface.h" #include "ui/ozone/platform/dri/test/mock_dri_wrapper.h" #include "ui/ozone/public/native_pixmap.h" @@ -50,7 +49,7 @@ void HardwareDisplayControllerTest::TearDown() { TEST_F(HardwareDisplayControllerTest, CheckStateAfterSurfaceIsBound) { scoped_ptr<ui::ScanoutSurface> surface( - new ui::MockDriSurface(drm_.get(), kDefaultModeSize)); + new ui::DriSurface(drm_.get(), kDefaultModeSize)); EXPECT_TRUE(surface->Initialize()); EXPECT_TRUE(controller_->BindSurfaceToController(surface.Pass(), @@ -60,7 +59,7 @@ TEST_F(HardwareDisplayControllerTest, CheckStateAfterSurfaceIsBound) { TEST_F(HardwareDisplayControllerTest, CheckStateAfterPageFlip) { scoped_ptr<ui::ScanoutSurface> surface( - new ui::MockDriSurface(drm_.get(), kDefaultModeSize)); + new ui::DriSurface(drm_.get(), kDefaultModeSize)); EXPECT_TRUE(surface->Initialize()); EXPECT_TRUE(controller_->BindSurfaceToController(surface.Pass(), @@ -74,7 +73,7 @@ TEST_F(HardwareDisplayControllerTest, CheckStateIfModesetFails) { drm_->set_set_crtc_expectation(false); scoped_ptr<ui::ScanoutSurface> surface( - new ui::MockDriSurface(drm_.get(), kDefaultModeSize)); + new ui::DriSurface(drm_.get(), kDefaultModeSize)); EXPECT_TRUE(surface->Initialize()); EXPECT_FALSE(controller_->BindSurfaceToController(surface.Pass(), @@ -86,7 +85,7 @@ TEST_F(HardwareDisplayControllerTest, CheckStateIfPageFlipFails) { drm_->set_page_flip_expectation(false); scoped_ptr<ui::ScanoutSurface> surface( - new ui::MockDriSurface(drm_.get(), kDefaultModeSize)); + new ui::DriSurface(drm_.get(), kDefaultModeSize)); EXPECT_TRUE(surface->Initialize()); EXPECT_TRUE(controller_->BindSurfaceToController(surface.Pass(), @@ -97,7 +96,7 @@ TEST_F(HardwareDisplayControllerTest, CheckStateIfPageFlipFails) { TEST_F(HardwareDisplayControllerTest, VerifyNoDRMCallsWhenDisabled) { scoped_ptr<ui::ScanoutSurface> surface( - new ui::MockDriSurface(drm_.get(), kDefaultModeSize)); + new ui::DriSurface(drm_.get(), kDefaultModeSize)); EXPECT_TRUE(surface->Initialize()); EXPECT_TRUE(controller_->BindSurfaceToController(surface.Pass(), @@ -107,7 +106,7 @@ TEST_F(HardwareDisplayControllerTest, VerifyNoDRMCallsWhenDisabled) { std::vector<ui::OzoneOverlayPlane>(), NULL)); EXPECT_EQ(0, drm_->get_page_flip_call_count()); - surface.reset(new ui::MockDriSurface(drm_.get(), kDefaultModeSize)); + surface.reset(new ui::DriSurface(drm_.get(), kDefaultModeSize)); EXPECT_TRUE(surface->Initialize()); EXPECT_TRUE(controller_->BindSurfaceToController(surface.Pass(), @@ -119,9 +118,9 @@ TEST_F(HardwareDisplayControllerTest, VerifyNoDRMCallsWhenDisabled) { TEST_F(HardwareDisplayControllerTest, CheckOverlayMainSurfaceReplacement) { scoped_ptr<ui::ScanoutSurface> surface( - new ui::MockDriSurface(drm_.get(), kDefaultModeSize)); + new ui::DriSurface(drm_.get(), kDefaultModeSize)); scoped_ptr<ui::ScanoutSurface> overlay( - new ui::MockDriSurface(drm_.get(), kDefaultModeSize)); + new ui::DriSurface(drm_.get(), kDefaultModeSize)); EXPECT_TRUE(surface->Initialize()); EXPECT_TRUE( @@ -144,9 +143,9 @@ TEST_F(HardwareDisplayControllerTest, CheckOverlayMainSurfaceReplacement) { TEST_F(HardwareDisplayControllerTest, CheckOverlayPresent) { scoped_ptr<ui::ScanoutSurface> surface( - new ui::MockDriSurface(drm_.get(), kDefaultModeSize)); + new ui::DriSurface(drm_.get(), kDefaultModeSize)); scoped_ptr<ui::ScanoutSurface> overlay( - new ui::MockDriSurface(drm_.get(), kDefaultModeSize)); + new ui::DriSurface(drm_.get(), kDefaultModeSize)); EXPECT_TRUE(surface->Initialize()); EXPECT_TRUE( diff --git a/ui/ozone/platform/dri/test/mock_dri_surface.cc b/ui/ozone/platform/dri/test/mock_dri_surface.cc deleted file mode 100644 index 4e013111..0000000 --- a/ui/ozone/platform/dri/test/mock_dri_surface.cc +++ /dev/null @@ -1,53 +0,0 @@ -// Copyright 2014 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#include "ui/ozone/platform/dri/test/mock_dri_surface.h" - -#include "third_party/skia/include/core/SkCanvas.h" -#include "ui/ozone/platform/dri/dri_buffer.h" -#include "ui/ozone/platform/dri/dri_wrapper.h" - -namespace ui { - -namespace { - -class MockDriBuffer : public DriBuffer { - public: - MockDriBuffer(DriWrapper* dri, bool initialize_expectation) - : DriBuffer(dri), initialize_expectation_(initialize_expectation) {} - virtual ~MockDriBuffer() { surface_.clear(); } - - virtual bool Initialize(const SkImageInfo& info) OVERRIDE { - if (!initialize_expectation_) - return false; - - dri_->AddFramebuffer( - info.width(), info.height(), 24, 32, stride_, handle_, &framebuffer_); - surface_ = skia::AdoptRef(SkSurface::NewRaster(info)); - surface_->getCanvas()->clear(SK_ColorBLACK); - - return true; - } - - private: - bool initialize_expectation_; - - DISALLOW_COPY_AND_ASSIGN(MockDriBuffer); -}; - -} // namespace - -MockDriSurface::MockDriSurface(DriWrapper* dri, const gfx::Size& size) - : DriSurface(dri, size), dri_(dri), initialize_expectation_(true) {} - -MockDriSurface::~MockDriSurface() {} - -DriBuffer* MockDriSurface::CreateBuffer() { - MockDriBuffer* bitmap = new MockDriBuffer(dri_, initialize_expectation_); - bitmaps_.push_back(bitmap); - - return bitmap; -} - -} // namespace ui diff --git a/ui/ozone/platform/dri/test/mock_dri_surface.h b/ui/ozone/platform/dri/test/mock_dri_surface.h deleted file mode 100644 index 61b9a9f..0000000 --- a/ui/ozone/platform/dri/test/mock_dri_surface.h +++ /dev/null @@ -1,45 +0,0 @@ -// Copyright 2014 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#ifndef UI_OZONE_PLATFORM_DRI_TEST_MOCK_DRI_SURFACE_H_ -#define UI_OZONE_PLATFORM_DRI_TEST_MOCK_DRI_SURFACE_H_ - -#include <vector> - -#include "ui/ozone/platform/dri/dri_surface.h" - -namespace gfx { -class Size; -} // namespace gfx - -namespace ui { - -class DriBuffer; -class DriWrapper; - -class MockDriSurface : public DriSurface { - public: - MockDriSurface(DriWrapper* dri, const gfx::Size& size); - virtual ~MockDriSurface(); - - const std::vector<ui::DriBuffer*>& bitmaps() const { return bitmaps_; } - void set_initialize_expectation(bool state) { - initialize_expectation_ = state; - } - - private: - // DriSurface: - virtual ui::DriBuffer* CreateBuffer() OVERRIDE; - - DriWrapper* dri_; // Not owned. - std::vector<DriBuffer*> bitmaps_; // Not owned. - - bool initialize_expectation_; - - DISALLOW_COPY_AND_ASSIGN(MockDriSurface); -}; - -} // namespace ui - -#endif // UI_OZONE_PLATFORM_DRI_TEST_MOCK_DRI_SURFACE_H_ diff --git a/ui/ozone/platform/dri/test/mock_dri_wrapper.cc b/ui/ozone/platform/dri/test/mock_dri_wrapper.cc index 5063c2f..bb6bc13 100644 --- a/ui/ozone/platform/dri/test/mock_dri_wrapper.cc +++ b/ui/ozone/platform/dri/test/mock_dri_wrapper.cc @@ -7,6 +7,7 @@ #include <xf86drm.h> #include <xf86drmMode.h> +#include "third_party/skia/include/core/SkCanvas.h" #include "ui/ozone/platform/dri/dri_surface.h" #include "ui/ozone/platform/dri/hardware_display_controller.h" @@ -30,7 +31,8 @@ MockDriWrapper::MockDriWrapper(int fd) overlay_flip_call_count_(0), set_crtc_expectation_(true), add_framebuffer_expectation_(true), - page_flip_expectation_(true) { + page_flip_expectation_(true), + create_dumb_buffer_expectation_(true) { fd_ = fd; } @@ -120,4 +122,28 @@ bool MockDriWrapper::MoveCursor(uint32_t crtc_id, int x, int y) { void MockDriWrapper::HandleEvent(drmEventContext& event) { } +bool MockDriWrapper::CreateDumbBuffer(const SkImageInfo& info, + uint32_t* handle, + uint32_t* stride, + void** pixels) { + if (!create_dumb_buffer_expectation_) + return false; + + *handle = 0; + *stride = info.minRowBytes(); + *pixels = new char[info.getSafeSize(*stride)]; + buffers_.push_back( + skia::AdoptRef(SkSurface::NewRasterDirect(info, *pixels, *stride))); + buffers_.back()->getCanvas()->clear(SK_ColorBLACK); + + return true; +} + +void MockDriWrapper::DestroyDumbBuffer(const SkImageInfo& info, + uint32_t handle, + uint32_t stride, + void* pixels) { + delete[] static_cast<char*>(pixels); +} + } // namespace ui diff --git a/ui/ozone/platform/dri/test/mock_dri_wrapper.h b/ui/ozone/platform/dri/test/mock_dri_wrapper.h index e06e14b..eb3cbdc 100644 --- a/ui/ozone/platform/dri/test/mock_dri_wrapper.h +++ b/ui/ozone/platform/dri/test/mock_dri_wrapper.h @@ -5,6 +5,10 @@ #ifndef UI_OZONE_PLATFORM_DRI_TEST_MOCK_DRI_WRAPPER_H_ #define UI_OZONE_PLATFORM_DRI_TEST_MOCK_DRI_WRAPPER_H_ +#include <vector> + +#include "skia/ext/refptr.h" +#include "third_party/skia/include/core/SkSurface.h" #include "ui/ozone/platform/dri/dri_wrapper.h" namespace ui { @@ -31,6 +35,13 @@ class MockDriWrapper : public ui::DriWrapper { void set_add_framebuffer_expectation(bool state) { add_framebuffer_expectation_ = state; } + void set_create_dumb_buffer_expectation(bool state) { + create_dumb_buffer_expectation_ = state; + } + + const std::vector<skia::RefPtr<SkSurface> > buffers() const { + return buffers_; + } // DriWrapper: virtual ScopedDrmCrtcPtr GetCrtc(uint32_t crtc_id) OVERRIDE; @@ -68,6 +79,14 @@ class MockDriWrapper : public ui::DriWrapper { uint32_t height) OVERRIDE; virtual bool MoveCursor(uint32_t crtc_id, int x, int y) OVERRIDE; virtual void HandleEvent(drmEventContext& event) OVERRIDE; + virtual bool CreateDumbBuffer(const SkImageInfo& info, + uint32_t* handle, + uint32_t* stride, + void** pixels) OVERRIDE; + virtual void DestroyDumbBuffer(const SkImageInfo& info, + uint32_t handle, + uint32_t stride, + void* pixels) OVERRIDE; private: int get_crtc_call_count_; @@ -80,6 +99,9 @@ class MockDriWrapper : public ui::DriWrapper { bool set_crtc_expectation_; bool add_framebuffer_expectation_; bool page_flip_expectation_; + bool create_dumb_buffer_expectation_; + + std::vector<skia::RefPtr<SkSurface> > buffers_; DISALLOW_COPY_AND_ASSIGN(MockDriWrapper); }; diff --git a/ui/ozone/platform/dri/test/mock_surface_generator.cc b/ui/ozone/platform/dri/test/mock_surface_generator.cc index 97df5bd..69ba156 100644 --- a/ui/ozone/platform/dri/test/mock_surface_generator.cc +++ b/ui/ozone/platform/dri/test/mock_surface_generator.cc @@ -11,7 +11,7 @@ MockSurfaceGenerator::MockSurfaceGenerator(DriWrapper* dri) : dri_(dri) {} MockSurfaceGenerator::~MockSurfaceGenerator() {} ScanoutSurface* MockSurfaceGenerator::Create(const gfx::Size& size) { - surfaces_.push_back(new MockDriSurface(dri_, size)); + surfaces_.push_back(new DriSurface(dri_, size)); return surfaces_.back(); } diff --git a/ui/ozone/platform/dri/test/mock_surface_generator.h b/ui/ozone/platform/dri/test/mock_surface_generator.h index d9b77f8..e1092db 100644 --- a/ui/ozone/platform/dri/test/mock_surface_generator.h +++ b/ui/ozone/platform/dri/test/mock_surface_generator.h @@ -7,7 +7,7 @@ #include <vector> -#include "ui/ozone/platform/dri/test/mock_dri_surface.h" +#include "ui/ozone/platform/dri/dri_surface.h" namespace gfx { class Size; @@ -22,7 +22,7 @@ class MockSurfaceGenerator : public ScanoutSurfaceGenerator { MockSurfaceGenerator(DriWrapper* dri); virtual ~MockSurfaceGenerator(); - std::vector<MockDriSurface*> surfaces() const { return surfaces_; } + std::vector<DriSurface*> surfaces() const { return surfaces_; } // ScanoutSurfaceGenerator: virtual ScanoutSurface* Create(const gfx::Size& size) OVERRIDE; @@ -30,7 +30,7 @@ class MockSurfaceGenerator : public ScanoutSurfaceGenerator { private: DriWrapper* dri_; // Not owned. - std::vector<MockDriSurface*> surfaces_; + std::vector<DriSurface*> surfaces_; DISALLOW_COPY_AND_ASSIGN(MockSurfaceGenerator); }; |