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 15namespace blink { 16struct WebFloatRect; 17struct WebExternalTextureMailbox; 18} 19 20namespace cc { 21class SingleReleaseCallback; 22class TextureMailbox; 23} 24 25namespace cc_blink { 26 27class WebLayerImpl; 28class WebExternalBitmapImpl; 29 30class 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