Index: cc/prioritized_texture_manager.h |
diff --git a/cc/prioritized_texture_manager.h b/cc/prioritized_texture_manager.h |
deleted file mode 100644 |
index 0bb0bac3666fb7311cc0a5b28bf36edc20a45cc7..0000000000000000000000000000000000000000 |
--- a/cc/prioritized_texture_manager.h |
+++ /dev/null |
@@ -1,194 +0,0 @@ |
-// Copyright 2012 The Chromium Authors. All rights reserved. |
-// Use of this source code is governed by a BSD-style license that can be |
-// found in the LICENSE file. |
- |
-#ifndef CC_PRIORITIZED_TEXTURE_MANAGER_H_ |
-#define CC_PRIORITIZED_TEXTURE_MANAGER_H_ |
- |
-#include <list> |
-#include <vector> |
- |
-#include "base/basictypes.h" |
-#include "base/hash_tables.h" |
-#include "base/memory/scoped_ptr.h" |
-#include "cc/cc_export.h" |
-#include "cc/prioritized_texture.h" |
-#include "cc/priority_calculator.h" |
-#include "cc/texture.h" |
-#include "third_party/khronos/GLES2/gl2.h" |
-#include "ui/gfx/size.h" |
- |
-#if defined(COMPILER_GCC) |
-namespace BASE_HASH_NAMESPACE { |
-template<> |
-struct hash<cc::PrioritizedTexture*> { |
- size_t operator()(cc::PrioritizedTexture* ptr) const { |
- return hash<size_t>()(reinterpret_cast<size_t>(ptr)); |
- } |
-}; |
-} // namespace BASE_HASH_NAMESPACE |
-#endif // COMPILER |
- |
-namespace cc { |
- |
-class PriorityCalculator; |
- |
-class CC_EXPORT PrioritizedTextureManager { |
-public: |
- static scoped_ptr<PrioritizedTextureManager> create(size_t maxMemoryLimitBytes, int maxTextureSize, int pool) |
- { |
- return make_scoped_ptr(new PrioritizedTextureManager(maxMemoryLimitBytes, maxTextureSize, pool)); |
- } |
- scoped_ptr<PrioritizedTexture> createTexture(gfx::Size size, GLenum format) |
- { |
- return make_scoped_ptr(new PrioritizedTexture(this, size, format)); |
- } |
- ~PrioritizedTextureManager(); |
- |
- typedef std::list<PrioritizedTexture::Backing*> BackingList; |
- |
- // 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: |
- // - wait for the callback before rendering anything instead |
- // - push this into the GPU memory manager somehow. |
- static size_t defaultMemoryAllocationLimit() { return 64 * 1024 * 1024; } |
- |
- // memoryUseBytes() describes the number of bytes used by existing allocated textures. |
- // memoryAboveCutoffBytes() describes the number of bytes that would be used if all |
- // textures that are above the cutoff were allocated. |
- // memoryUseBytes() <= memoryAboveCutoffBytes() should always be true. |
- size_t memoryUseBytes() const { return m_memoryUseBytes; } |
- size_t memoryAboveCutoffBytes() const { return m_memoryAboveCutoffBytes; } |
- size_t memoryForSelfManagedTextures() const { return m_maxMemoryLimitBytes - m_memoryAvailableBytes; } |
- |
- void setMaxMemoryLimitBytes(size_t bytes) { m_maxMemoryLimitBytes = bytes; } |
- size_t maxMemoryLimitBytes() const { return m_maxMemoryLimitBytes; } |
- |
- // Sepecify a external priority cutoff. Only textures that have a strictly higher priority |
- // than this cutoff will be allowed. |
- void setExternalPriorityCutoff(int priorityCutoff) { m_externalPriorityCutoff = priorityCutoff; } |
- |
- // Return the amount of texture memory required at particular cutoffs. |
- size_t memoryVisibleBytes() const; |
- size_t memoryVisibleAndNearbyBytes() const; |
- |
- void prioritizeTextures(); |
- void clearPriorities(); |
- |
- // Delete contents textures' backing resources until they use only bytesLimit bytes. This may |
- // be called on the impl thread while the main thread is running. Returns true if resources are |
- // indeed evicted as a result of this call. |
- bool reduceMemoryOnImplThread(size_t limitBytes, int priorityCutoff, ResourceProvider*); |
- // Returns true if there exist any textures that are linked to backings that have had their |
- // resources evicted. Only when we commit a tree that has no textures linked to evicted backings |
- // may we allow drawing. |
- bool linkedEvictedBackingsExist() const; |
- // Retrieve the list of all contents textures' backings that have been evicted, to pass to the |
- // main thread to unlink them from their owning textures. |
- void getEvictedBackings(BackingList& evictedBackings); |
- // Unlink the list of contents textures' backings from their owning textures on the main thread |
- // before updating layers. |
- void unlinkEvictedBackings(const BackingList& evictedBackings); |
- |
- bool requestLate(PrioritizedTexture*); |
- |
- void reduceMemory(ResourceProvider*); |
- void clearAllMemory(ResourceProvider*); |
- |
- void acquireBackingTextureIfNeeded(PrioritizedTexture*, ResourceProvider*); |
- |
- void registerTexture(PrioritizedTexture*); |
- void unregisterTexture(PrioritizedTexture*); |
- void returnBackingTexture(PrioritizedTexture*); |
- |
- // 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 PrioritizedTextureTest; |
- |
- enum EvictionPolicy { |
- EvictOnlyRecyclable, |
- EvictAnything, |
- }; |
- |
- // Compare textures. Highest priority first. |
- static inline bool compareTextures(PrioritizedTexture* a, PrioritizedTexture* b) |
- { |
- if (a->requestPriority() == b->requestPriority()) |
- return a < b; |
- return PriorityCalculator::priorityIsHigher(a->requestPriority(), b->requestPriority()); |
- } |
- // Compare backings. Lowest priority first. |
- static inline bool compareBackings(PrioritizedTexture::Backing* a, PrioritizedTexture::Backing* b) |
- { |
- // Make textures that can be recycled appear first |
- if (a->canBeRecycled() != b->canBeRecycled()) |
- return (a->canBeRecycled() > b->canBeRecycled()); |
- // Then sort by being above or below the priority cutoff. |
- if (a->wasAbovePriorityCutoffAtLastPriorityUpdate() != b->wasAbovePriorityCutoffAtLastPriorityUpdate()) |
- return (a->wasAbovePriorityCutoffAtLastPriorityUpdate() < b->wasAbovePriorityCutoffAtLastPriorityUpdate()); |
- // Then sort by priority (note that backings that no longer have owners will |
- // always have the lowest priority) |
- if (a->requestPriorityAtLastPriorityUpdate() != b->requestPriorityAtLastPriorityUpdate()) |
- return PriorityCalculator::priorityIsLower(a->requestPriorityAtLastPriorityUpdate(), b->requestPriorityAtLastPriorityUpdate()); |
- // 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; |
- } |
- |
- PrioritizedTextureManager(size_t maxMemoryLimitBytes, int maxTextureSize, int pool); |
- |
- bool evictBackingsToReduceMemory(size_t limitBytes, int priorityCutoff, EvictionPolicy, ResourceProvider*); |
- PrioritizedTexture::Backing* createBacking(gfx::Size, GLenum format, ResourceProvider*); |
- void evictFirstBackingResource(ResourceProvider*); |
- void deleteUnlinkedEvictedBackings(); |
- void sortBackings(); |
- |
- void assertInvariants(); |
- |
- size_t m_maxMemoryLimitBytes; |
- // The priority cutoff based on memory pressure. This is not a strict |
- // cutoff -- requestLate allows textures with priority equal to this |
- // cutoff to be allowed. |
- int m_priorityCutoff; |
- // The priority cutoff based on external memory policy. This is a strict |
- // cutoff -- no textures with priority equal to this cutoff will be allowed. |
- int m_externalPriorityCutoff; |
- size_t m_memoryUseBytes; |
- size_t m_memoryAboveCutoffBytes; |
- size_t m_memoryAvailableBytes; |
- int m_pool; |
- |
- typedef base::hash_set<PrioritizedTexture*> TextureSet; |
- typedef std::vector<PrioritizedTexture*> TextureVector; |
- |
- TextureSet m_textures; |
- // This list is always sorted in eviction order, with the exception the |
- // newly-allocated or recycled textures at the very end of the tail that |
- // are not sorted by priority. |
- BackingList m_backings; |
- bool m_backingsTailNotSorted; |
- BackingList m_evictedBackings; |
- |
- TextureVector m_tempTextureVector; |
- |
- // Statistics about memory usage at priority cutoffs, computed at prioritizeTextures. |
- size_t m_memoryVisibleBytes; |
- size_t m_memoryVisibleAndNearbyBytes; |
- |
- // Statistics copied at the time of pushTexturePrioritiesToBackings. |
- size_t m_memoryVisibleLastPushedBytes; |
- size_t m_memoryVisibleAndNearbyLastPushedBytes; |
- |
- DISALLOW_COPY_AND_ASSIGN(PrioritizedTextureManager); |
-}; |
- |
-} // namespace cc |
- |
-#endif // CC_PRIORITIZED_TEXTURE_MANAGER_H_ |