0

Stop relying on SkFlattenable api

Needed for https://skia-review.googlesource.com/c/skia/+/419357

Bug: skia:12111
Change-Id: I434edd3c09d42c62f6e49f83a13bac63b9013d2d
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2969803
Reviewed-by: Brian Osman <brianosman@google.com>
Reviewed-by: Xianzhu Wang <wangxianzhu@chromium.org>
Commit-Queue: Mike Reed <reed@google.com>
Cr-Commit-Position: refs/heads/master@{#893867}
This commit is contained in:
Mike Reed
2021-06-18 17:28:49 +00:00
committed by Chromium LUCI CQ
parent 7d6fe16f78
commit d84dd2efb1
2 changed files with 13 additions and 10 deletions

@ -133,7 +133,7 @@ uint8_t* PaintOpReader::CopyScratchSpace(size_t bytes) {
}
template <typename T>
void PaintOpReader::ReadFlattenable(sk_sp<T>* val) {
void PaintOpReader::ReadFlattenable(sk_sp<T>* val, Factory<T> factory) {
size_t bytes = 0;
ReadSize(&bytes);
if (remaining_bytes_ < bytes)
@ -144,9 +144,7 @@ void PaintOpReader::ReadFlattenable(sk_sp<T>* val) {
return;
auto* scratch = CopyScratchSpace(bytes);
val->reset(static_cast<T*>(
SkFlattenable::Deserialize(T::GetFlattenableType(), scratch, bytes)
.release()));
val->reset(factory(scratch, bytes, nullptr).release());
if (!val)
SetInvalid();
@ -263,9 +261,9 @@ void PaintOpReader::Read(PaintFlags* flags) {
ReadSimple(&flags->bitfields_uint_);
ReadFlattenable(&flags->path_effect_);
ReadFlattenable(&flags->mask_filter_);
ReadFlattenable(&flags->color_filter_);
ReadFlattenable(&flags->path_effect_, SkPathEffect::Deserialize);
ReadFlattenable(&flags->mask_filter_, SkMaskFilter::Deserialize);
ReadFlattenable(&flags->color_filter_, SkColorFilter::Deserialize);
if (enable_security_constraints_) {
size_t bytes = 0;
@ -275,7 +273,7 @@ void PaintOpReader::Read(PaintFlags* flags) {
return;
}
} else {
ReadFlattenable(&flags->draw_looper_);
ReadFlattenable(&flags->draw_looper_, SkDrawLooper::Deserialize);
}
Read(&flags->image_filter_);
@ -859,7 +857,7 @@ void PaintOpReader::ReadColorFilterPaintFilter(
sk_sp<SkColorFilter> color_filter;
sk_sp<PaintFilter> input;
ReadFlattenable(&color_filter);
ReadFlattenable(&color_filter, SkColorFilter::Deserialize);
Read(&input);
if (!color_filter)
SetInvalid();

@ -130,7 +130,12 @@ class CC_PAINT_EXPORT PaintOpReader {
void ReadSimple(T* val);
template <typename T>
void ReadFlattenable(sk_sp<T>* val);
using Factory = sk_sp<T> (*)(const void* data,
size_t size,
const SkDeserialProcs* procs);
template <typename T>
void ReadFlattenable(sk_sp<T>* val, Factory<T> factory);
template <typename Enum, Enum kMaxValue = Enum::kMaxValue>
void ReadEnum(Enum* enum_value) {