121 auto display_list = builder.
Build();
122 auto display_list_layer = std::make_shared<DisplayListLayer>(
123 layer_offset, display_list,
false,
false);
124 EXPECT_TRUE(display_list->can_apply_group_opacity());
126 auto context = preroll_context();
127 display_list_layer->Preroll(preroll_context());
128 EXPECT_EQ(context->renderable_state_flags,
131 int opacity_alpha = 0x7F;
135 std::make_shared<OpacityLayer>(opacity_alpha, opacity_offset);
136 opacity_layer->Add(display_list_layer);
137 opacity_layer->Preroll(context);
138 EXPECT_TRUE(opacity_layer->children_can_accept_opacity());
142 auto child_display_list = child_builder.
Build();
146 expected_builder.
Save();
148 expected_builder.
Translate(opacity_offset.
x, opacity_offset.
y);
150 expected_builder.
Save();
152 expected_builder.
Translate(layer_offset.
x, layer_offset.
y);
161 opacity_layer->Paint(display_list_paint_context());
173 auto display_list = builder.
Build();
174 auto display_list_layer = std::make_shared<DisplayListLayer>(
175 layer_offset, display_list,
false,
false);
176 EXPECT_FALSE(display_list->can_apply_group_opacity());
178 auto context = preroll_context();
179 display_list_layer->Preroll(preroll_context());
180 EXPECT_EQ(context->renderable_state_flags, 0);
182 int opacity_alpha = 0x7F;
185 std::make_shared<OpacityLayer>(opacity_alpha, opacity_offset);
186 opacity_layer->Add(display_list_layer);
187 opacity_layer->Preroll(context);
188 EXPECT_FALSE(opacity_layer->children_can_accept_opacity());
193 auto child_display_list = child_builder.
Build();
195 auto display_list_bounds = picture1_bounds.
Union(picture2_bounds);
196 auto save_layer_bounds =
197 display_list_bounds.
Shift(layer_offset.
x, layer_offset.
y);
200 expected_builder.
Save();
202 expected_builder.
Translate(opacity_offset.
x, opacity_offset.
y);
203 expected_builder.
SaveLayer(save_layer_bounds,
204 &
DlPaint().setAlpha(opacity_alpha));
207 expected_builder.
Save();
209 expected_builder.
Translate(layer_offset.
x, layer_offset.
y);
220 opacity_layer->Paint(display_list_paint_context());
232 auto display_list = builder.
Build();
233 auto display_list_layer = std::make_shared<DisplayListLayer>(
234 layer_offset, display_list,
true,
false);
235 EXPECT_FALSE(display_list->can_apply_group_opacity());
237 use_skia_raster_cache();
239 auto context = preroll_context();
240 display_list_layer->Preroll(preroll_context());
241 EXPECT_EQ(context->renderable_state_flags, 0);
244 display_list_layer->Preroll(preroll_context());
245 display_list_layer->Preroll(preroll_context());
246 display_list_layer->Preroll(preroll_context());
248 &paint_context(),
false);
250 int opacity_alpha = 0x7F;
253 std::make_shared<OpacityLayer>(opacity_alpha, opacity_offset);
254 opacity_layer->Add(display_list_layer);
255 opacity_layer->Preroll(context);
256 EXPECT_TRUE(opacity_layer->children_can_accept_opacity());
262 auto layer_offset_integral_matrix =
268 expected.
Translate(opacity_offset.
x, opacity_offset.
y);
270 expected.
Transform(opacity_integral_matrix);
274 expected.
Translate(layer_offset.
x, layer_offset.
y);
276 expected.
Transform(layer_offset_integral_matrix);
277 context->raster_cache->Draw(display_list_layer->caching_key_id(),
279 &
DlPaint().setAlpha(opacity_alpha));
287 opacity_layer->Paint(display_list_paint_context());
297 auto display_list = builder.
Build();
298 auto display_list_layer = std::make_shared<DisplayListLayer>(
299 DlPoint(3, 3), display_list,
true,
false);
301 use_skia_raster_cache();
303 auto context = preroll_context();
305 auto mutator = context->state_stack.save();
307 display_list_layer->Preroll(preroll_context());
308 EXPECT_EQ(context->renderable_state_flags, 0);
311 display_list_layer->Preroll(preroll_context());
312 display_list_layer->Preroll(preroll_context());
313 display_list_layer->Preroll(preroll_context());
315 &paint_context(),
false);
319 expected_root_canvas.
Scale(2.0, 2.0);
320 ASSERT_TRUE(context->raster_cache->Draw(display_list_layer->caching_key_id(),
321 expected_root_canvas,
nullptr,
323 auto root_canvas_dl = expected_root_canvas.
Build();
324 const auto root_canvas_rects =
325 root_canvas_dl->rtree()->searchAndConsolidateRects(
kGiantRect,
true);
326 std::list<DlRect> root_canvas_rects_expected = {
329 EXPECT_EQ(root_canvas_rects_expected, root_canvas_rects);
332 expected_overlay_canvas.
Scale(2.0, 2.0);
333 ASSERT_TRUE(context->raster_cache->Draw(display_list_layer->caching_key_id(),
334 expected_overlay_canvas,
nullptr,
336 auto overlay_canvas_dl = expected_overlay_canvas.
Build();
337 const auto overlay_canvas_rects =
338 overlay_canvas_dl->rtree()->searchAndConsolidateRects(
kGiantRect,
true);
341 std::list<DlRect> overlay_canvas_rects_expected = {
346 EXPECT_EQ(overlay_canvas_rects_expected, overlay_canvas_rects);
397 tree1.
root()->
Add(CreateDisplayListLayer(display_list1));
406 tree2.
root()->
Add(CreateDisplayListLayer(display_list2));
408 damage = DiffLayerTree(tree2, tree1);
409 EXPECT_EQ(damage.frame_damage,
DlIRect());
415 tree3.
root()->
Add(CreateDisplayListLayer(display_list3,
DlPoint(10, 10)));
417 damage = DiffLayerTree(tree3, tree2);
424 tree4.
root()->
Add(CreateDisplayListLayer(display_list4,
DlPoint(10, 10)));
426 damage = DiffLayerTree(tree4, tree3);
437 auto display_list = builder.
Build();
438 auto layer = std::make_shared<DisplayListLayer>(layer_offset, display_list,
441 auto raster_cache_item = layer->raster_cache_item();
442 use_mock_raster_cache();
447 ASSERT_TRUE(preroll_context()->state_stack.is_empty());
448 preroll_context()->state_stack.set_preroll_delegate(missed_cull_rect);
449 for (
int i = 0;
i < 10;
i++) {
450 preroll_context()->raster_cached_entries->clear();
451 layer->Preroll(preroll_context());
453 ASSERT_TRUE(raster_cache_item->GetId().has_value());
454 ASSERT_EQ(preroll_context()->raster_cache->GetAccessCount(
455 raster_cache_item->GetId().value(), SkMatrix::I()),
457 ASSERT_EQ(preroll_context()->raster_cached_entries->size(),
size_t(1));
458 ASSERT_EQ(preroll_context()->raster_cache->EstimatePictureCacheByteSize(),
460 ASSERT_FALSE(raster_cache_item->TryToPrepareRasterCache(paint_context()));
461 ASSERT_FALSE(raster_cache_item->Draw(paint_context(),
nullptr));
468 ASSERT_TRUE(preroll_context()->state_stack.is_empty());
469 preroll_context()->state_stack.set_preroll_delegate(hit_cull_rect);
470 preroll_context()->raster_cached_entries->clear();
471 layer->Preroll(preroll_context());
473 ASSERT_TRUE(raster_cache_item->GetId().has_value());
474 ASSERT_EQ(preroll_context()->raster_cache->GetAccessCount(
475 raster_cache_item->GetId().value(), SkMatrix::I()),
477 ASSERT_EQ(preroll_context()->raster_cached_entries->size(),
size_t(1));
478 ASSERT_EQ(preroll_context()->raster_cache->EstimatePictureCacheByteSize(),
480 ASSERT_FALSE(raster_cache_item->TryToPrepareRasterCache(paint_context()));
481 ASSERT_FALSE(raster_cache_item->Draw(paint_context(),
nullptr));
487 ASSERT_TRUE(preroll_context()->state_stack.is_empty());
488 preroll_context()->state_stack.set_preroll_delegate(missed_cull_rect);
489 for (
int i = 0;
i < 10;
i++) {
490 preroll_context()->raster_cached_entries->clear();
491 layer->Preroll(preroll_context());
493 ASSERT_TRUE(raster_cache_item->GetId().has_value());
494 ASSERT_EQ(preroll_context()->raster_cache->GetAccessCount(
495 raster_cache_item->GetId().value(), SkMatrix::I()),
497 ASSERT_EQ(preroll_context()->raster_cached_entries->size(),
size_t(1));
498 ASSERT_EQ(preroll_context()->raster_cache->EstimatePictureCacheByteSize(),
500 ASSERT_FALSE(raster_cache_item->TryToPrepareRasterCache(paint_context()));
501 ASSERT_FALSE(raster_cache_item->Draw(paint_context(),
nullptr));
508 ASSERT_TRUE(preroll_context()->state_stack.is_empty());
509 preroll_context()->state_stack.set_preroll_delegate(hit_cull_rect);
510 preroll_context()->raster_cached_entries->clear();
511 layer->Preroll(preroll_context());
513 ASSERT_TRUE(raster_cache_item->GetId().has_value());
514 ASSERT_EQ(preroll_context()->raster_cache->GetAccessCount(
515 raster_cache_item->GetId().value(), SkMatrix::I()),
517 ASSERT_EQ(preroll_context()->raster_cached_entries->size(),
size_t(1));
518 ASSERT_EQ(preroll_context()->raster_cache->EstimatePictureCacheByteSize(),
520 ASSERT_TRUE(raster_cache_item->TryToPrepareRasterCache(paint_context()));
521 ASSERT_GT(preroll_context()->raster_cache->EstimatePictureCacheByteSize(),
523 ASSERT_TRUE(raster_cache_item->Draw(paint_context(),
nullptr));
527 use_mock_raster_cache();
531 int layer_count = per_frame + 1;
533 auto opacity_layer = std::make_shared<OpacityLayer>(0.5f, opacity_offset);
534 std::vector<std::shared_ptr<DisplayListLayer>>
layers;
535 for (
int i = 0;
i < layer_count;
i++) {
539 auto display_list = builder.
Build();
540 ASSERT_FALSE(display_list->can_apply_group_opacity());
544 std::make_shared<DisplayListLayer>(offset, display_list,
true,
false));
545 opacity_layer->Add(
layers.back());
547 for (
size_t j = 0; j < context->raster_cache->access_threshold(); j++) {
548 context->raster_cache->BeginFrame();
549 for (
int i = 0;
i < layer_count;
i++) {
555 opacity_layer->Preroll(context);
556 ASSERT_FALSE(opacity_layer->children_can_accept_opacity());
560 context->raster_cache->BeginFrame();
561 for (
int i = 0;
i < per_frame;
i++) {
566 <<
"layer " << (
i + 1);
568 for (
int i = per_frame;
i < layer_count;
i++) {
573 opacity_layer->Preroll(context);
574 ASSERT_FALSE(opacity_layer->children_can_accept_opacity());
578 context->raster_cache->BeginFrame();
579 for (
int i = 0;
i < layer_count;
i++) {
584 <<
"layer " << (
i + 1);
586 opacity_layer->Preroll(context);
587 ASSERT_TRUE(opacity_layer->children_can_accept_opacity());
std::vector< RasterCacheItem * > * raster_cached_entries