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:

committed by
Chromium LUCI CQ

parent
7d6fe16f78
commit
d84dd2efb1
@ -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) {
|
||||
|
Reference in New Issue
Block a user