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 |