| Index: cc/resources/prioritized_resource_manager.h
|
| diff --git a/cc/resources/prioritized_resource_manager.h b/cc/resources/prioritized_resource_manager.h
|
| deleted file mode 100644
|
| index b7583f4315f7434864b71852a0fd396b07bae2bb..0000000000000000000000000000000000000000
|
| --- a/cc/resources/prioritized_resource_manager.h
|
| +++ /dev/null
|
| @@ -1,235 +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_RESOURCES_PRIORITIZED_RESOURCE_MANAGER_H_
|
| -#define CC_RESOURCES_PRIORITIZED_RESOURCE_MANAGER_H_
|
| -
|
| -#include <list>
|
| -#include <vector>
|
| -
|
| -#include "base/basictypes.h"
|
| -#include "base/containers/hash_tables.h"
|
| -#include "base/memory/scoped_ptr.h"
|
| -#include "base/synchronization/lock.h"
|
| -#include "cc/base/cc_export.h"
|
| -#include "cc/resources/prioritized_resource.h"
|
| -#include "cc/resources/priority_calculator.h"
|
| -#include "cc/resources/resource.h"
|
| -#include "ui/gfx/geometry/size.h"
|
| -
|
| -namespace cc {
|
| -
|
| -class Proxy;
|
| -
|
| -class CC_EXPORT PrioritizedResourceManager {
|
| - public:
|
| - static scoped_ptr<PrioritizedResourceManager> Create(const Proxy* proxy) {
|
| - return make_scoped_ptr(new PrioritizedResourceManager(proxy));
|
| - }
|
| - scoped_ptr<PrioritizedResource> CreateTexture(
|
| - const gfx::Size& size, ResourceFormat format) {
|
| - return make_scoped_ptr(new PrioritizedResource(this, size, format));
|
| - }
|
| - ~PrioritizedResourceManager();
|
| -
|
| - typedef std::list<PrioritizedResource::Backing*> BackingList;
|
| -
|
| - // TODO(epenner): (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.
|
| - size_t MemoryUseBytes() const { return memory_use_bytes_; }
|
| - // 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 MemoryAboveCutoffBytes() const { return memory_above_cutoff_bytes_; }
|
| - // MaxMemoryNeededBytes() describes the number of bytes that would be used
|
| - // by textures if there were no limit on memory usage.
|
| - size_t MaxMemoryNeededBytes() const { return max_memory_needed_bytes_; }
|
| - size_t MemoryForSelfManagedTextures() const {
|
| - return max_memory_limit_bytes_ - memory_available_bytes_;
|
| - }
|
| -
|
| - void SetMaxMemoryLimitBytes(size_t bytes) { max_memory_limit_bytes_ = bytes; }
|
| - size_t MaxMemoryLimitBytes() const { return max_memory_limit_bytes_; }
|
| -
|
| - // Sepecify a external priority cutoff. Only textures that have a strictly
|
| - // higher priority than this cutoff will be allowed.
|
| - void SetExternalPriorityCutoff(int priority_cutoff) {
|
| - external_priority_cutoff_ = priority_cutoff;
|
| - }
|
| - int ExternalPriorityCutoff() const {
|
| - return external_priority_cutoff_;
|
| - }
|
| -
|
| - // 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
|
| - // limit_bytes 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 limit_bytes,
|
| - int priority_cutoff,
|
| - ResourceProvider* resource_provider);
|
| -
|
| - // 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. After an
|
| - // eviction, this will not become true until unlinkAndClearEvictedBackings
|
| - // is called.
|
| - bool LinkedEvictedBackingsExist() const;
|
| -
|
| - // Unlink the list of contents textures' backings from their owning textures
|
| - // and delete the evicted backings' structures. This is called just before
|
| - // updating layers, and is only ever called on the main thread.
|
| - void UnlinkAndClearEvictedBackings();
|
| -
|
| - bool RequestLate(PrioritizedResource* texture);
|
| -
|
| - void ReduceWastedMemory(ResourceProvider* resource_provider);
|
| - void ReduceMemory(ResourceProvider* resource_provider);
|
| - void ClearAllMemory(ResourceProvider* resource_provider);
|
| -
|
| - void AcquireBackingTextureIfNeeded(PrioritizedResource* texture,
|
| - ResourceProvider* resource_provider);
|
| -
|
| - void RegisterTexture(PrioritizedResource* texture);
|
| - void UnregisterTexture(PrioritizedResource* texture);
|
| - void ReturnBackingTexture(PrioritizedResource* texture);
|
| -
|
| - // Update all backings' priorities from their owning texture.
|
| - void PushTexturePrioritiesToBackings();
|
| -
|
| - // Mark all textures' backings as being in the drawing impl tree.
|
| - void UpdateBackingsState(ResourceProvider* resource_provider);
|
| -
|
| - const Proxy* ProxyForDebug() const;
|
| -
|
| - private:
|
| - friend class PrioritizedResourceTest;
|
| -
|
| - enum EvictionPolicy {
|
| - EVICT_ONLY_RECYCLABLE,
|
| - EVICT_ANYTHING,
|
| - };
|
| - enum UnlinkPolicy {
|
| - DO_NOT_UNLINK_BACKINGS,
|
| - UNLINK_BACKINGS,
|
| - };
|
| -
|
| - // Compare textures. Highest priority first.
|
| - static inline bool CompareTextures(PrioritizedResource* a,
|
| - PrioritizedResource* b) {
|
| - if (a->request_priority() == b->request_priority())
|
| - return a < b;
|
| - return PriorityCalculator::priority_is_higher(a->request_priority(),
|
| - b->request_priority());
|
| - }
|
| - // Compare backings. Lowest priority first.
|
| - static inline bool CompareBackings(PrioritizedResource::Backing* a,
|
| - PrioritizedResource::Backing* b) {
|
| - // Make textures that can be recycled appear first.
|
| - if (a->CanBeRecycledIfNotInExternalUse() !=
|
| - b->CanBeRecycledIfNotInExternalUse())
|
| - return (a->CanBeRecycledIfNotInExternalUse() >
|
| - b->CanBeRecycledIfNotInExternalUse());
|
| - // Then sort by being above or below the priority cutoff.
|
| - if (a->was_above_priority_cutoff_at_last_priority_update() !=
|
| - b->was_above_priority_cutoff_at_last_priority_update())
|
| - return (a->was_above_priority_cutoff_at_last_priority_update() <
|
| - b->was_above_priority_cutoff_at_last_priority_update());
|
| - // Then sort by priority (note that backings that no longer have owners will
|
| - // always have the lowest priority).
|
| - if (a->request_priority_at_last_priority_update() !=
|
| - b->request_priority_at_last_priority_update())
|
| - return PriorityCalculator::priority_is_lower(
|
| - a->request_priority_at_last_priority_update(),
|
| - b->request_priority_at_last_priority_update());
|
| - // Then sort by being in the impl tree versus being completely
|
| - // unreferenced.
|
| - if (a->in_drawing_impl_tree() != b->in_drawing_impl_tree())
|
| - return (a->in_drawing_impl_tree() < b->in_drawing_impl_tree());
|
| - // Finally, prefer to evict textures in the parent compositor because
|
| - // they will otherwise take another roundtrip to the parent compositor
|
| - // before they are evicted.
|
| - if (a->in_parent_compositor() != b->in_parent_compositor())
|
| - return (a->in_parent_compositor() > b->in_parent_compositor());
|
| - return a < b;
|
| - }
|
| -
|
| - explicit PrioritizedResourceManager(const Proxy* proxy);
|
| -
|
| - bool EvictBackingsToReduceMemory(size_t limit_bytes,
|
| - int priority_cutoff,
|
| - EvictionPolicy eviction_policy,
|
| - UnlinkPolicy unlink_policy,
|
| - ResourceProvider* resource_provider);
|
| - PrioritizedResource::Backing* CreateBacking(
|
| - const gfx::Size& size,
|
| - ResourceFormat format,
|
| - ResourceProvider* resource_provider);
|
| - void EvictFirstBackingResource(ResourceProvider* resource_provider);
|
| - void SortBackings();
|
| -
|
| - void AssertInvariants();
|
| -
|
| - size_t max_memory_limit_bytes_;
|
| - // 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 priority_cutoff_;
|
| - // 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 external_priority_cutoff_;
|
| - size_t memory_use_bytes_;
|
| - size_t memory_above_cutoff_bytes_;
|
| - size_t max_memory_needed_bytes_;
|
| - size_t memory_available_bytes_;
|
| -
|
| - typedef base::hash_set<PrioritizedResource*> TextureSet;
|
| - typedef std::vector<PrioritizedResource*> TextureVector;
|
| -
|
| - const Proxy* proxy_;
|
| -
|
| - TextureSet 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 backings_;
|
| - bool backings_tail_not_sorted_;
|
| -
|
| - // The list of backings that have been evicted, but may still be linked
|
| - // to textures. This can be accessed concurrently by the main and impl
|
| - // threads, and may only be accessed while holding evicted_backings_lock_.
|
| - mutable base::Lock evicted_backings_lock_;
|
| - BackingList evicted_backings_;
|
| -
|
| - TextureVector temp_texture_vector_;
|
| -
|
| - // Statistics about memory usage at priority cutoffs, computed at
|
| - // PrioritizeTextures.
|
| - size_t memory_visible_bytes_;
|
| - size_t memory_visible_and_nearby_bytes_;
|
| -
|
| - // Statistics copied at the time of PushTexturePrioritiesToBackings.
|
| - size_t memory_visible_last_pushed_bytes_;
|
| - size_t memory_visible_and_nearby_last_pushed_bytes_;
|
| -
|
| - DISALLOW_COPY_AND_ASSIGN(PrioritizedResourceManager);
|
| -};
|
| -
|
| -} // namespace cc
|
| -
|
| -#endif // CC_RESOURCES_PRIORITIZED_RESOURCE_MANAGER_H_
|
|
|