summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authordnicoara@chromium.org <dnicoara@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2014-07-17 21:28:59 +0000
committerdnicoara@chromium.org <dnicoara@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2014-07-17 21:28:59 +0000
commit89318cd3b6eb85781d4b6e63b932bbdf1f898b56 (patch)
tree444f4d12a1d8a8fd275a4ee34d8064bc879032b2
parentd355780d6cd5bea76c3cd797c79c2b312a4baa86 (diff)
downloadchromium_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.gypi2
-rw-r--r--ui/ozone/platform/dri/dri_buffer.cc57
-rw-r--r--ui/ozone/platform/dri/dri_buffer.h6
-rw-r--r--ui/ozone/platform/dri/dri_surface.cc4
-rw-r--r--ui/ozone/platform/dri/dri_surface.h3
-rw-r--r--ui/ozone/platform/dri/dri_surface_factory_unittest.cc64
-rw-r--r--ui/ozone/platform/dri/dri_surface_unittest.cc36
-rw-r--r--ui/ozone/platform/dri/dri_wrapper.cc67
-rw-r--r--ui/ozone/platform/dri/dri_wrapper.h12
-rw-r--r--ui/ozone/platform/dri/hardware_display_controller_unittest.cc21
-rw-r--r--ui/ozone/platform/dri/test/mock_dri_surface.cc53
-rw-r--r--ui/ozone/platform/dri/test/mock_dri_surface.h45
-rw-r--r--ui/ozone/platform/dri/test/mock_dri_wrapper.cc28
-rw-r--r--ui/ozone/platform/dri/test/mock_dri_wrapper.h22
-rw-r--r--ui/ozone/platform/dri/test/mock_surface_generator.cc2
-rw-r--r--ui/ozone/platform/dri/test/mock_surface_generator.h6
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);
};