69
69
display_size, refresh_rate, mir_pixel_format_abgr_8888)};
70
70
MirOrientation orientation{mir_orientation_normal};
71
71
mga::DisplayBuffer db{
72
std::unique_ptr<mga::LayerList>(
73
new mga::LayerList(std::make_shared<mga::IntegerSourceCrop>(), {})),
73
75
mock_display_device,
82
84
TEST_F(DisplayBuffer, can_post_update_with_gl_only)
84
EXPECT_CALL(*mock_display_device, post_gl(testing::_));
86
using namespace testing;
87
std::unique_ptr<mga::LayerList> list(new mga::LayerList(std::make_shared<mga::IntegerSourceCrop>(), {}));
88
EXPECT_CALL(*mock_display_device, commit(
89
mga::DisplayName::primary, Ref(*list), _, _));
91
mga::DisplayBuffer db{
99
mga::OverlayOptimization::enabled};
85
101
db.gl_swap_buffers();
93
109
std::make_shared<mtd::StubRenderable>(),
94
110
std::make_shared<mtd::StubRenderable>()};
96
EXPECT_CALL(*mock_display_device, post_overlays(_, Ref(renderlist), _))
112
EXPECT_CALL(*mock_display_device, compatible_renderlist(Ref(renderlist)))
98
114
.WillOnce(Return(true))
99
115
.WillOnce(Return(false));
102
118
EXPECT_FALSE(db.post_renderables_if_optimizable(renderlist));
121
TEST_F(DisplayBuffer, defaults_to_normal_orientation)
123
EXPECT_EQ(mir_orientation_normal, db.orientation());
105
126
TEST_F(DisplayBuffer, rotation_transposes_dimensions_and_reports_correctly)
107
128
geom::Size const transposed{display_size.height.as_int(), display_size.width.as_int()};
108
mga::DisplayBuffer inv_db(
113
stub_program_factory,
114
mir_orientation_inverted,
115
mga::OverlayOptimization::enabled);
116
mga::DisplayBuffer left_db(
121
stub_program_factory,
122
mir_orientation_left,
123
mga::OverlayOptimization::enabled);
124
mga::DisplayBuffer right_db(
129
stub_program_factory,
130
mir_orientation_right,
131
mga::OverlayOptimization::enabled);
133
129
EXPECT_EQ(display_size, db.view_area().size);
134
130
EXPECT_EQ(db.orientation(), mir_orientation_normal);
136
EXPECT_EQ(display_size, inv_db.view_area().size);
137
EXPECT_EQ(inv_db.orientation(), mir_orientation_inverted);
139
EXPECT_EQ(transposed, left_db.view_area().size);
140
EXPECT_EQ(left_db.orientation(), mir_orientation_left);
142
EXPECT_EQ(transposed, right_db.view_area().size);
143
EXPECT_EQ(right_db.orientation(), mir_orientation_right);
131
db.configure(mir_power_mode_on, mir_orientation_inverted);
133
EXPECT_EQ(display_size, db.view_area().size);
134
EXPECT_EQ(db.orientation(), mir_orientation_inverted);
135
db.configure(mir_power_mode_on, mir_orientation_left);
137
EXPECT_EQ(transposed, db.view_area().size);
138
EXPECT_EQ(db.orientation(), mir_orientation_left);
139
db.configure(mir_power_mode_on, mir_orientation_right);
141
EXPECT_EQ(transposed, db.view_area().size);
142
EXPECT_EQ(db.orientation(), mir_orientation_right);
146
145
TEST_F(DisplayBuffer, reports_correct_size)
216
224
TEST_F(DisplayBuffer, can_make_current)
226
using namespace testing;
218
227
EXPECT_CALL(mock_egl, eglMakeCurrent(
219
228
dummy_display, mock_egl.fake_egl_surface, mock_egl.fake_egl_surface, dummy_context))
251
260
TEST_F(DisplayBuffer, reject_list_if_option_disabled)
262
using namespace testing;
263
ON_CALL(*mock_display_device, compatible_renderlist(_))
264
.WillByDefault(Return(true));
253
266
mg::RenderableList renderlist{std::make_shared<mtd::StubRenderable>()};
254
267
mga::DisplayBuffer db(
268
std::unique_ptr<mga::LayerList>(
269
new mga::LayerList(std::make_shared<mga::IntegerSourceCrop>(), {})),
256
271
mock_display_device,
263
278
EXPECT_FALSE(db.post_renderables_if_optimizable(renderlist));
281
TEST_F(DisplayBuffer, rejects_commit_if_list_doesnt_need_commit)
283
using namespace testing;
284
auto buffer1 = std::make_shared<mtd::StubRenderable>();
285
auto buffer2 = std::make_shared<mtd::StubRenderable>();
286
auto buffer3 = std::make_shared<mtd::StubRenderable>();
288
ON_CALL(*mock_display_device, compatible_renderlist(_))
289
.WillByDefault(Return(true));
290
ON_CALL(*mock_display_device, commit(_,_,_,_))
291
.WillByDefault(Invoke([](
293
mga::LayerList& list,
294
mga::SwappingGLContext const&,
295
mga::RenderableListCompositor const&)
297
auto native_list = list.native_list();
298
for (auto i = 0u; i < native_list->numHwLayers; i++)
300
if (native_list->hwLayers[i].compositionType == HWC_FRAMEBUFFER)
301
native_list->hwLayers[i].compositionType = HWC_OVERLAY;
305
mg::RenderableList renderlist{buffer1, buffer2};
306
EXPECT_TRUE(db.post_renderables_if_optimizable(renderlist));
307
EXPECT_FALSE(db.post_renderables_if_optimizable(renderlist));
309
renderlist = mg::RenderableList{buffer2, buffer1}; //ordering changed
310
EXPECT_TRUE(db.post_renderables_if_optimizable(renderlist));
311
EXPECT_FALSE(db.post_renderables_if_optimizable(renderlist));
313
renderlist = mg::RenderableList{buffer3, buffer1}; //buffer changed
314
EXPECT_TRUE(db.post_renderables_if_optimizable(renderlist));
315
EXPECT_FALSE(db.post_renderables_if_optimizable(renderlist));