| Index: cc/CCPrioritizedTextureManager.h
|
| diff --git a/cc/CCPrioritizedTextureManager.h b/cc/CCPrioritizedTextureManager.h
|
| index 15bdc186acc275231862157a806b0478f3549ba9..52b35d68d2b4696100cf9e74c19693b05392af7c 100644
|
| --- a/cc/CCPrioritizedTextureManager.h
|
| +++ b/cc/CCPrioritizedTextureManager.h
|
| @@ -33,6 +33,8 @@ public:
|
| }
|
| ~CCPrioritizedTextureManager();
|
|
|
| + typedef Vector<CCPrioritizedTexture::Backing*> BackingVector;
|
| +
|
| // FIXME (http://crbug.com/137094): This 64MB default is a straggler from the
|
| // old texture manager and is just to give us a default memory allocation before
|
| // we get a callback from the GPU memory manager. We should probaby either:
|
| @@ -54,12 +56,18 @@ public:
|
| void prioritizeTextures();
|
| void clearPriorities();
|
|
|
| + void reduceMemoryOnImplThread(size_t limitBytes, CCResourceProvider*);
|
| + 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 to unlinked any backings from their owning texture while
|
| + // destroying them.
|
| + bool deleteEvictedBackings();
|
| +
|
| bool requestLate(CCPrioritizedTexture*);
|
|
|
| void reduceMemory(CCResourceProvider*);
|
| void clearAllMemory(CCResourceProvider*);
|
| - void unlinkAllBackings();
|
| - void deleteAllUnlinkedBackings();
|
|
|
| void acquireBackingTextureIfNeeded(CCPrioritizedTexture*, CCResourceProvider*);
|
|
|
| @@ -67,11 +75,14 @@ public:
|
| void unregisterTexture(CCPrioritizedTexture*);
|
| void returnBackingTexture(CCPrioritizedTexture*);
|
|
|
| -#if !ASSERT_DISABLED
|
| - void assertInvariants();
|
| -#endif
|
| -
|
| private:
|
| + friend class CCPrioritizedTextureTest;
|
| +
|
| + enum EvictionPriorityPolicy {
|
| + RespectManagerPriorityCutoff,
|
| + DoNotRespectManagerPriorityCutoff,
|
| + };
|
| +
|
| // Compare textures. Highest priority first.
|
| static inline bool compareTextures(CCPrioritizedTexture* a, CCPrioritizedTexture* b)
|
| {
|
| @@ -82,19 +93,29 @@ private:
|
| // Compare backings. Lowest priority first.
|
| static inline bool compareBackings(CCPrioritizedTexture::Backing* a, CCPrioritizedTexture::Backing* b)
|
| {
|
| - int priorityA = a->owner() ? a->owner()->requestPriority() : CCPriorityCalculator::lowestPriority();
|
| - int priorityB = b->owner() ? b->owner()->requestPriority() : CCPriorityCalculator::lowestPriority();
|
| - if (priorityA == priorityB)
|
| - return a < b;
|
| - return CCPriorityCalculator::priorityIsLower(priorityA, priorityB);
|
| + 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;
|
| + return a < b;
|
| }
|
|
|
| CCPrioritizedTextureManager(size_t maxMemoryLimitBytes, int maxTextureSize, int pool);
|
|
|
| - void reduceMemory(size_t limit, CCResourceProvider*);
|
| -
|
| + void updateBackingsPriorities();
|
| + void evictBackingsToReduceMemory(size_t limitBytes, EvictionPriorityPolicy, CCResourceProvider*);
|
| CCPrioritizedTexture::Backing* createBacking(IntSize, GC3Denum format, CCResourceProvider*);
|
| - void destroyBacking(CCPrioritizedTexture::Backing*, CCResourceProvider*);
|
| + void evictBackingResource(CCPrioritizedTexture::Backing*, CCResourceProvider*);
|
| +
|
| +#if !ASSERT_DISABLED
|
| + void assertInvariants();
|
| +#endif
|
|
|
| size_t m_maxMemoryLimitBytes;
|
| unsigned m_priorityCutoff;
|
| @@ -106,13 +127,17 @@ private:
|
| typedef HashSet<CCPrioritizedTexture*> TextureSet;
|
| typedef ListHashSet<CCPrioritizedTexture::Backing*> BackingSet;
|
| typedef Vector<CCPrioritizedTexture*> TextureVector;
|
| - typedef Vector<CCPrioritizedTexture::Backing*> BackingVector;
|
|
|
| TextureSet m_textures;
|
| BackingSet m_backings;
|
| + BackingVector m_evictedBackings;
|
|
|
| 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;
|
| };
|
|
|
| } // cc
|
|
|