Chromium Code Reviews| Index: cc/CCPrioritizedTextureManager.h |
| diff --git a/cc/CCPrioritizedTextureManager.h b/cc/CCPrioritizedTextureManager.h |
| index 88a4f45fcfb176186078e1ce0db5b425e4daf285..6a7a1c61031a71122533241f6f3b9dd0e58e1d2a 100644 |
| --- a/cc/CCPrioritizedTextureManager.h |
| +++ b/cc/CCPrioritizedTextureManager.h |
| @@ -57,13 +57,9 @@ public: |
| void clearPriorities(); |
| void reduceMemoryOnImplThread(size_t limitBytes, CCResourceProvider*); |
| - bool evictedBackingsExist() const { return !m_evictedBackings.isEmpty(); } |
| + bool linkedEvictedBackingsExist() const; |
|
epenner
2012/10/09 17:25:04
Nit: I was having trouble understanding what this
ccameron
2012/10/09 21:03:56
I added a comment saying that this returns true if
|
| void getEvictedBackings(BackingVector& evictedBackings); |
| void unlinkEvictedBackings(const BackingVector& evictedBackings); |
| - // Deletes all evicted backings, unlinking them from their owning textures if needed. |
| - // Returns true if this function unlinked any backings from their owning texture while |
| - // destroying them. |
| - bool deleteEvictedBackings(); |
| bool requestLate(CCPrioritizedTexture*); |
| @@ -76,6 +72,12 @@ public: |
| void unregisterTexture(CCPrioritizedTexture*); |
| void returnBackingTexture(CCPrioritizedTexture*); |
| + // Update all backings' priorities from their owning texture. |
| + void pushTexturePrioritiesToBackings(); |
| + |
| + // Mark all textures' backings as being in the drawing impl tree. |
| + void updateBackingsInDrawingImplTree(); |
| + |
| private: |
| friend class CCPrioritizedTextureTest; |
| @@ -94,25 +96,26 @@ private: |
| // Compare backings. Lowest priority first. |
| static inline bool compareBackings(CCPrioritizedTexture::Backing* a, CCPrioritizedTexture::Backing* b) |
| { |
| - int priorityA = a->requestPriorityAtLastPriorityUpdate(); |
| - int priorityB = b->requestPriorityAtLastPriorityUpdate(); |
| - if (priorityA != priorityB) |
| - return CCPriorityCalculator::priorityIsLower(priorityA, priorityB); |
| - bool aboveCutoffA = a->wasAbovePriorityCutoffAtLastPriorityUpdate(); |
| - bool aboveCutoffB = b->wasAbovePriorityCutoffAtLastPriorityUpdate(); |
| - if (!aboveCutoffA && aboveCutoffB) |
| - return true; |
| - if (aboveCutoffA && !aboveCutoffB) |
| - return false; |
| + // Sort first by priority (note that backings that no longer have owners will |
|
epenner
2012/10/09 17:25:04
If we make some backings recyclable by intentional
ccameron
2012/10/09 21:03:56
I went ahead and put a "canBeRecycled" test first.
|
| + // always have the lowest priority) |
| + if (a->requestPriorityAtLastPriorityUpdate() != b->requestPriorityAtLastPriorityUpdate()) |
| + return CCPriorityCalculator::priorityIsLower(a->requestPriorityAtLastPriorityUpdate(), b->requestPriorityAtLastPriorityUpdate()); |
| + // Then sort by being above or below the priority cutoff. |
| + if (a->wasAbovePriorityCutoffAtLastPriorityUpdate() != b->wasAbovePriorityCutoffAtLastPriorityUpdate()) |
| + return (a->wasAbovePriorityCutoffAtLastPriorityUpdate() < b->wasAbovePriorityCutoffAtLastPriorityUpdate()); |
| + // Finally sort by being in the impl tree versus being completely unreferenced |
| + if (a->inDrawingImplTree() != b->inDrawingImplTree()) |
| + return (a->inDrawingImplTree() < b->inDrawingImplTree()); |
| return a < b; |
| } |
| CCPrioritizedTextureManager(size_t maxMemoryLimitBytes, int maxTextureSize, int pool); |
| - void updateBackingsPriorities(); |
| void evictBackingsToReduceMemory(size_t limitBytes, EvictionPriorityPolicy, CCResourceProvider*); |
| CCPrioritizedTexture::Backing* createBacking(IntSize, GC3Denum format, CCResourceProvider*); |
| void evictBackingResource(CCPrioritizedTexture::Backing*, CCResourceProvider*); |
| + void deleteUnlinkedEvictedBackings(); |
| + void sortBackings(); |
| #if !ASSERT_DISABLED |
| void assertInvariants(); |
| @@ -136,10 +139,6 @@ private: |
| TextureVector m_tempTextureVector; |
| BackingVector m_tempBackingVector; |
| - // Set by the main thread when it adjust priorities in such a way that |
| - // the m_backings array's view of priorities is now out of date. |
| - bool m_needsUpdateBackingsPrioritites; |
| - |
| DISALLOW_COPY_AND_ASSIGN(CCPrioritizedTextureManager); |
| }; |