| 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);
|
| };
|
|
|
|
|