diff options
Diffstat (limited to 'chromium/third_party/WebKit/Source/platform/graphics/Canvas2DLayerBridge.h')
-rw-r--r-- | chromium/third_party/WebKit/Source/platform/graphics/Canvas2DLayerBridge.h | 34 |
1 files changed, 26 insertions, 8 deletions
diff --git a/chromium/third_party/WebKit/Source/platform/graphics/Canvas2DLayerBridge.h b/chromium/third_party/WebKit/Source/platform/graphics/Canvas2DLayerBridge.h index d259c5fcd9d..f2fd4aaaf6f 100644 --- a/chromium/third_party/WebKit/Source/platform/graphics/Canvas2DLayerBridge.h +++ b/chromium/third_party/WebKit/Source/platform/graphics/Canvas2DLayerBridge.h @@ -30,11 +30,11 @@ #include "SkImage.h" #include "platform/PlatformExport.h" #include "platform/geometry/IntSize.h" -#include "platform/graphics/GraphicsContext3D.h" #include "platform/graphics/ImageBufferSurface.h" #include "public/platform/WebExternalTextureLayer.h" #include "public/platform/WebExternalTextureLayerClient.h" #include "public/platform/WebExternalTextureMailbox.h" +#include "third_party/khronos/GLES2/gl2.h" #include "wtf/DoublyLinkedList.h" #include "wtf/PassOwnPtr.h" #include "wtf/RefCounted.h" @@ -42,20 +42,23 @@ namespace blink { class WebGraphicsContext3D; +class WebGraphicsContext3DProvider; } class Canvas2DLayerBridgeTest; namespace WebCore { +class ImageBuffer; + class PLATFORM_EXPORT Canvas2DLayerBridge : public blink::WebExternalTextureLayerClient, public SkDeferredCanvas::NotificationClient, public DoublyLinkedListNode<Canvas2DLayerBridge>, public RefCounted<Canvas2DLayerBridge> { WTF_MAKE_NONCOPYABLE(Canvas2DLayerBridge); public: static PassRefPtr<Canvas2DLayerBridge> create(const IntSize&, OpacityMode, int msaaSampleCount); + virtual ~Canvas2DLayerBridge(); // blink::WebExternalTextureLayerClient implementation. - virtual blink::WebGraphicsContext3D* context() OVERRIDE; virtual bool prepareMailbox(blink::WebExternalTextureMailbox*, blink::WebExternalBitmap*) OVERRIDE; virtual void mailboxReleased(const blink::WebExternalTextureMailbox&) OVERRIDE; @@ -68,34 +71,47 @@ public: // ImageBufferSurface implementation void willUse(); SkCanvas* canvas() const { return m_canvas.get(); } - bool isValid(); + bool checkSurfaceValid(); + bool restoreSurface(); blink::WebLayer* layer() const; Platform3DObject getBackingTexture(); bool isAccelerated() const { return true; } + void setIsHidden(bool); + void setImageBuffer(ImageBuffer* imageBuffer) { m_imageBuffer = imageBuffer; } // Methods used by Canvas2DLayerManager virtual size_t freeMemoryIfPossible(size_t); // virtual for mocking virtual void flush(); // virtual for mocking virtual size_t storageAllocatedForRecording(); // virtual for faking - size_t bytesAllocated() const {return m_bytesAllocated;} + size_t bytesAllocated() const { return m_bytesAllocated; } void limitPendingFrames(); + void freeReleasedMailbox(); + bool hasReleasedMailbox() const; + void freeTransientResources(); + bool hasTransientResources() const; + bool isHidden() { return m_isHidden; } void beginDestruction(); protected: - Canvas2DLayerBridge(PassRefPtr<GraphicsContext3D>, PassOwnPtr<SkDeferredCanvas>, int, OpacityMode); + Canvas2DLayerBridge(PassOwnPtr<blink::WebGraphicsContext3DProvider>, PassOwnPtr<SkDeferredCanvas>, int, OpacityMode); void setRateLimitingEnabled(bool); + bool releasedMailboxHasExpired(); + blink::WebGraphicsContext3D* context(); OwnPtr<SkDeferredCanvas> m_canvas; OwnPtr<blink::WebExternalTextureLayer> m_layer; - RefPtr<GraphicsContext3D> m_context; + OwnPtr<blink::WebGraphicsContext3DProvider> m_contextProvider; + ImageBuffer* m_imageBuffer; int m_msaaSampleCount; size_t m_bytesAllocated; bool m_didRecordDrawCommand; - bool m_surfaceIsValid; + bool m_isSurfaceValid; int m_framesPending; + int m_framesSinceMailboxRelease; bool m_destructionInProgress; bool m_rateLimitingEnabled; + bool m_isHidden; friend class WTF::DoublyLinkedListNode<Canvas2DLayerBridge>; friend class ::Canvas2DLayerBridgeTest; @@ -110,7 +126,7 @@ protected: struct MailboxInfo { blink::WebExternalTextureMailbox m_mailbox; - SkAutoTUnref<SkImage> m_image; + RefPtr<SkImage> m_image; MailboxStatus m_status; RefPtr<Canvas2DLayerBridge> m_parentLayerBridge; @@ -118,9 +134,11 @@ protected: MailboxInfo() {} }; MailboxInfo* createMailboxInfo(); + MailboxInfo* releasedMailboxInfo(); uint32_t m_lastImageId; Vector<MailboxInfo> m_mailboxes; + int m_releasedMailboxInfoIndex; }; } #endif |