Index: ppapi/proxy/compositor_resource.h |
diff --git a/ppapi/proxy/compositor_resource.h b/ppapi/proxy/compositor_resource.h |
index 1ad74b9dbdecf71a227da44efa9102f18ece8c08..7914da3ba6c26a55f110acbe480eb6544ddc163a 100644 |
--- a/ppapi/proxy/compositor_resource.h |
+++ b/ppapi/proxy/compositor_resource.h |
@@ -5,8 +5,16 @@ |
#ifndef PPAPI_PROXY_COMPOSITOR_RESOURCE_H_ |
#define PPAPI_PROXY_COMPOSITOR_RESOURCE_H_ |
+#include <map> |
+ |
+#include "base/callback.h" |
+#include "base/memory/scoped_vector.h" |
+#include "base/memory/weak_ptr.h" |
+#include "ppapi/c/ppb_compositor_layer.h" |
#include "ppapi/proxy/plugin_resource.h" |
#include "ppapi/proxy/ppapi_proxy_export.h" |
+#include "ppapi/shared_impl/compositor_layer_data.h" |
+#include "ppapi/shared_impl/scoped_pp_resource.h" |
#include "ppapi/thunk/ppb_compositor_api.h" |
namespace ppapi { |
@@ -16,21 +24,113 @@ class PPAPI_PROXY_EXPORT CompositorResource |
: public PluginResource, |
public thunk::PPB_Compositor_API { |
public: |
+ // Release callback for texture or image. |
+ typedef base::Callback<void(uint32_t, bool)> ReleaseCallback; |
+ |
+ class LayerImpl : public base::SupportsWeakPtr<LayerImpl> { |
+ public: |
+ LayerImpl(CompositorResource* compositor); |
+ ~LayerImpl(); |
+ |
+ // Methods for CompositorLayerResource: |
+ int32_t SetColor(uint8_t red, |
+ uint8_t green, |
+ uint8_t blue, |
+ uint8_t alpha, |
+ const struct PP_Size* size); |
+ int32_t SetTexture(PP_Resource context, |
+ uint32_t texture, |
+ const struct PP_Size* size, |
+ const scoped_refptr<TrackedCallback>& release_callback); |
+ int32_t SetImage(PP_Resource image_data, |
+ const struct PP_Size* size, |
+ const scoped_refptr<TrackedCallback>& release_callback); |
+ int32_t SetClipRect(const struct PP_Rect* rect); |
+ int32_t SetTransform(const float matrix[16]); |
+ int32_t SetOpacity(uint8_t opacity); |
+ int32_t SetBlendMode(PP_BlendMode mode); |
+ int32_t SetSourceRect(const struct PP_FloatRect* rect); |
+ int32_t SetPremultipliedAlpha(PP_Bool premult); |
+ |
+ const CompositorLayerData& data() const { return data_; } |
+ const ReleaseCallback& release_callback() const { |
+ return release_callback_; |
+ } |
+ void ResetReleaseCallback() { release_callback_.Reset(); } |
+ |
+ private: |
+ bool SetType(CompositorLayerData::Type type); |
+ |
+ void OnTextureReleased( |
+ const ScopedPPResource& context, |
+ uint32_t texture, |
+ const scoped_refptr<TrackedCallback>& release_callback, |
+ uint32_t sync_point, |
+ bool is_lost); |
+ |
+ void OnImageReleased( |
+ const ScopedPPResource& image, |
+ const scoped_refptr<TrackedCallback>& release_callback, |
+ uint32_t sync_point, |
+ bool is_lost); |
+ |
+ CompositorResource* compositor_; |
+ |
+ // Release callback for texture or image layer. |
+ ReleaseCallback release_callback_; |
+ |
+ PP_FloatSize source_size_; |
+ |
+ CompositorLayerData data_; |
+ |
+ DISALLOW_COPY_AND_ASSIGN(LayerImpl); |
+ }; |
+ |
CompositorResource(Connection connection, |
PP_Instance instance); |
private: |
virtual ~CompositorResource(); |
+ bool IsInProgress() const { |
+ return TrackedCallback::IsPending(commit_callback_); |
+ } |
+ |
+ int32_t GenerateResourceId() { |
+ return ++last_resource_id_; |
+ } |
+ |
// Resource overrides: |
virtual thunk::PPB_Compositor_API* AsPPB_Compositor_API() OVERRIDE; |
+ // PluginResource overrides: |
+ virtual void OnReplyReceived(const ResourceMessageReplyParams& params, |
+ const IPC::Message& msg) OVERRIDE; |
+ |
// thunk::PPB_Compositor_API overrides: |
virtual PP_Resource AddLayer() OVERRIDE; |
virtual int32_t CommitLayers( |
- const scoped_refptr<ppapi::TrackedCallback>& callback) OVERRIDE; |
+ const scoped_refptr<TrackedCallback>& callback) OVERRIDE; |
virtual int32_t ResetLayers() OVERRIDE; |
+ // IPC msg handlers: |
+ void OnPluginMsgCommitLayersReply(const ResourceMessageReplyParams& params); |
+ void OnPluginMsgReleaseResource( |
+ const ResourceMessageReplyParams& params, |
+ int32_t id, |
+ uint32_t sync_point, |
+ bool is_lost); |
+ |
+ scoped_refptr<TrackedCallback> commit_callback_; |
+ |
+ bool layer_reset_; |
+ |
+ ScopedVector<LayerImpl> layers_; |
+ |
+ int32_t last_resource_id_; |
+ typedef std::map<int32_t, ReleaseCallback > ReleaseCallbackMap; |
+ ReleaseCallbackMap release_callback_map_; |
+ |
DISALLOW_COPY_AND_ASSIGN(CompositorResource); |
}; |