| Index: cc/prioritized_texture.h
|
| diff --git a/cc/prioritized_texture.h b/cc/prioritized_texture.h
|
| index 638cbb270ce9b24689d5095baf174ade4f4d1a13..3196867064abce966502f6cf012896d3e9770025 100644
|
| --- a/cc/prioritized_texture.h
|
| +++ b/cc/prioritized_texture.h
|
| @@ -1,3 +1,142 @@
|
| // 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 CCPrioritizedTexture_h
|
| +#define CCPrioritizedTexture_h
|
| +
|
| +#include "base/basictypes.h"
|
| +#include "base/memory/scoped_ptr.h"
|
| +#include "CCPriorityCalculator.h"
|
| +#include "CCResourceProvider.h"
|
| +#include "CCTexture.h"
|
| +#include "GraphicsContext3D.h"
|
| +#include "IntRect.h"
|
| +#include "IntSize.h"
|
| +
|
| +namespace cc {
|
| +
|
| +class CCPrioritizedTextureManager;
|
| +
|
| +class CCPrioritizedTexture {
|
| +public:
|
| + static scoped_ptr<CCPrioritizedTexture> create(CCPrioritizedTextureManager* manager, IntSize size, GC3Denum format)
|
| + {
|
| + return make_scoped_ptr(new CCPrioritizedTexture(manager, size, format));
|
| + }
|
| + static scoped_ptr<CCPrioritizedTexture> create(CCPrioritizedTextureManager* manager)
|
| + {
|
| + return make_scoped_ptr(new CCPrioritizedTexture(manager, IntSize(), 0));
|
| + }
|
| + ~CCPrioritizedTexture();
|
| +
|
| + // Texture properties. Changing these causes the backing texture to be lost.
|
| + // Setting these to the same value is a no-op.
|
| + void setTextureManager(CCPrioritizedTextureManager*);
|
| + CCPrioritizedTextureManager* textureManager() { return m_manager; }
|
| + void setDimensions(IntSize, GC3Denum format);
|
| + GC3Denum format() const { return m_format; }
|
| + IntSize size() const { return m_size; }
|
| + size_t bytes() const { return m_bytes; }
|
| +
|
| + // Set priority for the requested texture.
|
| + void setRequestPriority(int priority) { m_priority = priority; }
|
| + int requestPriority() const { return m_priority; }
|
| +
|
| + // After CCPrioritizedTexture::prioritizeTextures() is called, this returns
|
| + // if the the request succeeded and this texture can be acquired for use.
|
| + bool canAcquireBackingTexture() const { return m_isAbovePriorityCutoff; }
|
| +
|
| + // This returns whether we still have a backing texture. This can continue
|
| + // to be true even after canAcquireBackingTexture() becomes false. In this
|
| + // case the texture can be used but shouldn't be updated since it will get
|
| + // taken away "soon".
|
| + bool haveBackingTexture() const { return !!backing(); }
|
| +
|
| + bool backingResourceWasEvicted() const;
|
| +
|
| + // If canAcquireBackingTexture() is true acquireBackingTexture() will acquire
|
| + // a backing texture for use. Call this whenever the texture is actually needed.
|
| + void acquireBackingTexture(CCResourceProvider*);
|
| +
|
| + // FIXME: Request late is really a hack for when we are totally out of memory
|
| + // (all textures are visible) but we can still squeeze into the limit
|
| + // by not painting occluded textures. In this case the manager
|
| + // refuses all visible textures and requestLate() will enable
|
| + // canAcquireBackingTexture() on a call-order basis. We might want to
|
| + // just remove this in the future (carefully) and just make sure we don't
|
| + // regress OOMs situations.
|
| + bool requestLate();
|
| +
|
| + // Uploads pixels into the backing resource. This functions will aquire the backing if needed.
|
| + void upload(CCResourceProvider*, const uint8_t* image, const IntRect& imageRect, const IntRect& sourceRect, const IntSize& destOffset);
|
| +
|
| + CCResourceProvider::ResourceId resourceId() const;
|
| +
|
| + // Self-managed textures are accounted for when prioritizing other textures,
|
| + // but they are not allocated/recycled/deleted, so this needs to be done
|
| + // externally. canAcquireBackingTexture() indicates if the texture would have
|
| + // been allowed given its priority.
|
| + void setIsSelfManaged(bool isSelfManaged) { m_isSelfManaged = isSelfManaged; }
|
| + bool isSelfManaged() { return m_isSelfManaged; }
|
| + void setToSelfManagedMemoryPlaceholder(size_t bytes);
|
| +
|
| +private:
|
| + friend class CCPrioritizedTextureManager;
|
| + friend class CCPrioritizedTextureTest;
|
| +
|
| + class Backing : public CCTexture {
|
| + public:
|
| + Backing(unsigned id, CCResourceProvider*, IntSize, GC3Denum format);
|
| + ~Backing();
|
| + void updatePriority();
|
| +
|
| + CCPrioritizedTexture* owner() { return m_owner; }
|
| + bool hadOwnerAtLastPriorityUpdate() const { return m_ownerExistedAtLastPriorityUpdate; }
|
| + int requestPriorityAtLastPriorityUpdate() const { return m_priorityAtLastPriorityUpdate; }
|
| + bool wasAbovePriorityCutoffAtLastPriorityUpdate() const { return m_wasAbovePriorityCutoffAtLastPriorityUpdate; }
|
| +
|
| + void deleteResource(CCResourceProvider*);
|
| + bool resourceHasBeenDeleted() const;
|
| +
|
| + private:
|
| + friend class CCPrioritizedTexture;
|
| + CCPrioritizedTexture* m_owner;
|
| + int m_priorityAtLastPriorityUpdate;
|
| + bool m_ownerExistedAtLastPriorityUpdate;
|
| + bool m_wasAbovePriorityCutoffAtLastPriorityUpdate;
|
| + bool m_resourceHasBeenDeleted;
|
| +#ifndef NDEBUG
|
| + CCResourceProvider* m_resourceProvider;
|
| +#endif
|
| +
|
| + DISALLOW_COPY_AND_ASSIGN(Backing);
|
| + };
|
| +
|
| + CCPrioritizedTexture(CCPrioritizedTextureManager*, IntSize, GC3Denum format);
|
| +
|
| + bool isAbovePriorityCutoff() { return m_isAbovePriorityCutoff; }
|
| + void setAbovePriorityCutoff(bool isAbovePriorityCutoff) { m_isAbovePriorityCutoff = isAbovePriorityCutoff; }
|
| + void setManagerInternal(CCPrioritizedTextureManager* manager) { m_manager = manager; }
|
| +
|
| + Backing* backing() const { return m_backing; }
|
| + void link(Backing*);
|
| + void unlink();
|
| +
|
| + IntSize m_size;
|
| + GC3Denum m_format;
|
| + size_t m_bytes;
|
| +
|
| + int m_priority;
|
| + bool m_isAbovePriorityCutoff;
|
| + bool m_isSelfManaged;
|
| +
|
| + Backing* m_backing;
|
| + CCPrioritizedTextureManager* m_manager;
|
| +
|
| + DISALLOW_COPY_AND_ASSIGN(CCPrioritizedTexture);
|
| +};
|
| +
|
| +} // namespace cc
|
| +
|
| +#endif
|
|
|