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