145TEST(DisplayListRegion, Deband) {
152 auto rects_with_deband = region.
getRects(
true);
153 std::vector<DlIRect> expected{
158 EXPECT_EQ(rects_with_deband, expected);
160 auto rects_without_deband = region.getRects(
false);
161 std::vector<DlIRect> expected_without_deband{
168 EXPECT_EQ(rects_without_deband, expected_without_deband);
171TEST(DisplayListRegion, Intersects1) {
180 EXPECT_FALSE(region1.intersects(region2));
181 EXPECT_FALSE(region2.intersects(region1));
183 EXPECT_TRUE(region1.intersects(region2.bounds()));
184 EXPECT_TRUE(region2.intersects(region1.bounds()));
189 EXPECT_TRUE(region1.intersects(
191 EXPECT_FALSE(region1.intersects(
325TEST(DisplayListRegion, UnionEmpty) {
327 DlRegion region1(std::vector<DlIRect>{});
328 DlRegion region2(std::vector<DlIRect>{});
330 EXPECT_EQ(u.bounds(),
DlIRect());
331 EXPECT_TRUE(u.isEmpty());
332 auto rects = u.getRects();
333 EXPECT_TRUE(rects.empty());
336 DlRegion region1(std::vector<DlIRect>{});
342 auto rects = u.getRects();
343 std::vector<DlIRect> expected{
351 DlRegion region2(std::vector<DlIRect>{});
354 auto rects = u.getRects();
355 std::vector<DlIRect> expected{
378TEST(DisplayListRegion, TestAgainstSkRegion) {
382 std::vector<Settings> all_settings{{100}, {400}, {800}};
384 std::vector<size_t> iterations{1, 10, 100, 1000};
386 for (
const auto& settings : all_settings) {
387 for (
const auto iterations_1 : iterations) {
388 for (
const auto iterations_2 : iterations) {
389 std::random_device
d;
390 std::seed_seq seed{::testing::UnitTest::GetInstance()->random_seed()};
391 std::mt19937 rng(seed);
396 std::uniform_int_distribution pos(0, 4000);
397 std::uniform_int_distribution
size(1, settings.max_size);
399 std::vector<DlIRect> rects_in1;
400 std::vector<DlIRect> rects_in2;
402 for (
size_t i = 0;
i < iterations_1; ++
i) {
405 rects_in1.push_back(rect);
408 for (
size_t i = 0;
i < iterations_2; ++
i) {
411 rects_in2.push_back(rect);
415 sk_region1.setRects(
ToSkIRects(rects_in1.data()), rects_in1.size());
419 sk_region2.setRects(
ToSkIRects(rects_in2.data()), rects_in2.size());
422 auto intersects_1 = region1.
intersects(region2);
423 auto intersects_2 = region2.
intersects(region1);
424 auto sk_intesects = sk_region1.intersects(sk_region2);
425 EXPECT_EQ(intersects_1, intersects_2);
426 EXPECT_EQ(intersects_1, sk_intesects);
429 auto rects = region2.
getRects(
true);
430 for (
const auto& r : rects) {
437 SkRegion sk_union(sk_region1);
438 sk_union.op(sk_region2, SkRegion::kUnion_Op);
442 SkRegion sk_intersection(sk_region1);
443 sk_intersection.op(sk_region2, SkRegion::kIntersect_Op);