Index: src/gpu/GrLayerCache.h |
diff --git a/src/gpu/GrLayerCache.h b/src/gpu/GrLayerCache.h |
index 38d4d9b500a73263ea14c1b81a1e3828e9818ba6..790b82a8f3e74651ca52efae623ab7e6de9012fe 100644 |
--- a/src/gpu/GrLayerCache.h |
+++ b/src/gpu/GrLayerCache.h |
@@ -51,44 +51,36 @@ struct GrCachedLayer { |
public: |
// For SkTDynamicHash |
struct Key { |
- Key(uint32_t pictureID, int start, int stop, const SkIPoint& offset, const SkMatrix& ctm) |
+ // TODO: the key needs to include the clip |
+ Key(uint32_t pictureID, int start, const SkMatrix& ctm) |
: fPictureID(pictureID) |
- , fStart(start) |
- , fStop(stop) |
- , fOffset(offset) |
- , fCTM(ctm) { |
- fCTM.getType(); // force initialization of type so hashes match |
- |
+ , fStart(start) { |
+ fCTM[0] = ctm.getScaleX(); |
+ fCTM[1] = ctm.getSkewX(); |
+ fCTM[2] = ctm.getSkewY(); |
+ fCTM[3] = ctm.getScaleY(); |
// Key needs to be tightly packed. |
- GR_STATIC_ASSERT(sizeof(Key) == sizeof(uint32_t) + 2 * sizeof(int) + |
- 2 * sizeof(int32_t) + |
- 9 * sizeof(SkScalar) + sizeof(uint32_t)); |
+ GR_STATIC_ASSERT(sizeof(Key) == sizeof(uint32_t) + // picture ID |
+ sizeof(int) + // start index |
+ 4 * sizeof(SkScalar)); // 2x2 from CTM |
} |
bool operator==(const Key& other) const { |
return fPictureID == other.fPictureID && |
fStart == other.fStart && |
- fStop == other.fStop && |
- fOffset == other.fOffset && |
- fCTM.cheapEqualTo(other.fCTM); |
+ 0 == memcmp(fCTM, other.fCTM, sizeof(fCTM)); |
} |
uint32_t pictureID() const { return fPictureID; } |
int start() const { return fStart; } |
- int stop() const { return fStop; } |
- const SkIPoint& offset() const { return fOffset; } |
- const SkMatrix& ctm() const { return fCTM; } |
private: |
// ID of the picture of which this layer is a part |
const uint32_t fPictureID; |
- // The range of commands in the picture this layer represents |
+ // The the index of the saveLayer command in the picture |
const int fStart; |
- const int fStop; |
- // The offset of the layer in device space |
- const SkIPoint fOffset; |
- // The CTM applied to this layer in the picture |
- SkMatrix fCTM; |
+ // The 2x2 portion of the CTM applied to this layer in the picture |
+ SkScalar fCTM[4]; |
}; |
static const Key& GetKey(const GrCachedLayer& layer) { return layer.fKey; } |
@@ -98,9 +90,9 @@ public: |
// GrCachedLayer proper |
GrCachedLayer(uint32_t pictureID, int start, int stop, |
- const SkIPoint& offset, const SkMatrix& ctm, |
- const SkPaint* paint) |
- : fKey(pictureID, start, stop, offset, ctm) |
+ const SkMatrix& ctm, const SkPaint* paint) |
+ : fKey(pictureID, start, ctm) |
+ , fStop(stop) |
, fPaint(paint ? SkNEW_ARGS(SkPaint, (*paint)) : NULL) |
, fTexture(NULL) |
, fRect(GrIRect16::MakeEmpty()) |
@@ -116,10 +108,8 @@ public: |
uint32_t pictureID() const { return fKey.pictureID(); } |
int start() const { return fKey.start(); } |
- int stop() const { return fKey.stop(); } |
- const SkIPoint& offset() const { return fKey.offset(); } |
- const SkMatrix& ctm() const { return fKey.ctm(); } |
+ int stop() const { return fStop; } |
void setTexture(GrTexture* texture, const GrIRect16& rect) { |
SkRefCnt_SafeAssign(fTexture, texture); |
fRect = rect; |
@@ -145,6 +135,9 @@ public: |
private: |
const Key fKey; |
+ // The final "restore" operation index of the cached layer |
+ const int fStop; |
+ |
// The paint used when dropping the layer down into the owning canvas. |
// Can be NULL. This class makes a copy for itself. |
const SkPaint* fPaint; |
@@ -187,11 +180,9 @@ public: |
// elements by the GrContext |
void freeAll(); |
- GrCachedLayer* findLayer(uint32_t pictureID, int start, int stop, |
- const SkIPoint& offset, const SkMatrix& ctm); |
+ GrCachedLayer* findLayer(uint32_t pictureID, int start, const SkMatrix& ctm); |
GrCachedLayer* findLayerOrCreate(uint32_t pictureID, |
int start, int stop, |
- const SkIPoint& offset, |
const SkMatrix& ctm, |
const SkPaint* paint); |
@@ -247,8 +238,7 @@ private: |
void initAtlas(); |
GrCachedLayer* createLayer(uint32_t pictureID, int start, int stop, |
- const SkIPoint& offset, const SkMatrix& ctm, |
- const SkPaint* paint); |
+ const SkMatrix& ctm, const SkPaint* paint); |
void purgeAll(); |