| Index: src/core/SkImageCacherator.cpp
|
| diff --git a/src/core/SkImageCacherator.cpp b/src/core/SkImageCacherator.cpp
|
| index 75f8734e838004ac63b3bc393524b2223d69603f..124da389dcb8ae235300e0663fca37bbe28e3489 100644
|
| --- a/src/core/SkImageCacherator.cpp
|
| +++ b/src/core/SkImageCacherator.cpp
|
| @@ -10,7 +10,6 @@
|
| #include "SkImage_Base.h"
|
| #include "SkImageCacherator.h"
|
| #include "SkMallocPixelRef.h"
|
| -#include "SkMutex.h"
|
| #include "SkNextID.h"
|
| #include "SkPixelRef.h"
|
| #include "SkResourceCache.h"
|
| @@ -33,24 +32,6 @@
|
| // see skbug.com/ 4971, 5128, ...
|
| //#define SK_SUPPORT_COMPRESSED_TEXTURES_IN_CACHERATOR
|
|
|
| -// Ref-counted tuple(SkImageGenerator, SkMutex) which allows sharing of one generator
|
| -// among several cacherators.
|
| -class SkImageCacherator::SharedGenerator final : public SkNVRefCnt<SharedGenerator> {
|
| -public:
|
| - static sk_sp<SharedGenerator> Make(SkImageGenerator* gen) {
|
| - return gen ? sk_sp<SharedGenerator>(new SharedGenerator(gen)) : nullptr;
|
| - }
|
| -
|
| -private:
|
| - explicit SharedGenerator(SkImageGenerator* gen) : fGenerator(gen) { SkASSERT(gen); }
|
| -
|
| - friend class ScopedGenerator;
|
| -
|
| - std::unique_ptr<SkImageGenerator> fGenerator;
|
| - SkMutex fMutex;
|
| -};
|
| -
|
| -
|
| // Helper for exclusive access to a shared generator.
|
| class SkImageCacherator::ScopedGenerator {
|
| public:
|
| @@ -73,22 +54,22 @@ private:
|
| SkAutoExclusive fAutoAquire;
|
| };
|
|
|
| -SkImageCacherator::Validator::Validator(SkImageGenerator* gen, const SkIRect* subset)
|
| - // We are required to take ownership of gen, regardless of whether we instantiate a cacherator
|
| - // or not. On instantiation, the client is responsible for transferring ownership.
|
| - : fSharedGenerator(SkImageCacherator::SharedGenerator::Make(gen)) {
|
| +SkImageCacherator::Validator::Validator(sk_sp<SharedGenerator> gen, const SkIRect* subset)
|
| + : fSharedGenerator(std::move(gen)) {
|
|
|
| if (!fSharedGenerator) {
|
| return;
|
| }
|
|
|
| - const SkImageInfo& info = gen->getInfo();
|
| + // The following generator accessors are safe without acquiring the mutex (const getters).
|
| + // TODO: refactor to use a ScopedGenerator instead, for clarity.
|
| + const SkImageInfo& info = fSharedGenerator->fGenerator->getInfo();
|
| if (info.isEmpty()) {
|
| fSharedGenerator.reset();
|
| return;
|
| }
|
|
|
| - fUniqueID = gen->uniqueID();
|
| + fUniqueID = fSharedGenerator->fGenerator->uniqueID();
|
| const SkIRect bounds = SkIRect::MakeWH(info.width(), info.height());
|
| if (subset) {
|
| if (!bounds.contains(*subset)) {
|
| @@ -107,11 +88,9 @@ SkImageCacherator::Validator::Validator(SkImageGenerator* gen, const SkIRect* su
|
| fOrigin = SkIPoint::Make(subset->x(), subset->y());
|
| }
|
|
|
| -SkImageCacherator::Validator::~Validator() {}
|
| -
|
| SkImageCacherator* SkImageCacherator::NewFromGenerator(SkImageGenerator* gen,
|
| const SkIRect* subset) {
|
| - Validator validator(gen, subset);
|
| + Validator validator(SharedGenerator::Make(gen), subset);
|
|
|
| return validator ? new SkImageCacherator(&validator) : nullptr;
|
| }
|
|
|