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

Unified Diff: cc/prioritized_texture_manager.h

Issue 11122003: [cc] Rename all cc/ filenames to Chromium style (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 8 years, 2 months 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
index 638cbb270ce9b24689d5095baf174ade4f4d1a13..1b3b1edbdfbf5836775a3ba8c8135796e16b4e44 100644
--- a/cc/prioritized_texture_manager.h
+++ b/cc/prioritized_texture_manager.h
@@ -1,3 +1,159 @@
// 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 CCPrioritizedTextureManager_h
+#define CCPrioritizedTextureManager_h
+
+#include "base/basictypes.h"
+#include "base/hash_tables.h"
+#include "base/memory/scoped_ptr.h"
+#include "CCPrioritizedTexture.h"
+#include "CCPriorityCalculator.h"
+#include "CCTexture.h"
+#include "GraphicsContext3D.h"
+#include "IntRect.h"
+#include "IntSize.h"
+#include <wtf/ListHashSet.h>
+#include <wtf/Vector.h>
+
+#if defined(COMPILER_GCC)
+namespace BASE_HASH_NAMESPACE {
+template<>
+struct hash<cc::CCPrioritizedTexture*> {
+ size_t operator()(cc::CCPrioritizedTexture* ptr) const {
+ return hash<size_t>()(reinterpret_cast<size_t>(ptr));
+ }
+};
+} // namespace BASE_HASH_NAMESPACE
+#endif // COMPILER
+
+namespace cc {
+
+class CCPriorityCalculator;
+
+class CCPrioritizedTextureManager {
+public:
+ static scoped_ptr<CCPrioritizedTextureManager> create(size_t maxMemoryLimitBytes, int maxTextureSize, int pool)
+ {
+ return make_scoped_ptr(new CCPrioritizedTextureManager(maxMemoryLimitBytes, maxTextureSize, pool));
+ }
+ scoped_ptr<CCPrioritizedTexture> createTexture(IntSize size, GC3Denum format)
+ {
+ return make_scoped_ptr(new CCPrioritizedTexture(this, size, format));
+ }
+ ~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:
+ // - 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; }
+
+ void prioritizeTextures();
+ void clearPriorities();
+
+ void reduceMemoryOnImplThread(size_t limitBytes, CCResourceProvider*);
+ bool evictedBackingsExist() const { return !m_evictedBackings.isEmpty(); }
+ 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*);
+
+ void reduceMemory(CCResourceProvider*);
+ void clearAllMemory(CCResourceProvider*);
+
+ void acquireBackingTextureIfNeeded(CCPrioritizedTexture*, CCResourceProvider*);
+
+ void registerTexture(CCPrioritizedTexture*);
+ void unregisterTexture(CCPrioritizedTexture*);
+ void returnBackingTexture(CCPrioritizedTexture*);
+
+private:
+ friend class CCPrioritizedTextureTest;
+
+ enum EvictionPriorityPolicy {
+ RespectManagerPriorityCutoff,
+ DoNotRespectManagerPriorityCutoff,
+ };
+
+ // Compare textures. Highest priority first.
+ static inline bool compareTextures(CCPrioritizedTexture* a, CCPrioritizedTexture* b)
+ {
+ if (a->requestPriority() == b->requestPriority())
+ return a < b;
+ return CCPriorityCalculator::priorityIsHigher(a->requestPriority(), b->requestPriority());
+ }
+ // 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;
+ 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*);
+
+#if !ASSERT_DISABLED
+ void assertInvariants();
+#endif
+
+ size_t m_maxMemoryLimitBytes;
+ unsigned m_priorityCutoff;
+ size_t m_memoryUseBytes;
+ size_t m_memoryAboveCutoffBytes;
+ size_t m_memoryAvailableBytes;
+ int m_pool;
+
+ typedef base::hash_set<CCPrioritizedTexture*> TextureSet;
+ typedef ListHashSet<CCPrioritizedTexture::Backing*> BackingSet;
+ typedef Vector<CCPrioritizedTexture*> TextureVector;
+
+ 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;
+
+ DISALLOW_COPY_AND_ASSIGN(CCPrioritizedTextureManager);
+};
+
+} // namespace cc
+
+#endif
« 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