32
26
namespace mg=mir::graphics;
33
27
namespace mga=mir::graphics::android;
34
28
namespace mtd=mir::test::doubles;
35
namespace mt=mir::test;
36
namespace geom=mir::geometry;
41
class MockAndroidGraphicBufferAllocator : public mga::GraphicBufferAllocator
44
MOCK_METHOD1(alloc_buffer, std::shared_ptr<mg::Buffer>(mg::BufferProperties const&));
45
MOCK_METHOD3(alloc_buffer_platform, std::shared_ptr<mga::Buffer>(geom::Size, geom::PixelFormat, mga::BufferUsage));
46
MOCK_METHOD0(supported_pixel_formats, std::vector<geom::PixelFormat>());
48
~MockAndroidGraphicBufferAllocator() noexcept {}
52
class ResourceFactoryTest : public ::testing::Test
57
using namespace testing;
58
mock_buffer_allocator = std::make_shared<NiceMock<MockAndroidGraphicBufferAllocator>>();
59
mock_display_device = std::make_shared<NiceMock<mtd::MockDisplayDevice>>();
60
mock_report = std::make_shared<NiceMock<mtd::MockDisplayReport>>();
63
ON_CALL(*mock_display_device, display_format())
64
.WillByDefault(Return(geom::PixelFormat::abgr_8888));
65
ON_CALL(*mock_display_device, display_size())
66
.WillByDefault(Return(geom::Size{2, 3}));
67
ON_CALL(*mock_display_device, number_of_framebuffers_available())
68
.WillByDefault(Return(fake_fb_num));
70
ON_CALL(*mock_buffer_allocator, alloc_buffer_platform(_,_,_))
71
.WillByDefault(Return(std::shared_ptr<mga::Buffer>()));
74
std::shared_ptr<mtd::MockDisplayReport> mock_report;
75
std::shared_ptr<MockAndroidGraphicBufferAllocator> mock_buffer_allocator;
76
std::shared_ptr<mtd::MockDisplayDevice> mock_display_device;
77
unsigned int fake_fb_num;
30
struct ResourceFactoryTest : public ::testing::Test
78
32
mtd::HardwareAccessMock hw_access_mock;
79
testing::NiceMock<mtd::MockEGL> mock_egl;
82
//note: @kdub imo, the hwc api has a hole in it that it doesn't allow query for format. surfaceflinger code
83
// makes note of this api hole in its comments too. It always uses rgba8888, which we try to do too.
84
TEST_F(ResourceFactoryTest, test_native_window_creation_figures_out_fb_number)
86
using namespace testing;
87
geom::Width disp_width{44};
88
geom::Height disp_height{4567654};
89
geom::Size disp_size{disp_width, disp_height};
90
geom::PixelFormat pf = geom::PixelFormat::abgr_8888;
92
EXPECT_CALL(*mock_display_device, number_of_framebuffers_available())
94
.WillOnce(Return(fake_fb_num));
95
EXPECT_CALL(*mock_display_device, display_size())
97
.WillOnce(Return(disp_size));
98
EXPECT_CALL(*mock_display_device, display_format())
100
.WillOnce(Return(pf));
102
EXPECT_CALL(*mock_buffer_allocator, alloc_buffer_platform(
103
disp_size,pf,mga::BufferUsage::use_framebuffer_gles))
106
mga::ResourceFactory factory;
107
factory.create_fb_buffers(mock_display_device, mock_buffer_allocator);
110
35
TEST_F(ResourceFactoryTest, fb_native_creation_opens_and_closes_gralloc)
112
37
using namespace testing;