Commit f27d6cae authored by yiyix's avatar yiyix Committed by Commit Bot

Update RenderFrameMetadataProvider creation time

RenderFrameMetadataProvider(RFMP) is not available until calling
RWHI::RequestCompositorFrameSink, that is no observer can be added before
that point, which may not be convenient for all observers. In this patch,
RenderFrameMetadataProvider will be created in RenderWidgetHostImpl
constructor and the ready to receive and send information after calling
RequestCompositorFrameSink.

For Example: RenderWidgetHostViewAura is created and start to observe changes
in RFM before calling RWHI::RequestCompositorFrameSink.

Bug: 716911

Change-Id: Icac9d5ff44a24b2a828bb7946202917f79c93147
Reviewed-on: https://chromium-review.googlesource.com/952200
Commit-Queue: Yi Xu <yiyix@chromium.org>
Reviewed-by: default avatarFady Samuel <fsamuel@chromium.org>
Reviewed-by: default avatarJonathan Ross <jonross@chromium.org>
Cr-Commit-Position: refs/heads/master@{#541645}
parent 15585151
...@@ -6,14 +6,8 @@ ...@@ -6,14 +6,8 @@
namespace content { namespace content {
RenderFrameMetadataProviderImpl::RenderFrameMetadataProviderImpl( RenderFrameMetadataProviderImpl::RenderFrameMetadataProviderImpl()
mojom::RenderFrameMetadataObserverClientRequest client_request, : render_frame_metadata_observer_client_binding_(this) {}
mojom::RenderFrameMetadataObserverPtr observer)
: render_frame_metadata_observer_client_binding_(this),
render_frame_metadata_observer_ptr_(std::move(observer)) {
render_frame_metadata_observer_client_binding_.Bind(
std::move(client_request));
}
RenderFrameMetadataProviderImpl::~RenderFrameMetadataProviderImpl() = default; RenderFrameMetadataProviderImpl::~RenderFrameMetadataProviderImpl() = default;
...@@ -25,8 +19,18 @@ void RenderFrameMetadataProviderImpl::RemoveObserver(Observer* observer) { ...@@ -25,8 +19,18 @@ void RenderFrameMetadataProviderImpl::RemoveObserver(Observer* observer) {
observers_.RemoveObserver(observer); observers_.RemoveObserver(observer);
} }
void RenderFrameMetadataProviderImpl::Bind(
mojom::RenderFrameMetadataObserverClientRequest client_request,
mojom::RenderFrameMetadataObserverPtr observer) {
render_frame_metadata_observer_ptr_ = std::move(observer);
render_frame_metadata_observer_client_binding_.Close();
render_frame_metadata_observer_client_binding_.Bind(
std::move(client_request));
}
void RenderFrameMetadataProviderImpl::ReportAllFrameSubmissionsForTesting( void RenderFrameMetadataProviderImpl::ReportAllFrameSubmissionsForTesting(
bool enabled) { bool enabled) {
DCHECK(render_frame_metadata_observer_ptr_);
render_frame_metadata_observer_ptr_->ReportAllFrameSubmissionsForTesting( render_frame_metadata_observer_ptr_->ReportAllFrameSubmissionsForTesting(
enabled); enabled);
} }
......
...@@ -25,14 +25,15 @@ class RenderFrameMetadataProviderImpl ...@@ -25,14 +25,15 @@ class RenderFrameMetadataProviderImpl
: public RenderFrameMetadataProvider, : public RenderFrameMetadataProvider,
public mojom::RenderFrameMetadataObserverClient { public mojom::RenderFrameMetadataObserverClient {
public: public:
RenderFrameMetadataProviderImpl( RenderFrameMetadataProviderImpl();
mojom::RenderFrameMetadataObserverClientRequest client_request,
mojom::RenderFrameMetadataObserverPtr observer);
~RenderFrameMetadataProviderImpl() override; ~RenderFrameMetadataProviderImpl() override;
void AddObserver(Observer* observer) override; void AddObserver(Observer* observer) override;
void RemoveObserver(Observer* observer) override; void RemoveObserver(Observer* observer) override;
void Bind(mojom::RenderFrameMetadataObserverClientRequest client_request,
mojom::RenderFrameMetadataObserverPtr observer);
// Notifies the renderer to begin sending a notification on all frame // Notifies the renderer to begin sending a notification on all frame
// submissions. // submissions.
void ReportAllFrameSubmissionsForTesting(bool enabled) override; void ReportAllFrameSubmissionsForTesting(bool enabled) override;
......
...@@ -57,7 +57,6 @@ ...@@ -57,7 +57,6 @@
#include "content/browser/renderer_host/input/synthetic_gesture_target.h" #include "content/browser/renderer_host/input/synthetic_gesture_target.h"
#include "content/browser/renderer_host/input/timeout_monitor.h" #include "content/browser/renderer_host/input/timeout_monitor.h"
#include "content/browser/renderer_host/input/touch_emulator.h" #include "content/browser/renderer_host/input/touch_emulator.h"
#include "content/browser/renderer_host/render_frame_metadata_provider_impl.h"
#include "content/browser/renderer_host/render_process_host_impl.h" #include "content/browser/renderer_host/render_process_host_impl.h"
#include "content/browser/renderer_host/render_view_host_delegate.h" #include "content/browser/renderer_host/render_view_host_delegate.h"
#include "content/browser/renderer_host/render_view_host_delegate_view.h" #include "content/browser/renderer_host/render_view_host_delegate_view.h"
...@@ -2684,10 +2683,9 @@ void RenderWidgetHostImpl::RequestCompositorFrameSink( ...@@ -2684,10 +2683,9 @@ void RenderWidgetHostImpl::RequestCompositorFrameSink(
mojom::RenderFrameMetadataObserverClientRequest mojom::RenderFrameMetadataObserverClientRequest
render_frame_metadata_observer_client_request, render_frame_metadata_observer_client_request,
mojom::RenderFrameMetadataObserverPtr render_frame_metadata_observer) { mojom::RenderFrameMetadataObserverPtr render_frame_metadata_observer) {
render_frame_metadata_provider_ = render_frame_metadata_provider_.Bind(
std::make_unique<RenderFrameMetadataProviderImpl>( std::move(render_frame_metadata_observer_client_request),
std::move(render_frame_metadata_observer_client_request), std::move(render_frame_metadata_observer));
std::move(render_frame_metadata_observer));
if (enable_viz_) { if (enable_viz_) {
// Connects the viz process end of CompositorFrameSink message pipes. The // Connects the viz process end of CompositorFrameSink message pipes. The
// renderer compositor may request a new CompositorFrameSink on context // renderer compositor may request a new CompositorFrameSink on context
......
...@@ -38,6 +38,7 @@ ...@@ -38,6 +38,7 @@
#include "content/browser/renderer_host/input/synthetic_gesture.h" #include "content/browser/renderer_host/input/synthetic_gesture.h"
#include "content/browser/renderer_host/input/synthetic_gesture_controller.h" #include "content/browser/renderer_host/input/synthetic_gesture_controller.h"
#include "content/browser/renderer_host/input/touch_emulator_client.h" #include "content/browser/renderer_host/input/touch_emulator_client.h"
#include "content/browser/renderer_host/render_frame_metadata_provider_impl.h"
#include "content/browser/renderer_host/render_widget_host_delegate.h" #include "content/browser/renderer_host/render_widget_host_delegate.h"
#include "content/browser/renderer_host/render_widget_host_view_base.h" #include "content/browser/renderer_host/render_widget_host_view_base.h"
#include "content/common/drag_event_source_info.h" #include "content/common/drag_event_source_info.h"
...@@ -602,7 +603,7 @@ class CONTENT_EXPORT RenderWidgetHostImpl ...@@ -602,7 +603,7 @@ class CONTENT_EXPORT RenderWidgetHostImpl
} }
RenderFrameMetadataProvider* render_frame_metadata_provider() { RenderFrameMetadataProvider* render_frame_metadata_provider() {
return render_frame_metadata_provider_.get(); return &render_frame_metadata_provider_;
} }
bool HasGestureStopped() override; bool HasGestureStopped() override;
...@@ -1090,7 +1091,7 @@ class CONTENT_EXPORT RenderWidgetHostImpl ...@@ -1090,7 +1091,7 @@ class CONTENT_EXPORT RenderWidgetHostImpl
bool next_resize_needs_resize_ack_ = false; bool next_resize_needs_resize_ack_ = false;
std::unique_ptr<RenderFrameMetadataProvider> render_frame_metadata_provider_; RenderFrameMetadataProviderImpl render_frame_metadata_provider_;
const viz::FrameSinkId frame_sink_id_; const viz::FrameSinkId frame_sink_id_;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment