1 // Copyright 2014 The Chromium Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 #ifndef CC_BLINK_WEB_EXTERNAL_TEXTURE_LAYER_IMPL_H_ 6 #define CC_BLINK_WEB_EXTERNAL_TEXTURE_LAYER_IMPL_H_ 7 8 #include "base/bind.h" 9 #include "base/memory/scoped_ptr.h" 10 #include "base/memory/scoped_vector.h" 11 #include "cc/blink/cc_blink_export.h" 12 #include "cc/layers/texture_layer_client.h" 13 #include "third_party/WebKit/public/platform/WebExternalTextureLayer.h" 14 15 namespace blink { 16 struct WebFloatRect; 17 struct WebExternalTextureMailbox; 18 } 19 20 namespace cc { 21 class SingleReleaseCallback; 22 class TextureMailbox; 23 } 24 25 namespace cc_blink { 26 27 class WebLayerImpl; 28 class WebExternalBitmapImpl; 29 30 class WebExternalTextureLayerImpl 31 : public blink::WebExternalTextureLayer, 32 public cc::TextureLayerClient, 33 public base::SupportsWeakPtr<WebExternalTextureLayerImpl> { 34 public: 35 CC_BLINK_EXPORT explicit WebExternalTextureLayerImpl( 36 blink::WebExternalTextureLayerClient*); 37 virtual ~WebExternalTextureLayerImpl(); 38 39 // blink::WebExternalTextureLayer implementation. 40 virtual blink::WebLayer* layer(); 41 virtual void clearTexture(); 42 virtual void setOpaque(bool opaque); 43 virtual void setPremultipliedAlpha(bool premultiplied); 44 virtual void setBlendBackgroundColor(bool blend); 45 virtual void setRateLimitContext(bool rate_limit); 46 47 // TextureLayerClient implementation. 48 virtual bool PrepareTextureMailbox( 49 cc::TextureMailbox* mailbox, 50 scoped_ptr<cc::SingleReleaseCallback>* release_callback, 51 bool use_shared_memory) OVERRIDE; 52 53 private: 54 static void DidReleaseMailbox( 55 base::WeakPtr<WebExternalTextureLayerImpl> layer, 56 const blink::WebExternalTextureMailbox& mailbox, 57 WebExternalBitmapImpl* bitmap, 58 unsigned sync_point, 59 bool lost_resource); 60 61 WebExternalBitmapImpl* AllocateBitmap(); 62 63 blink::WebExternalTextureLayerClient* client_; 64 scoped_ptr<WebLayerImpl> layer_; 65 ScopedVector<WebExternalBitmapImpl> free_bitmaps_; 66 67 DISALLOW_COPY_AND_ASSIGN(WebExternalTextureLayerImpl); 68 }; 69 70 } // namespace cc_blink 71 72 #endif // CC_BLINK_WEB_EXTERNAL_TEXTURE_LAYER_IMPL_H_ 73