| OLD | NEW |
| 1 // Copyright 2012 The Chromium Authors. All rights reserved. | 1 // Copyright 2012 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #ifndef CCPrioritizedTexture_h | 5 #ifndef CCPrioritizedTexture_h |
| 6 #define CCPrioritizedTexture_h | 6 #define CCPrioritizedTexture_h |
| 7 | 7 |
| 8 #include "IntRect.h" | |
| 9 #include "IntSize.h" | |
| 10 #include "base/basictypes.h" | 8 #include "base/basictypes.h" |
| 11 #include "base/logging.h" | 9 #include "base/logging.h" |
| 12 #include "base/memory/scoped_ptr.h" | 10 #include "base/memory/scoped_ptr.h" |
| 13 #include "cc/priority_calculator.h" | 11 #include "cc/priority_calculator.h" |
| 14 #include "cc/resource_provider.h" | 12 #include "cc/resource_provider.h" |
| 15 #include "cc/texture.h" | 13 #include "cc/texture.h" |
| 14 #include "ui/gfx/rect.h" |
| 15 #include "ui/gfx/size.h" |
| 16 #include "ui/gfx/vector2d.h" |
| 16 #include "third_party/khronos/GLES2/gl2.h" | 17 #include "third_party/khronos/GLES2/gl2.h" |
| 17 | 18 |
| 18 namespace cc { | 19 namespace cc { |
| 19 | 20 |
| 20 class PrioritizedTextureManager; | 21 class PrioritizedTextureManager; |
| 21 | 22 |
| 22 class PrioritizedTexture { | 23 class PrioritizedTexture { |
| 23 public: | 24 public: |
| 24 static scoped_ptr<PrioritizedTexture> create(PrioritizedTextureManager* mana
ger, IntSize size, GLenum format) | 25 static scoped_ptr<PrioritizedTexture> create(PrioritizedTextureManager* mana
ger, gfx::Size size, GLenum format) |
| 25 { | 26 { |
| 26 return make_scoped_ptr(new PrioritizedTexture(manager, size, format)); | 27 return make_scoped_ptr(new PrioritizedTexture(manager, size, format)); |
| 27 } | 28 } |
| 28 static scoped_ptr<PrioritizedTexture> create(PrioritizedTextureManager* mana
ger) | 29 static scoped_ptr<PrioritizedTexture> create(PrioritizedTextureManager* mana
ger) |
| 29 { | 30 { |
| 30 return make_scoped_ptr(new PrioritizedTexture(manager, IntSize(), 0)); | 31 return make_scoped_ptr(new PrioritizedTexture(manager, gfx::Size(), 0)); |
| 31 } | 32 } |
| 32 ~PrioritizedTexture(); | 33 ~PrioritizedTexture(); |
| 33 | 34 |
| 34 // Texture properties. Changing these causes the backing texture to be lost. | 35 // Texture properties. Changing these causes the backing texture to be lost. |
| 35 // Setting these to the same value is a no-op. | 36 // Setting these to the same value is a no-op. |
| 36 void setTextureManager(PrioritizedTextureManager*); | 37 void setTextureManager(PrioritizedTextureManager*); |
| 37 PrioritizedTextureManager* textureManager() { return m_manager; } | 38 PrioritizedTextureManager* textureManager() { return m_manager; } |
| 38 void setDimensions(IntSize, GLenum format); | 39 void setDimensions(gfx::Size, GLenum format); |
| 39 GLenum format() const { return m_format; } | 40 GLenum format() const { return m_format; } |
| 40 IntSize size() const { return m_size; } | 41 gfx::Size size() const { return m_size; } |
| 41 size_t bytes() const { return m_bytes; } | 42 size_t bytes() const { return m_bytes; } |
| 42 bool contentsSwizzled() const { return m_contentsSwizzled; } | 43 bool contentsSwizzled() const { return m_contentsSwizzled; } |
| 43 | 44 |
| 44 // Set priority for the requested texture. | 45 // Set priority for the requested texture. |
| 45 void setRequestPriority(int priority) { m_priority = priority; } | 46 void setRequestPriority(int priority) { m_priority = priority; } |
| 46 int requestPriority() const { return m_priority; } | 47 int requestPriority() const { return m_priority; } |
| 47 | 48 |
| 48 // After PrioritizedTexture::prioritizeTextures() is called, this returns | 49 // After PrioritizedTexture::prioritizeTextures() is called, this returns |
| 49 // if the the request succeeded and this texture can be acquired for use. | 50 // if the the request succeeded and this texture can be acquired for use. |
| 50 bool canAcquireBackingTexture() const { return m_isAbovePriorityCutoff; } | 51 bool canAcquireBackingTexture() const { return m_isAbovePriorityCutoff; } |
| (...skipping 13 matching lines...) Expand all Loading... |
| 64 // FIXME: Request late is really a hack for when we are totally out of memor
y | 65 // FIXME: Request late is really a hack for when we are totally out of memor
y |
| 65 // (all textures are visible) but we can still squeeze into the limit | 66 // (all textures are visible) but we can still squeeze into the limit |
| 66 // by not painting occluded textures. In this case the manager | 67 // by not painting occluded textures. In this case the manager |
| 67 // refuses all visible textures and requestLate() will enable | 68 // refuses all visible textures and requestLate() will enable |
| 68 // canAcquireBackingTexture() on a call-order basis. We might want to | 69 // canAcquireBackingTexture() on a call-order basis. We might want to |
| 69 // just remove this in the future (carefully) and just make sure we d
on't | 70 // just remove this in the future (carefully) and just make sure we d
on't |
| 70 // regress OOMs situations. | 71 // regress OOMs situations. |
| 71 bool requestLate(); | 72 bool requestLate(); |
| 72 | 73 |
| 73 // Uploads pixels into the backing resource. This functions will aquire the
backing if needed. | 74 // Uploads pixels into the backing resource. This functions will aquire the
backing if needed. |
| 74 void upload(ResourceProvider*, const uint8_t* image, const IntRect& imageRec
t, const IntRect& sourceRect, const IntSize& destOffset); | 75 void upload(ResourceProvider*, const uint8_t* image, const gfx::Rect& imageR
ect, const gfx::Rect& sourceRect, const gfx::Vector2d& destOffset); |
| 75 | 76 |
| 76 ResourceProvider::ResourceId resourceId() const; | 77 ResourceProvider::ResourceId resourceId() const; |
| 77 | 78 |
| 78 // Self-managed textures are accounted for when prioritizing other textures, | 79 // Self-managed textures are accounted for when prioritizing other textures, |
| 79 // but they are not allocated/recycled/deleted, so this needs to be done | 80 // but they are not allocated/recycled/deleted, so this needs to be done |
| 80 // externally. canAcquireBackingTexture() indicates if the texture would hav
e | 81 // externally. canAcquireBackingTexture() indicates if the texture would hav
e |
| 81 // been allowed given its priority. | 82 // been allowed given its priority. |
| 82 void setIsSelfManaged(bool isSelfManaged) { m_isSelfManaged = isSelfManaged;
} | 83 void setIsSelfManaged(bool isSelfManaged) { m_isSelfManaged = isSelfManaged;
} |
| 83 bool isSelfManaged() { return m_isSelfManaged; } | 84 bool isSelfManaged() { return m_isSelfManaged; } |
| 84 void setToSelfManagedMemoryPlaceholder(size_t bytes); | 85 void setToSelfManagedMemoryPlaceholder(size_t bytes); |
| 85 | 86 |
| 86 void returnBackingTexture(); | 87 void returnBackingTexture(); |
| 87 | 88 |
| 88 private: | 89 private: |
| 89 friend class PrioritizedTextureManager; | 90 friend class PrioritizedTextureManager; |
| 90 friend class PrioritizedTextureTest; | 91 friend class PrioritizedTextureTest; |
| 91 | 92 |
| 92 class Backing : public Texture { | 93 class Backing : public Texture { |
| 93 public: | 94 public: |
| 94 Backing(unsigned id, ResourceProvider*, IntSize, GLenum format); | 95 Backing(unsigned id, ResourceProvider*, gfx::Size, GLenum format); |
| 95 ~Backing(); | 96 ~Backing(); |
| 96 void updatePriority(); | 97 void updatePriority(); |
| 97 void updateInDrawingImplTree(); | 98 void updateInDrawingImplTree(); |
| 98 | 99 |
| 99 PrioritizedTexture* owner() { return m_owner; } | 100 PrioritizedTexture* owner() { return m_owner; } |
| 100 bool canBeRecycled() const; | 101 bool canBeRecycled() const; |
| 101 int requestPriorityAtLastPriorityUpdate() const { return m_priorityAtLas
tPriorityUpdate; } | 102 int requestPriorityAtLastPriorityUpdate() const { return m_priorityAtLas
tPriorityUpdate; } |
| 102 bool wasAbovePriorityCutoffAtLastPriorityUpdate() const { return m_wasAb
ovePriorityCutoffAtLastPriorityUpdate; } | 103 bool wasAbovePriorityCutoffAtLastPriorityUpdate() const { return m_wasAb
ovePriorityCutoffAtLastPriorityUpdate; } |
| 103 bool inDrawingImplTree() const { return m_inDrawingImplTree; } | 104 bool inDrawingImplTree() const { return m_inDrawingImplTree; } |
| 104 | 105 |
| (...skipping 10 matching lines...) Expand all Loading... |
| 115 bool m_inDrawingImplTree; | 116 bool m_inDrawingImplTree; |
| 116 | 117 |
| 117 bool m_resourceHasBeenDeleted; | 118 bool m_resourceHasBeenDeleted; |
| 118 #ifndef NDEBUG | 119 #ifndef NDEBUG |
| 119 ResourceProvider* m_resourceProvider; | 120 ResourceProvider* m_resourceProvider; |
| 120 #endif | 121 #endif |
| 121 | 122 |
| 122 DISALLOW_COPY_AND_ASSIGN(Backing); | 123 DISALLOW_COPY_AND_ASSIGN(Backing); |
| 123 }; | 124 }; |
| 124 | 125 |
| 125 PrioritizedTexture(PrioritizedTextureManager*, IntSize, GLenum format); | 126 PrioritizedTexture(PrioritizedTextureManager*, gfx::Size, GLenum format); |
| 126 | 127 |
| 127 bool isAbovePriorityCutoff() { return m_isAbovePriorityCutoff; } | 128 bool isAbovePriorityCutoff() { return m_isAbovePriorityCutoff; } |
| 128 void setAbovePriorityCutoff(bool isAbovePriorityCutoff) { m_isAbovePriorityC
utoff = isAbovePriorityCutoff; } | 129 void setAbovePriorityCutoff(bool isAbovePriorityCutoff) { m_isAbovePriorityC
utoff = isAbovePriorityCutoff; } |
| 129 void setManagerInternal(PrioritizedTextureManager* manager) { m_manager = ma
nager; } | 130 void setManagerInternal(PrioritizedTextureManager* manager) { m_manager = ma
nager; } |
| 130 | 131 |
| 131 Backing* backing() const { return m_backing; } | 132 Backing* backing() const { return m_backing; } |
| 132 void link(Backing*); | 133 void link(Backing*); |
| 133 void unlink(); | 134 void unlink(); |
| 134 | 135 |
| 135 IntSize m_size; | 136 gfx::Size m_size; |
| 136 GLenum m_format; | 137 GLenum m_format; |
| 137 size_t m_bytes; | 138 size_t m_bytes; |
| 138 bool m_contentsSwizzled; | 139 bool m_contentsSwizzled; |
| 139 | 140 |
| 140 int m_priority; | 141 int m_priority; |
| 141 bool m_isAbovePriorityCutoff; | 142 bool m_isAbovePriorityCutoff; |
| 142 bool m_isSelfManaged; | 143 bool m_isSelfManaged; |
| 143 | 144 |
| 144 Backing* m_backing; | 145 Backing* m_backing; |
| 145 PrioritizedTextureManager* m_manager; | 146 PrioritizedTextureManager* m_manager; |
| 146 | 147 |
| 147 DISALLOW_COPY_AND_ASSIGN(PrioritizedTexture); | 148 DISALLOW_COPY_AND_ASSIGN(PrioritizedTexture); |
| 148 }; | 149 }; |
| 149 | 150 |
| 150 } // namespace cc | 151 } // namespace cc |
| 151 | 152 |
| 152 #endif | 153 #endif |
| OLD | NEW |