16
16
* Authored by: Kevin DuBois <kevin.dubois@canonical.com>
19
#include "src/server/graphics/android/framebuffers.h"
20
#include "src/server/graphics/android/graphic_buffer_allocator.h"
19
#include "src/platform/graphics/android/framebuffers.h"
20
#include "src/platform/graphics/android/graphic_buffer_allocator.h"
21
21
#include "mir_test_doubles/mock_buffer.h"
22
22
#include "mir_test_doubles/mock_hwc_composer_device_1.h"
23
23
#include "mir_test_doubles/mock_egl.h"
40
40
struct MockGraphicBufferAllocator : public mga::GraphicBufferAllocator
42
42
MOCK_METHOD3(alloc_buffer_platform, std::shared_ptr<mg::Buffer>(
43
geom::Size, geom::PixelFormat, mga::BufferUsage use));
43
geom::Size, MirPixelFormat, mga::BufferUsage use));
46
46
static int const display_width = 180;
59
59
buffer3 = std::make_shared<mtd::MockBuffer>();
60
60
mock_allocator = std::make_shared<MockGraphicBufferAllocator>();
61
61
mock_hwc_device = std::make_shared<testing::NiceMock<mtd::MockHWCComposerDevice1>>();
62
mock_fb_hal = std::make_shared<mtd::MockFBHalDevice>(display_width, display_height, format, fbnum);
62
mock_fb_hal = std::make_shared<mtd::MockFBHalDevice>(display_width, display_height, format, fbnum);
63
63
EXPECT_CALL(*mock_allocator, alloc_buffer_platform(_,_,_))
65
65
.WillOnce(Return(buffer1))
102
102
EXPECT_CALL(*mock_hwc_device, getDisplayAttributes_interface(mock_hwc_device.get(), HWC_DISPLAY_PRIMARY, hwc_configs,_,_))
104
104
.WillOnce(Invoke(display_attribute_handler));
106
106
auto display_size = mir::geometry::Size{display_width, display_height};
107
107
EXPECT_CALL(*mock_allocator, alloc_buffer_platform(display_size, _, mga::BufferUsage::use_framebuffer_gles))
141
141
.WillOnce(DoAll(SetArgPointee<3>(visual_id), Return(EGL_TRUE)));
142
142
EXPECT_CALL(mock_egl, eglTerminate(fake_display))
143
143
.InSequence(seq);
145
145
mga::Framebuffers framebuffers(mock_allocator, mock_hwc_device);
146
EXPECT_EQ(geom::PixelFormat::argb_8888, framebuffers.fb_format());
146
EXPECT_EQ(mir_pixel_format_argb_8888, framebuffers.fb_format());
149
149
//apparently this can happen if the display is in the 'unplugged state'
178
178
.WillOnce(DoAll(SetArgPointee<4>(0), Return(EGL_TRUE)));
179
179
EXPECT_CALL(mock_egl, eglTerminate(fake_display))
180
180
.InSequence(seq);
182
182
mga::Framebuffers framebuffers(mock_allocator, mock_hwc_device);
183
EXPECT_EQ(geom::PixelFormat::abgr_8888, framebuffers.fb_format());
183
EXPECT_EQ(mir_pixel_format_abgr_8888, framebuffers.fb_format());
186
186
TEST_F(PostingFBBundleTest, bundle_from_fb)
188
188
using namespace testing;
189
189
auto display_size = geom::Size{display_width, display_height};
190
EXPECT_CALL(*mock_allocator, alloc_buffer_platform(display_size, geom::PixelFormat::abgr_8888, mga::BufferUsage::use_framebuffer_gles))
190
EXPECT_CALL(*mock_allocator, alloc_buffer_platform(display_size, mir_pixel_format_abgr_8888, mga::BufferUsage::use_framebuffer_gles))
192
192
.WillRepeatedly(Return(nullptr));
194
194
mga::Framebuffers framebuffers(mock_allocator, mock_fb_hal);
195
195
EXPECT_EQ(display_size, framebuffers.fb_size());
196
EXPECT_EQ(geom::PixelFormat::abgr_8888, framebuffers.fb_format());
196
EXPECT_EQ(mir_pixel_format_abgr_8888, framebuffers.fb_format());
199
199
//some drivers incorrectly report 0 buffers available. if this is true, we should alloc 2, the minimum requirement
200
200
TEST_F(PostingFBBundleTest, determine_fbnum_always_reports_2_minimum)
202
202
using namespace testing;
203
auto slightly_malformed_fb_hal_mock = std::make_shared<mtd::MockFBHalDevice>(display_width, display_height, format, 0);
203
auto slightly_malformed_fb_hal_mock = std::make_shared<mtd::MockFBHalDevice>(display_width, display_height, format, 0);
204
204
EXPECT_CALL(*mock_allocator, alloc_buffer_platform(_,_,_))
206
206
.WillRepeatedly(Return(nullptr));