cc: Make picture pile base thread safe.
[chromium-blink-merge.git] / content / renderer / child_frame_compositing_helper.h
blob3bb4c28b8a935771bbecb8e316f920a409a90100
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.
5 #ifndef CONTENT_RENDERER_CHILD_FRAME_COMPOSITING_HELPER_H_
6 #define CONTENT_RENDERER_CHILD_FRAME_COMPOSITING_HELPER_H_
8 #include <string>
9 #include <vector>
11 #include "base/memory/ref_counted.h"
12 #include "base/memory/scoped_ptr.h"
13 #include "base/memory/shared_memory.h"
14 #include "cc/layers/delegated_frame_resource_collection.h"
15 #include "content/common/content_export.h"
16 #include "ui/gfx/size.h"
18 namespace base {
19 class SharedMemory;
22 namespace cc {
23 class CompositorFrame;
24 class CopyOutputResult;
25 class Layer;
26 class SolidColorLayer;
27 class DelegatedFrameProvider;
28 class DelegatedFrameResourceCollection;
29 class DelegatedRendererLayer;
32 namespace blink {
33 class WebFrame;
34 class WebPluginContainer;
35 class WebLayer;
38 namespace gfx {
39 class Rect;
40 class Size;
43 struct FrameHostMsg_CompositorFrameSwappedACK_Params;
44 struct FrameHostMsg_BuffersSwappedACK_Params;
45 struct FrameHostMsg_ReclaimCompositorResources_Params;
47 namespace content {
49 class BrowserPlugin;
50 class BrowserPluginManager;
51 class RenderFrameProxy;
53 class CONTENT_EXPORT ChildFrameCompositingHelper
54 : public base::RefCounted<ChildFrameCompositingHelper>,
55 public cc::DelegatedFrameResourceCollectionClient {
56 public:
57 static ChildFrameCompositingHelper* CreateForBrowserPlugin(
58 const base::WeakPtr<BrowserPlugin>& browser_plugin);
59 static ChildFrameCompositingHelper* CreateForRenderFrameProxy(
60 RenderFrameProxy* render_frame_proxy);
62 void CopyFromCompositingSurface(int request_id,
63 gfx::Rect source_rect,
64 gfx::Size dest_size);
65 void DidCommitCompositorFrame();
66 void EnableCompositing(bool);
67 void OnContainerDestroy();
68 void OnCompositorFrameSwapped(scoped_ptr<cc::CompositorFrame> frame,
69 int route_id,
70 uint32 output_surface_id,
71 int host_id,
72 base::SharedMemoryHandle handle);
73 void UpdateVisibility(bool);
74 void ChildFrameGone();
76 // cc::DelegatedFrameProviderClient implementation.
77 void UnusedResourcesAreAvailable() override;
78 void SetContentsOpaque(bool);
80 protected:
81 // Friend RefCounted so that the dtor can be non-public.
82 friend class base::RefCounted<ChildFrameCompositingHelper>;
84 private:
85 ChildFrameCompositingHelper(
86 const base::WeakPtr<BrowserPlugin>& browser_plugin,
87 blink::WebFrame* frame,
88 RenderFrameProxy* render_frame_proxy,
89 int host_routing_id);
91 virtual ~ChildFrameCompositingHelper();
93 BrowserPluginManager* GetBrowserPluginManager();
94 blink::WebPluginContainer* GetContainer();
95 int GetInstanceID();
97 void SendCompositorFrameSwappedACKToBrowser(
98 FrameHostMsg_CompositorFrameSwappedACK_Params& params);
99 void SendReclaimCompositorResourcesToBrowser(
100 FrameHostMsg_ReclaimCompositorResources_Params& params);
101 void CheckSizeAndAdjustLayerProperties(const gfx::Size& new_size,
102 float device_scale_factor,
103 cc::Layer* layer);
104 void SendReturnedDelegatedResources();
105 void CopyFromCompositingSurfaceHasResult(
106 int request_id,
107 gfx::Size dest_size,
108 scoped_ptr<cc::CopyOutputResult> result);
110 int host_routing_id_;
111 int last_route_id_;
112 uint32 last_output_surface_id_;
113 int last_host_id_;
114 bool ack_pending_;
115 bool opaque_;
117 gfx::Size buffer_size_;
119 // The lifetime of this weak pointer should be greater than the lifetime of
120 // other member objects, as they may access this pointer during their
121 // destruction.
122 base::WeakPtr<BrowserPlugin> browser_plugin_;
123 RenderFrameProxy* render_frame_proxy_;
125 scoped_refptr<cc::DelegatedFrameResourceCollection> resource_collection_;
126 scoped_refptr<cc::DelegatedFrameProvider> frame_provider_;
128 scoped_refptr<cc::SolidColorLayer> background_layer_;
129 scoped_refptr<cc::DelegatedRendererLayer> delegated_layer_;
130 scoped_ptr<blink::WebLayer> web_layer_;
131 blink::WebFrame* frame_;
133 DISALLOW_COPY_AND_ASSIGN(ChildFrameCompositingHelper);
136 } // namespace content
138 #endif // CONTENT_RENDERER_CHILD_FRAME_COMPOSITING_HELPER_H_