| Index: src/core/SkReadBuffer.cpp
|
| diff --git a/src/core/SkReadBuffer.cpp b/src/core/SkReadBuffer.cpp
|
| index 2dd9f093ac2be7e21da632f84e7f03cc15bbc0c7..cc591c7258b7922b99418fdacf8fe0d144023688 100644
|
| --- a/src/core/SkReadBuffer.cpp
|
| +++ b/src/core/SkReadBuffer.cpp
|
| @@ -33,6 +33,7 @@ SkReadBuffer::SkReadBuffer() {
|
|
|
| fFactoryArray = nullptr;
|
| fFactoryCount = 0;
|
| + fCustomFactory.reset(new SkTHashMap<SkFlattenable::Factory, SkFlattenable::Factory>());
|
| fBitmapDecoder = nullptr;
|
| #ifdef DEBUG_NON_DETERMINISTIC_ASSERT
|
| fDecodedBitmapIndex = -1;
|
| @@ -51,6 +52,7 @@ SkReadBuffer::SkReadBuffer(const void* data, size_t size) {
|
|
|
| fFactoryArray = nullptr;
|
| fFactoryCount = 0;
|
| + fCustomFactory.reset(new SkTHashMap<SkFlattenable::Factory, SkFlattenable::Factory>());
|
| fBitmapDecoder = nullptr;
|
| #ifdef DEBUG_NON_DETERMINISTIC_ASSERT
|
| fDecodedBitmapIndex = -1;
|
| @@ -71,6 +73,7 @@ SkReadBuffer::SkReadBuffer(SkStream* stream) {
|
|
|
| fFactoryArray = nullptr;
|
| fFactoryCount = 0;
|
| + fCustomFactory.reset(new SkTHashMap<SkFlattenable::Factory, SkFlattenable::Factory>());
|
| fBitmapDecoder = nullptr;
|
| #ifdef DEBUG_NON_DETERMINISTIC_ASSERT
|
| fDecodedBitmapIndex = -1;
|
| @@ -352,6 +355,12 @@ SkFlattenable* SkReadBuffer::readFlattenable(SkFlattenable::Type ft) {
|
| if (nullptr == factory) {
|
| return nullptr; // writer failed to give us the flattenable
|
| }
|
| +
|
| + // Check if a custom Factory has been specified for this flattenable.
|
| + SkFlattenable::Factory* customFactoryPtr = getCustomFactory(factory);
|
| + if (customFactoryPtr) {
|
| + factory = *customFactoryPtr;
|
| + }
|
| }
|
|
|
| // if we get here, factory may still be null, but if that is the case, the
|
|
|