diff options
Diffstat (limited to 'chromium/cc/paint/paint_op_buffer_unittest.cc')
-rw-r--r-- | chromium/cc/paint/paint_op_buffer_unittest.cc | 63 |
1 files changed, 29 insertions, 34 deletions
diff --git a/chromium/cc/paint/paint_op_buffer_unittest.cc b/chromium/cc/paint/paint_op_buffer_unittest.cc index 8833e3538b9..2b4ce80f232 100644 --- a/chromium/cc/paint/paint_op_buffer_unittest.cc +++ b/chromium/cc/paint/paint_op_buffer_unittest.cc @@ -2853,7 +2853,13 @@ TEST(PaintOpBufferTest, ReplacesImagesFromProvider) { buffer.Playback(&canvas, PlaybackParams(&image_provider)); } -TEST(PaintOpBufferTest, FilterSerialization) { +class PaintFilterSerializationTest : public ::testing::TestWithParam<bool> {}; + +INSTANTIATE_TEST_CASE_P(PaintFilterSerializationTests, + PaintFilterSerializationTest, + ::testing::Values(true, false)); + +TEST_P(PaintFilterSerializationTest, Basic) { SkScalar scalars[9] = {1.f, 2.f, 3.f, 4.f, 5.f, 6.f, 7.f, 8.f, 9.f}; std::vector<sk_sp<PaintFilter>> filters = { sk_sp<PaintFilter>{new ColorFilterPaintFilter( @@ -2871,9 +2877,6 @@ TEST(PaintOpBufferTest, FilterSerialization) { SkISize::Make(3, 3), scalars, 30.f, 123.f, SkIPoint::Make(0, 0), SkMatrixConvolutionImageFilter::kClampToBlack_TileMode, true, nullptr)}, - sk_sp<PaintFilter>{ - new RecordPaintFilter(sk_sp<PaintRecord>{new PaintRecord}, - SkRect::MakeXYWH(10, 15, 20, 25))}, sk_sp<PaintFilter>{new MorphologyPaintFilter( MorphologyPaintFilter::MorphType::kErode, 15, 30, nullptr)}, sk_sp<PaintFilter>{new OffsetPaintFilter(-1.f, -2.f, nullptr)}, @@ -2909,41 +2912,33 @@ TEST(PaintOpBufferTest, FilterSerialization) { SkDisplacementMapEffect::kG_ChannelSelectorType, 10, filters[6], filters[7])); filters.emplace_back(new MergePaintFilter(filters.data(), filters.size())); + filters.emplace_back(new RecordPaintFilter( + sk_sp<PaintRecord>{new PaintRecord}, SkRect::MakeXYWH(10, 15, 20, 25))); - std::unique_ptr<char, base::AlignedFreeDeleter> memory( - static_cast<char*>(base::AlignedAlloc(PaintOpBuffer::kInitialBufferSize, - PaintOpBuffer::PaintOpAlign))); TestOptionsProvider options_provider; for (size_t i = 0; i < filters.size(); ++i) { SCOPED_TRACE(i); - auto& filter = filters[i]; - - PaintFlags flags; - flags.setImageFilter(filter); - PaintOpBuffer buffer; - buffer.push<DrawRectOp>(SkRect::MakeXYWH(1, 2, 3, 4), flags); - SimpleBufferSerializer serializer(memory.get(), - PaintOpBuffer::kInitialBufferSize, - options_provider.image_provider(), - options_provider.transfer_cache_helper()); - serializer.Serialize(&buffer); - ASSERT_TRUE(serializer.valid()); - ASSERT_GT(serializer.written(), 0u); - - auto deserialized_buffer = - PaintOpBuffer::MakeFromMemory(memory.get(), serializer.written(), - options_provider.deserialize_options()); - ASSERT_TRUE(deserialized_buffer); - PaintOpBuffer::Iterator it(deserialized_buffer.get()); - ASSERT_TRUE(it); - auto* op = *it; - ASSERT_TRUE(op->GetType() == PaintOpType::DrawRect); - auto* rect_op = static_cast<DrawRectOp*>(op); - EXPECT_FLOAT_RECT_EQ(rect_op->rect, SkRect::MakeXYWH(1, 2, 3, 4)); - EXPECT_TRUE(*filter == *rect_op->flags.getImageFilter()); - ++it; - EXPECT_FALSE(it); + auto& filter = filters[i]; + std::vector<uint8_t> memory; + size_t buffer_size = filter->type() == PaintFilter::Type::kPaintRecord + ? PaintOpBuffer::kInitialBufferSize + : PaintFilter::GetFilterSize(filter.get()); + buffer_size += PaintOpWriter::HeaderBytes(); + memory.resize(buffer_size); + + PaintOpWriter writer(memory.data(), memory.size(), + options_provider.transfer_cache_helper(), + options_provider.image_provider(), GetParam()); + writer.Write(filter.get()); + ASSERT_GT(writer.size(), 0u) << PaintFilter::TypeToString(filter->type()); + + sk_sp<PaintFilter> deserialized_filter; + PaintOpReader reader(memory.data(), writer.size(), + options_provider.transfer_cache_helper(), GetParam()); + reader.Read(&deserialized_filter); + ASSERT_TRUE(deserialized_filter); + EXPECT_TRUE(*filter == *deserialized_filter); } } |