| Index: src/core/SkImageFilterCache.h
|
| diff --git a/src/core/SkImageFilterCache.h b/src/core/SkImageFilterCache.h
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..25079e194fc6b5d61ce05e64bf6ca6aba5ddc225
|
| --- /dev/null
|
| +++ b/src/core/SkImageFilterCache.h
|
| @@ -0,0 +1,62 @@
|
| +/*
|
| + * Copyright 2016 Google Inc.
|
| + *
|
| + * Use of this source code is governed by a BSD-style license that can be
|
| + * found in the LICENSE file.
|
| + */
|
| +
|
| +#ifndef SkImageFilterCache_DEFINED
|
| +#define SkImageFilterCache_DEFINED
|
| +
|
| +#include "SkMatrix.h"
|
| +#include "SkRefCnt.h"
|
| +
|
| +struct SkIPoint;
|
| +class SkSpecialImage;
|
| +
|
| +struct SkImageFilterCacheKey {
|
| + SkImageFilterCacheKey(const uint32_t uniqueID, const SkMatrix& matrix,
|
| + const SkIRect& clipBounds, uint32_t srcGenID, const SkIRect& srcSubset)
|
| + : fUniqueID(uniqueID)
|
| + , fMatrix(matrix)
|
| + , fClipBounds(clipBounds)
|
| + , fSrcGenID(srcGenID)
|
| + , fSrcSubset(srcSubset) {
|
| + // Assert that Key is tightly-packed, since it is hashed.
|
| + static_assert(sizeof(SkImageFilterCacheKey) == sizeof(uint32_t) + sizeof(SkMatrix) +
|
| + sizeof(SkIRect) + sizeof(uint32_t) + 4 * sizeof(int32_t),
|
| + "image_filter_key_tight_packing");
|
| + fMatrix.getType(); // force initialization of type, so hashes match
|
| + }
|
| +
|
| + uint32_t fUniqueID;
|
| + SkMatrix fMatrix;
|
| + SkIRect fClipBounds;
|
| + uint32_t fSrcGenID;
|
| + SkIRect fSrcSubset;
|
| +
|
| + bool operator==(const SkImageFilterCacheKey& other) const {
|
| + return fUniqueID == other.fUniqueID &&
|
| + fMatrix == other.fMatrix &&
|
| + fClipBounds == other.fClipBounds &&
|
| + fSrcGenID == other.fSrcGenID &&
|
| + fSrcSubset == other.fSrcSubset;
|
| + }
|
| +};
|
| +
|
| +// This cache maps from (filter's unique ID + CTM + clipBounds + src bitmap generation ID) to
|
| +// (result, offset).
|
| +class SkImageFilterCache : public SkRefCnt {
|
| +public:
|
| + virtual ~SkImageFilterCache() {}
|
| + static SkImageFilterCache* Create(size_t maxBytes);
|
| + static SkImageFilterCache* Get();
|
| + virtual SkSpecialImage* get(const SkImageFilterCacheKey& key, SkIPoint* offset) const = 0;
|
| + virtual void set(const SkImageFilterCacheKey& key, SkSpecialImage* image,
|
| + const SkIPoint& offset) = 0;
|
| + virtual void purge() = 0;
|
| + virtual void purgeByKeys(const SkImageFilterCacheKey[], int) = 0;
|
| + SkDEBUGCODE(virtual int count() const = 0;)
|
| +};
|
| +
|
| +#endif
|
|
|