diff options
Diffstat (limited to 'content/renderer')
-rw-r--r-- | content/renderer/BUILD.gn | 1 | ||||
-rw-r--r-- | content/renderer/child_frame_compositing_helper.cc | 1 | ||||
-rw-r--r-- | content/renderer/child_frame_compositing_helper.h | 5 | ||||
-rw-r--r-- | content/renderer/render_frame_proxy.cc | 11 | ||||
-rw-r--r-- | content/renderer/render_frame_proxy.h | 4 | ||||
-rw-r--r-- | content/renderer/render_widget.cc | 3 |
6 files changed, 24 insertions, 1 deletions
diff --git a/content/renderer/BUILD.gn b/content/renderer/BUILD.gn index a8c9147..b08f9dd 100644 --- a/content/renderer/BUILD.gn +++ b/content/renderer/BUILD.gn @@ -33,6 +33,7 @@ source_set("renderer") { "//cc/blink", "//cc/proto", "//cc/surfaces", + "//cc/surfaces:surface_id", "//components/scheduler:scheduler", "//components/startup_metric_utils/common", "//components/url_formatter", diff --git a/content/renderer/child_frame_compositing_helper.cc b/content/renderer/child_frame_compositing_helper.cc index ef85384..0166a08 100644 --- a/content/renderer/child_frame_compositing_helper.cc +++ b/content/renderer/child_frame_compositing_helper.cc @@ -293,6 +293,7 @@ void ChildFrameCompositingHelper::OnSetSurface( const gfx::Size& frame_size, float scale_factor, const cc::SurfaceSequence& sequence) { + surface_id_ = surface_id; scoped_refptr<ThreadSafeSender> sender( RenderThreadImpl::current()->thread_safe_sender()); cc::SurfaceLayer::SatisfyCallback satisfy_callback = diff --git a/content/renderer/child_frame_compositing_helper.h b/content/renderer/child_frame_compositing_helper.h index d2d4e78..707955c 100644 --- a/content/renderer/child_frame_compositing_helper.h +++ b/content/renderer/child_frame_compositing_helper.h @@ -15,6 +15,7 @@ #include "base/memory/scoped_ptr.h" #include "base/memory/shared_memory.h" #include "cc/layers/delegated_frame_resource_collection.h" +#include "cc/surfaces/surface_id.h" #include "content/common/content_export.h" #include "ui/gfx/geometry/size.h" @@ -23,7 +24,6 @@ class SharedMemory; } namespace cc { -struct SurfaceId; struct SurfaceSequence; class CompositorFrame; @@ -79,6 +79,8 @@ class CONTENT_EXPORT ChildFrameCompositingHelper void UpdateVisibility(bool); void ChildFrameGone(); + cc::SurfaceId surface_id() const { return surface_id_; } + // cc::DelegatedFrameProviderClient implementation. void UnusedResourcesAreAvailable() override; @@ -146,6 +148,7 @@ class CONTENT_EXPORT ChildFrameCompositingHelper scoped_refptr<cc::DelegatedFrameProvider> frame_provider_; scoped_ptr<blink::WebLayer> web_layer_; + cc::SurfaceId surface_id_; blink::WebFrame* frame_; DISALLOW_COPY_AND_ASSIGN(ChildFrameCompositingHelper); diff --git a/content/renderer/render_frame_proxy.cc b/content/renderer/render_frame_proxy.cc index d8effb5..7a52f2c 100644 --- a/content/renderer/render_frame_proxy.cc +++ b/content/renderer/render_frame_proxy.cc @@ -195,6 +195,17 @@ bool RenderFrameProxy::IsMainFrameDetachedFromTree() const { render_view_->webview()->mainFrame()->isWebLocalFrame(); } +void RenderFrameProxy::WillBeginCompositorFrame() { + if (compositing_helper_) { + FrameHostMsg_HittestData_Params params; + params.surface_id = compositing_helper_->surface_id(); + params.ignored_for_hittest = web_frame_->isIgnoredForHitTest(); + render_widget_->QueueMessage( + new FrameHostMsg_HittestData(render_widget_->routing_id(), params), + MESSAGE_DELIVERY_POLICY_WITH_VISUAL_STATE); + } +} + void RenderFrameProxy::DidCommitCompositorFrame() { if (compositing_helper_.get()) compositing_helper_->DidCommitCompositorFrame(); diff --git a/content/renderer/render_frame_proxy.h b/content/renderer/render_frame_proxy.h index 7581d38..f6dc700 100644 --- a/content/renderer/render_frame_proxy.h +++ b/content/renderer/render_frame_proxy.h @@ -104,6 +104,10 @@ class CONTENT_EXPORT RenderFrameProxy bool Send(IPC::Message* msg) override; // Out-of-process child frames receive a signal from RenderWidgetCompositor + // when a compositor frame will begin. + void WillBeginCompositorFrame(); + + // Out-of-process child frames receive a signal from RenderWidgetCompositor // when a compositor frame has committed. void DidCommitCompositorFrame(); diff --git a/content/renderer/render_widget.cc b/content/renderer/render_widget.cc index ddd60cb..345528f 100644 --- a/content/renderer/render_widget.cc +++ b/content/renderer/render_widget.cc @@ -1223,6 +1223,9 @@ void RenderWidget::WillBeginCompositorFrame() { // is done. UpdateTextInputState(ShowIme::HIDE_IME, ChangeSource::FROM_NON_IME); UpdateSelectionBounds(); + + FOR_EACH_OBSERVER(RenderFrameProxy, render_frame_proxies_, + WillBeginCompositorFrame()); } /////////////////////////////////////////////////////////////////////////////// |