summaryrefslogtreecommitdiffstats
path: root/chromium/content/renderer/pepper/pepper_compositor_host.h
diff options
context:
space:
mode:
Diffstat (limited to 'chromium/content/renderer/pepper/pepper_compositor_host.h')
-rw-r--r--chromium/content/renderer/pepper/pepper_compositor_host.h102
1 files changed, 102 insertions, 0 deletions
diff --git a/chromium/content/renderer/pepper/pepper_compositor_host.h b/chromium/content/renderer/pepper/pepper_compositor_host.h
new file mode 100644
index 00000000000..de2f72bac25
--- /dev/null
+++ b/chromium/content/renderer/pepper/pepper_compositor_host.h
@@ -0,0 +1,102 @@
+// 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 CONTENT_RENDERER_PEPPER_PEPPER_COMPOSITOR_H_
+#define CONTENT_RENDERER_PEPPER_PEPPER_COMPOSITOR_H_
+
+#include "base/compiler_specific.h"
+#include "base/memory/scoped_ptr.h"
+#include "base/memory/weak_ptr.h"
+#include "ppapi/host/host_message_context.h"
+#include "ppapi/host/resource_host.h"
+#include "ppapi/shared_impl/compositor_layer_data.h"
+
+namespace base {
+class SharedMemory;
+} // namespace
+
+namespace cc {
+class Layer;
+} // namespace cc
+
+namespace content {
+
+class PepperPluginInstanceImpl;
+class RendererPpapiHost;
+
+class PepperCompositorHost : public ppapi::host::ResourceHost {
+ public:
+ PepperCompositorHost(RendererPpapiHost* host,
+ PP_Instance instance,
+ PP_Resource resource);
+ // Associates this device with the given plugin instance. You can pass NULL
+ // to clear the existing device. Returns true on success. In this case, a
+ // repaint of the page will also be scheduled. Failure means that the device
+ // is already bound to a different instance, and nothing will happen.
+ bool BindToInstance(PepperPluginInstanceImpl* new_instance);
+
+ const scoped_refptr<cc::Layer> layer() { return layer_; };
+
+ void ViewInitiatedPaint();
+ void ViewFlushedPaint();
+
+ private:
+ virtual ~PepperCompositorHost();
+
+ void ImageReleased(int32_t id,
+ const scoped_ptr<base::SharedMemory>& shared_memory,
+ uint32_t sync_point,
+ bool is_lost);
+ void ResourceReleased(int32_t id,
+ uint32_t sync_point,
+ bool is_lost);
+ void SendCommitLayersReplyIfNecessary();
+ void UpdateLayer(const scoped_refptr<cc::Layer>& layer,
+ const ppapi::CompositorLayerData* old_layer,
+ const ppapi::CompositorLayerData* new_layer,
+ scoped_ptr<base::SharedMemory> image_shm);
+
+ // ResourceMessageHandler overrides:
+ virtual int32_t OnResourceMessageReceived(
+ const IPC::Message& msg,
+ ppapi::host::HostMessageContext* context) OVERRIDE;
+
+ // ppapi::host::ResourceHost overrides:
+ virtual bool IsCompositorHost() OVERRIDE;
+
+ // Message handlers:
+ int32_t OnHostMsgCommitLayers(
+ ppapi::host::HostMessageContext* context,
+ const std::vector<ppapi::CompositorLayerData>& layers,
+ bool reset);
+
+ // Non-owning pointer to the plugin instance this context is currently bound
+ // to, if any. If the context is currently unbound, this will be NULL.
+ PepperPluginInstanceImpl* bound_instance_;
+
+ // The toplevel cc::Layer. It is the parent of other cc::Layers.
+ scoped_refptr<cc::Layer> layer_;
+
+ // A list of layers. It is used for updating layers' properties in
+ // subsequent CommitLayers() calls.
+ struct LayerData {
+ LayerData(const scoped_refptr<cc::Layer>& cc,
+ const ppapi::CompositorLayerData& pp);
+ ~LayerData();
+
+ scoped_refptr<cc::Layer> cc_layer;
+ ppapi::CompositorLayerData pp_layer;
+ };
+ std::vector<LayerData> layers_;
+
+ ppapi::host::ReplyMessageContext commit_layers_reply_context_;
+
+ base::WeakPtrFactory<PepperCompositorHost> weak_factory_;
+
+ DISALLOW_COPY_AND_ASSIGN(PepperCompositorHost);
+};
+
+} // namespace content
+
+#endif // CONTENT_RENDERER_PEPPER_PEPPER_COMPOSITOR_H_