53 preroll_state_stack, &
cache, &raster_time, &ui_time);
55 paint_state_stack, &
cache, &raster_time, &ui_time);
65 display_list_item, preroll_context, paint_context, matrix));
66 ASSERT_FALSE(display_list_item.
Draw(paint_context, &dummy_canvas, &
paint));
69 ASSERT_EQ(
cache.picture_metrics().total_count(), 0u);
70 ASSERT_EQ(
cache.picture_metrics().total_bytes(), 0u);
75 display_list_item, preroll_context, paint_context, matrix));
76 ASSERT_FALSE(display_list_item.
Draw(paint_context, &dummy_canvas, &
paint));
79 ASSERT_EQ(
cache.picture_metrics().total_count(), 0u);
80 ASSERT_EQ(
cache.picture_metrics().total_bytes(), 0u);
85 display_list_item, preroll_context, paint_context, matrix));
86 ASSERT_TRUE(display_list_item.
Draw(paint_context, &dummy_canvas, &
paint));
89 ASSERT_EQ(
cache.picture_metrics().total_count(), 1u);
91 ASSERT_EQ(
cache.picture_metrics().total_bytes(), 25624u);
113 preroll_state_stack, &
cache, &raster_time, &ui_time);
115 paint_state_stack, &
cache, &raster_time, &ui_time);
126 display_list_item, preroll_context, paint_context, matrix));
127 ASSERT_FALSE(display_list_item.
Draw(paint_context, &dummy_canvas, &
paint));
134 display_list_item, preroll_context, paint_context, matrix));
135 ASSERT_FALSE(display_list_item.
Draw(paint_context, &dummy_canvas, &
paint));
142 display_list_item, preroll_context, paint_context, matrix));
143 ASSERT_TRUE(display_list_item.
Draw(paint_context, &dummy_canvas, &
paint));
147 size_t threshold = 1;
159 preroll_state_stack, &
cache, &raster_time, &ui_time);
161 auto dummy_draw_function = [](
DlCanvas* canvas) {};
162 bool did_draw_checkerboard =
false;
164 did_draw_checkerboard =
true;
169 .dst_color_space = paint_context.dst_color_space,
171 .logical_rect = display_list->bounds(),
172 .flow_type =
"RasterCacheFlow::DisplayList",
176 cache.SetCheckboardCacheImages(
false);
177 cache.Rasterize(r_context,
nullptr, dummy_draw_function, draw_checkerboard);
178 ASSERT_FALSE(did_draw_checkerboard);
180 cache.SetCheckboardCacheImages(
true);
181 cache.Rasterize(r_context,
nullptr, dummy_draw_function, draw_checkerboard);
182 ASSERT_TRUE(did_draw_checkerboard);
220 size_t picture_cache_limit_per_frame = 0;
238 preroll_state_stack, &
cache, &raster_time, &ui_time);
240 paint_state_stack, &
cache, &raster_time, &ui_time);
250 display_list_item, preroll_context, paint_context, matrix));
251 ASSERT_FALSE(display_list_item.
Draw(paint_context, &dummy_canvas, &
paint));
254 display_list_item, preroll_context, paint_context, matrix));
255 ASSERT_FALSE(display_list_item.
Draw(paint_context, &dummy_canvas, &
paint));
258 display_list_item, preroll_context, paint_context, matrix));
259 ASSERT_FALSE(display_list_item.
Draw(paint_context, &dummy_canvas, &
paint));
263 size_t threshold = 1;
282 preroll_state_stack, &
cache, &raster_time, &ui_time);
284 paint_state_stack, &
cache, &raster_time, &ui_time);
296 cache.EvictUnusedCacheEntries();
297 ASSERT_EQ(
cache.EstimatePictureCacheByteSize(), 0u);
302 ASSERT_EQ(
cache.EstimatePictureCacheByteSize(), 0u);
303 ASSERT_FALSE(display_list_item_1.
Draw(paint_context, &dummy_canvas, &
paint));
304 ASSERT_FALSE(display_list_item_2.
Draw(paint_context, &dummy_canvas, &
paint));
307 ASSERT_EQ(
cache.EstimatePictureCacheByteSize(), 0u);
308 ASSERT_EQ(
cache.picture_metrics().total_count(), 0u);
309 ASSERT_EQ(
cache.picture_metrics().total_bytes(), 0u);
314 cache.EvictUnusedCacheEntries();
315 ASSERT_EQ(
cache.EstimatePictureCacheByteSize(), 0u);
320 ASSERT_EQ(
cache.EstimatePictureCacheByteSize(), 51248u);
321 ASSERT_TRUE(display_list_item_1.
Draw(paint_context, &dummy_canvas, &
paint));
322 ASSERT_TRUE(display_list_item_2.
Draw(paint_context, &dummy_canvas, &
paint));
325 ASSERT_EQ(
cache.EstimatePictureCacheByteSize(), 51248u);
326 ASSERT_EQ(
cache.picture_metrics().total_count(), 2u);
327 ASSERT_EQ(
cache.picture_metrics().total_bytes(), 51248u);
331 cache.EvictUnusedCacheEntries();
332 ASSERT_EQ(
cache.EstimatePictureCacheByteSize(), 25624u);
335 ASSERT_EQ(
cache.EstimatePictureCacheByteSize(), 25624u);
336 ASSERT_TRUE(display_list_item_1.
Draw(paint_context, &dummy_canvas, &
paint));
339 ASSERT_EQ(
cache.EstimatePictureCacheByteSize(), 25624u);
340 ASSERT_EQ(
cache.picture_metrics().total_count(), 1u);
341 ASSERT_EQ(
cache.picture_metrics().total_bytes(), 25624u);
344 cache.EvictUnusedCacheEntries();
345 ASSERT_EQ(
cache.EstimatePictureCacheByteSize(), 0u);
348 ASSERT_EQ(
cache.EstimatePictureCacheByteSize(), 0u);
349 ASSERT_EQ(
cache.picture_metrics().total_count(), 0u);
350 ASSERT_EQ(
cache.picture_metrics().total_bytes(), 0u);
354 cache.Draw(display_list_item_1.
GetId().value(), dummy_canvas, &
paint));
355 ASSERT_FALSE(display_list_item_1.
Draw(paint_context, &dummy_canvas, &
paint));
357 cache.Draw(display_list_item_2.
GetId().value(), dummy_canvas, &
paint));
358 ASSERT_FALSE(display_list_item_2.
Draw(paint_context, &dummy_canvas, &
paint));
373 size_t threshold = 1;
395 preroll_state_stack, &
cache, &raster_time, &ui_time);
397 paint_state_stack, &
cache, &raster_time, &ui_time);
406 display_list_item, preroll_context, paint_context, ctm));
407 ASSERT_FALSE(display_list_item.
Draw(paint_context, &canvas, &
paint));
413 display_list_item, preroll_context, paint_context, ctm));
414 ASSERT_TRUE(display_list_item.
Draw(paint_context, &canvas, &
paint));
417 ASSERT_TRUE(
cache.Draw(display_list_item.
GetId().value(), canvas, &
paint));
418 ASSERT_TRUE(display_list_item.
Draw(paint_context, &canvas, &
paint));
422 size_t threshold = 1;
428 ASSERT_EQ(display_list->op_count(), 1u);
429 ASSERT_EQ(display_list->op_count(
true), 36u);
442 preroll_state_stack, &
cache, &raster_time, &ui_time);
444 paint_state_stack, &
cache, &raster_time, &ui_time);
454 display_list_item, preroll_context, paint_context, matrix));
455 ASSERT_FALSE(display_list_item.
Draw(paint_context, &dummy_canvas, &
paint));
461 display_list_item, preroll_context, paint_context, matrix));
462 ASSERT_TRUE(display_list_item.
Draw(paint_context, &dummy_canvas, &
paint));
469 size_t threshold = 1;
476 unsigned int complexity_score = calculator->
Compute(display_list.get());
478 ASSERT_EQ(complexity_score, 5u);
479 ASSERT_EQ(display_list->op_count(), 5u);
493 preroll_state_stack, &
cache, &raster_time, &ui_time);
495 paint_state_stack, &
cache, &raster_time, &ui_time);
505 display_list_item, preroll_context, paint_context, matrix));
506 ASSERT_FALSE(display_list_item.
Draw(paint_context, &dummy_canvas, &
paint));
512 display_list_item, preroll_context, paint_context, matrix));
513 ASSERT_FALSE(display_list_item.
Draw(paint_context, &dummy_canvas, &
paint));
517 complexity_score = calculator->
Compute(display_list.get());
519 ASSERT_EQ(complexity_score, 6u);
520 ASSERT_EQ(display_list->op_count(), 6u);
528 display_list_item_2, preroll_context, paint_context, matrix));
529 ASSERT_FALSE(display_list_item_2.
Draw(paint_context, &dummy_canvas, &
paint));
535 display_list_item_2, preroll_context, paint_context, matrix));
536 ASSERT_TRUE(display_list_item_2.
Draw(paint_context, &dummy_canvas, &
paint));
540 size_t threshold = 2;
548 int matrix_count =
sizeof(matrices) /
sizeof(matrices[0]);
563 preroll_state_stack, &
cache, &raster_time, &ui_time);
565 paint_state_stack, &
cache, &raster_time, &ui_time);
572 for (
int i = 0; i < 10; i++) {
575 for (
int j = 0; j < matrix_count; j++) {
578 display_list_item, preroll_context, paint_context, matrices[j]));
581 for (
int j = 0; j < matrix_count; j++) {
584 display_list_item.
Draw(paint_context, &dummy_canvas, &
paint));
597 auto blur_layer = std::make_shared<ImageFilterLayer>(blur_filter);
599 auto transform_layer = std::make_shared<TransformLayer>(matrix);
602 child_layer->set_expected_paint_matrix(cache_matrix);
604 blur_layer->Add(child_layer);
605 transform_layer->Add(blur_layer);
607 size_t threshold = 2;
618 std::vector<RasterCacheItem*> cache_items;
623 preroll_state_stack, &
cache, &raster_time, &ui_time);
624 preroll_holder.preroll_context.raster_cached_entries = &cache_items;
625 transform_layer->Preroll(&preroll_holder.preroll_context);
628 &raster_time, &ui_time);
630 cache.EvictUnusedCacheEntries();
632 *preroll_holder.preroll_context.raster_cached_entries,
633 &paint_holder.paint_context);
688 map[layer_first_key] = 50;
689 map[layer_second_key] = 100;
690 map[layer_third_key] = 150;
691 ASSERT_EQ(map[layer_first_key], 50);
692 ASSERT_EQ(map[layer_second_key], 100);
693 ASSERT_EQ(map[layer_third_key], 150);
699 map[picture_first_key] = 200;
700 map[picture_second_key] = 250;
701 map[picture_third_key] = 300;
702 ASSERT_EQ(map[picture_first_key], 200);
703 ASSERT_EQ(map[picture_second_key], 250);
704 ASSERT_EQ(map[picture_third_key], 300);
710 map[display_list_first_key] = 350;
711 map[display_list_second_key] = 400;
712 map[display_list_third_key] = 450;
713 ASSERT_EQ(map[display_list_first_key], 350);
714 ASSERT_EQ(map[display_list_second_key], 400);
715 ASSERT_EQ(map[display_list_third_key], 450);
727 map[layer_children_first_key] = 100;
728 map[layer_children_second_key] = 200;
729 map[layer_children_third_key] = 300;
730 ASSERT_EQ(map[layer_children_first_key], 100);
731 ASSERT_EQ(map[layer_children_second_key], 200);
732 ASSERT_EQ(map[layer_children_third_key], 300);
790 auto layer = std::make_shared<ContainerLayer>();
793 auto mock_layer = std::make_shared<MockLayer>(child_path);
794 layer->Add(mock_layer);
797 auto display_list_layer = std::make_shared<DisplayListLayer>(
799 layer->Add(display_list_layer);
802 std::vector<RasterCacheKeyID> expected_ids;
803 expected_ids.emplace_back(
807 ASSERT_EQ(expected_ids[0], mock_layer->caching_key_id());
808 ASSERT_EQ(expected_ids[1], display_list_layer->caching_key_id());
809 ASSERT_EQ(ids, expected_ids);
812TEST(RasterCacheUtilsTest, SkMatrixIntegralTransCTM) {
813#define EXPECT_EQ_WITH_TRANSLATE(test, expected, expected_tx, expected_ty) \
815 EXPECT_EQ(test[SkMatrix::kMScaleX], expected[SkMatrix::kMScaleX]); \
816 EXPECT_EQ(test[SkMatrix::kMSkewX], expected[SkMatrix::kMSkewX]); \
817 EXPECT_EQ(test[SkMatrix::kMScaleY], expected[SkMatrix::kMScaleY]); \
818 EXPECT_EQ(test[SkMatrix::kMSkewY], expected[SkMatrix::kMSkewY]); \
819 EXPECT_EQ(test[SkMatrix::kMSkewX], expected[SkMatrix::kMSkewX]); \
820 EXPECT_EQ(test[SkMatrix::kMPersp0], expected[SkMatrix::kMPersp0]); \
821 EXPECT_EQ(test[SkMatrix::kMPersp1], expected[SkMatrix::kMPersp1]); \
822 EXPECT_EQ(test[SkMatrix::kMPersp2], expected[SkMatrix::kMPersp2]); \
823 EXPECT_EQ(test[SkMatrix::kMTransX], expected_tx); \
824 EXPECT_EQ(test[SkMatrix::kMTransY], expected_ty); \
827#define EXPECT_NON_INTEGER_TRANSLATION(matrix) \
828 EXPECT_TRUE(SkScalarFraction(matrix[SkMatrix::kMTransX]) != 0.0f || \
829 SkScalarFraction(matrix[SkMatrix::kMTransY]) != 0.0f)
837 EXPECT_EQ(get, matrix);
845 EXPECT_EQ(get, matrix);
855 EXPECT_EQ(get, compute);
865 EXPECT_EQ(get, compute);
875 EXPECT_EQ(get, compute);
883 EXPECT_EQ(get, matrix);
888 matrix.preTranslate(10.0f, 12.0f);
892 EXPECT_EQ(get, matrix);
897 matrix.preTranslate(10.7f, 12.1f);
903 EXPECT_EQ(get, compute);
911 EXPECT_EQ(get, matrix);
916 matrix.preTranslate(10.7f, 12.1f);
921 EXPECT_EQ(get, matrix);
929 EXPECT_EQ(get, matrix);
934 matrix.preTranslate(10.7f, 12.1f);
939 EXPECT_EQ(get, matrix);
944 matrix.setPerspX(0.1);
948 EXPECT_EQ(get, matrix);
953 matrix.setPerspX(0.1);
954 matrix.preTranslate(10.7f, 12.1f);
959 EXPECT_EQ(get, matrix);
964 matrix.setPerspY(0.1);
968 EXPECT_EQ(get, matrix);
973 matrix.setPerspY(0.1);
974 matrix.preTranslate(10.7f, 12.1f);
979 EXPECT_EQ(get, matrix);
992 EXPECT_EQ(get, matrix);
1002 matrix.preTranslate(10.7f, 12.1f);
1007 EXPECT_EQ(get, matrix);
1009#undef EXPECT_NON_INTEGER_TRANSLATION
1010#undef EXPECT_EQ_WITH_TRANSLATE