Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(2278)

Unified Diff: cc/prioritized_texture_manager.h

Issue 11369109: cc: Rename PrioritizedTexture to PrioritizedResource. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 8 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « cc/prioritized_texture.cc ('k') | cc/prioritized_texture_manager.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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_
« no previous file with comments | « cc/prioritized_texture.cc ('k') | cc/prioritized_texture_manager.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698