Chromium Code Reviews| Index: src/gpu/GrBatchAtlas.h |
| diff --git a/src/gpu/GrBatchAtlas.h b/src/gpu/GrBatchAtlas.h |
| index cd8123f140980fdb581ceb9789948098c85d7452..665b3da32d69164e636a108d84421e129da2e64f 100644 |
| --- a/src/gpu/GrBatchAtlas.h |
| +++ b/src/gpu/GrBatchAtlas.h |
| @@ -54,12 +54,53 @@ public: |
| data->fData = userData; |
| } |
| + /* |
| + * A class which can be handed back to GrBatchAtlas for updating in bulk last ref tokens. |
| + * NOTE: This class assumes you want to set the same BatchToken for each plot. |
| + */ |
| + class BulkTokenReffer { |
|
bsalomon
2015/04/01 20:21:31
I find the use of "Ref" confusing in this class. I
|
| + public: |
| + BulkTokenReffer() : fPlotAlreadyUpdated(0), fBatchToken(0) {} |
| + void setRefToken(GrBatchAtlas* atlas, AtlasID id, BatchToken token) { |
|
bsalomon
2015/04/01 20:21:31
Does this mean it sets here and when setLastRefTok
|
| + int index = GrBatchAtlas::GetIndexFromID(id); |
| + if (!this->find(index)) { |
| + this->set(index); |
| + atlas->setLastRefTokenInternal(index, token); |
| + fBatchToken = token; |
| + } |
| + } |
| + |
| + void reset() { |
| + fPlotsToUpdate.reset(); |
| + fPlotAlreadyUpdated = 0; |
| + } |
| + |
| + private: |
| + bool find(int index) const { |
| + return (fPlotAlreadyUpdated >> index) & 1; |
| + } |
| + void set(int index) { |
| + SkASSERT(!this->find(index)); |
| + fPlotAlreadyUpdated = fPlotAlreadyUpdated | (1 << index); |
| + fPlotsToUpdate.push_back(index); |
| + } |
| + |
| + static const int kMaxPlots = 32; |
| + uint32_t fPlotAlreadyUpdated; |
| + BatchToken fBatchToken; |
| + SkSTArray<4, int, true> fPlotsToUpdate; |
| + |
| + friend class GrBatchAtlas; |
| + }; |
| + |
| + void setLastRefTokenBulk(const BulkTokenReffer& reffer); |
| + |
| private: |
| - int getIndexFromID(AtlasID id) { |
| + static int GetIndexFromID(AtlasID id) { |
| return id & 0xffff; |
| } |
| - int getGenerationFromID(AtlasID id) { |
| + static int GetGenerationFromID(AtlasID id) { |
| return (id >> 16) & 0xffff; |
| } |
| @@ -69,6 +110,8 @@ private: |
| inline void processEviction(AtlasID); |
| + void setLastRefTokenInternal(int index, BatchToken); |
| + |
| GrTexture* fTexture; |
| int fNumPlotsX; |
| int fNumPlotsY; |
| @@ -87,6 +130,8 @@ private: |
| SkAutoTUnref<BatchPlot>* fPlotArray; |
| // LRU list of GrPlots (MRU at head - LRU at tail) |
| GrBatchPlotList fPlotList; |
| + |
| + friend class BulkTokenReffer; |
| }; |
| #endif |