| // Copyright 2014 The Chromium Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #ifndef PPAPI_PROXY_COMPOSITOR_RESOURCE_H_ |
| #define PPAPI_PROXY_COMPOSITOR_RESOURCE_H_ |
| |
| #include <stdint.h> |
| |
| #include <map> |
| |
| #include "base/macros.h" |
| #include "ppapi/proxy/compositor_layer_resource.h" |
| #include "ppapi/proxy/plugin_resource.h" |
| #include "ppapi/proxy/ppapi_proxy_export.h" |
| #include "ppapi/shared_impl/proxy_lock.h" |
| #include "ppapi/thunk/ppb_compositor_api.h" |
| |
| namespace gpu { |
| struct SyncToken; |
| } |
| |
| namespace ppapi { |
| namespace proxy { |
| |
| class PPAPI_PROXY_EXPORT CompositorResource |
| : public PluginResource, |
| public thunk::PPB_Compositor_API { |
| public: |
| CompositorResource(Connection connection, |
| PP_Instance instance); |
| |
| bool IsInProgress() const; |
| |
| int32_t GenerateResourceId() const; |
| |
| private: |
| ~CompositorResource() override; |
| |
| // Resource overrides: |
| thunk::PPB_Compositor_API* AsPPB_Compositor_API() override; |
| |
| // PluginResource overrides: |
| void OnReplyReceived(const ResourceMessageReplyParams& params, |
| const IPC::Message& msg) override; |
| |
| // thunk::PPB_Compositor_API overrides: |
| PP_Resource AddLayer() override; |
| int32_t CommitLayers(const scoped_refptr<TrackedCallback>& callback) override; |
| int32_t ResetLayers() override; |
| |
| // IPC msg handlers: |
| void OnPluginMsgCommitLayersReply(const ResourceMessageReplyParams& params); |
| void OnPluginMsgReleaseResource(const ResourceMessageReplyParams& params, |
| int32_t id, |
| const gpu::SyncToken& sync_token, |
| bool is_lost); |
| |
| void ResetLayersInternal(bool is_aborted); |
| |
| // Callback for CommitLayers(). |
| scoped_refptr<TrackedCallback> commit_callback_; |
| |
| // True if layers_ has been reset by ResetLayers(). |
| bool layer_reset_; |
| |
| // Layer stack. |
| typedef std::vector<scoped_refptr<CompositorLayerResource> > LayerList; |
| LayerList layers_; |
| |
| // Release callback map for texture and image. |
| typedef CompositorLayerResource::ReleaseCallback ReleaseCallback; |
| typedef std::map<int32_t, ReleaseCallback> ReleaseCallbackMap; |
| ReleaseCallbackMap release_callback_map_; |
| |
| // The last resource id for texture or image. |
| mutable int32_t last_resource_id_; |
| |
| DISALLOW_COPY_AND_ASSIGN(CompositorResource); |
| }; |
| |
| } // namespace proxy |
| } // namespace ppapi |
| |
| #endif // PPAPI_PROXY_COMPOSITOR_RESOURCE_H_ |