#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"
#include "ui/ozone/public/surface_ozone_canvas.h"
namespace {
+// Mode of size 6x4.
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);
-};
+const uint32_t kDefaultCrtc = 1;
+const uint32_t kDefaultConnector = 2;
class MockScreenManager : public ui::ScreenManager {
public:
MockScreenManager(ui::DriWrapper* dri,
- ui::ScanoutSurfaceGenerator* surface_generator)
- : ScreenManager(dri, surface_generator),
+ ui::ScanoutBufferGenerator* buffer_generator)
+ : ScreenManager(dri, buffer_generator),
dri_(dri) {}
virtual ~MockScreenManager() {}
// Normally we'd use DRM to figure out the controller configuration. But we
// can't use DRM in unit tests, so we just create a fake configuration.
virtual void ForceInitializationOfPrimaryDisplay() OVERRIDE {
- ConfigureDisplayController(1, 2, kDefaultMode);
+ ConfigureDisplayController(
+ kDefaultCrtc, kDefaultConnector, gfx::Point(), kDefaultMode);
}
private:
ui::DriWrapper* dri_; // Not owned.
- std::vector<ui::MockDriSurface*> surfaces_; // Not owned.
DISALLOW_COPY_AND_ASSIGN(MockScreenManager);
};
protected:
scoped_ptr<base::MessageLoop> message_loop_;
scoped_ptr<ui::MockDriWrapper> dri_;
- scoped_ptr<ui::MockSurfaceGenerator> surface_generator_;
+ scoped_ptr<ui::DriBufferGenerator> buffer_generator_;
scoped_ptr<MockScreenManager> screen_manager_;
- scoped_ptr<MockDriSurfaceFactory> factory_;
+ scoped_ptr<ui::DriSurfaceFactory> factory_;
private:
DISALLOW_COPY_AND_ASSIGN(DriSurfaceFactoryTest);
void DriSurfaceFactoryTest::SetUp() {
message_loop_.reset(new base::MessageLoopForUI);
dri_.reset(new ui::MockDriWrapper(3));
- surface_generator_.reset(new ui::MockSurfaceGenerator(dri_.get()));
+ buffer_generator_.reset(new ui::DriBufferGenerator(dri_.get()));
screen_manager_.reset(new MockScreenManager(dri_.get(),
- surface_generator_.get()));
- factory_.reset(new MockDriSurfaceFactory(dri_.get(), screen_manager_.get()));
+ buffer_generator_.get()));
+ factory_.reset(new ui::DriSurfaceFactory(dri_.get(), screen_manager_.get()));
}
void DriSurfaceFactoryTest::TearDown() {
TEST_F(DriSurfaceFactoryTest, FailInitialization) {
dri_->fail_init();
- EXPECT_EQ(ui::SurfaceFactoryOzone::FAILED, factory_->InitializeHardware());
+ EXPECT_EQ(ui::DriSurfaceFactory::FAILED, factory_->InitializeHardware());
}
TEST_F(DriSurfaceFactoryTest, SuccessfulInitialization) {
- EXPECT_EQ(ui::SurfaceFactoryOzone::INITIALIZED,
+ EXPECT_EQ(ui::DriSurfaceFactory::INITIALIZED,
factory_->InitializeHardware());
}
TEST_F(DriSurfaceFactoryTest, SuccessfulWidgetRealization) {
- EXPECT_EQ(ui::SurfaceFactoryOzone::INITIALIZED,
+ EXPECT_EQ(ui::DriSurfaceFactory::INITIALIZED,
factory_->InitializeHardware());
gfx::AcceleratedWidget w = factory_->GetAcceleratedWidget();
EXPECT_TRUE(factory_->CreateCanvasForWidget(w));
}
-TEST_F(DriSurfaceFactoryTest, CheckNativeSurfaceContents) {
- EXPECT_EQ(ui::SurfaceFactoryOzone::INITIALIZED,
- factory_->InitializeHardware());
-
- gfx::AcceleratedWidget w = factory_->GetAcceleratedWidget();
- EXPECT_EQ(ui::DriSurfaceFactory::kDefaultWidgetHandle, w);
-
- scoped_ptr<ui::SurfaceOzoneCanvas> surface =
- factory_->CreateCanvasForWidget(w);
-
- surface->ResizeCanvas(
- gfx::Size(kDefaultMode.hdisplay, kDefaultMode.vdisplay));
- surface->GetCanvas()->drawColor(SK_ColorWHITE);
- 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);
-
- // Make sure the updates are correctly propagated to the native surface.
- for (int i = 0; i < image.height(); ++i) {
- for (int j = 0; j < image.width(); ++j) {
- if (j < kDefaultMode.hdisplay / 2 && i < kDefaultMode.vdisplay / 2)
- EXPECT_EQ(SK_ColorWHITE, image.getColor(j, i));
- else
- EXPECT_EQ(SK_ColorBLACK, image.getColor(j, i));
- }
- }
-}
-
TEST_F(DriSurfaceFactoryTest, SetCursorImage) {
- EXPECT_EQ(ui::SurfaceFactoryOzone::INITIALIZED,
+ EXPECT_EQ(ui::DriSurfaceFactory::INITIALIZED,
factory_->InitializeHardware());
gfx::AcceleratedWidget w = factory_->GetAcceleratedWidget();
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) {