Commit 6eeb35a3 authored by Xu Xing's avatar Xu Xing Committed by Commit Bot

Implement DelegatedFrameHostClientAndroid

This behaves similar to DelegatedFrameHost. As discussed in
https://chromium-review.googlesource.com/c/chromium/src/+/1173663,
this implements composition instead of inheritance.

Bug: 859977
Change-Id: Icf5e0c83c4b3789a2173933a26067c6275f62765
Reviewed-on: https://chromium-review.googlesource.com/1186199Reviewed-by: default avatarSadrul Chowdhury <sadrul@chromium.org>
Reviewed-by: default avatarFady Samuel <fsamuel@chromium.org>
Commit-Queue: Xing Xu <xing.xu@intel.com>
Cr-Commit-Position: refs/heads/master@{#586077}
parent 35b966d6
...@@ -2191,6 +2191,8 @@ jumbo_source_set("browser") { ...@@ -2191,6 +2191,8 @@ jumbo_source_set("browser") {
"media/capture/screen_capture_device_android.h", "media/capture/screen_capture_device_android.h",
"renderer_host/compositor_impl_android.cc", "renderer_host/compositor_impl_android.cc",
"renderer_host/compositor_impl_android.h", "renderer_host/compositor_impl_android.h",
"renderer_host/delegated_frame_host_client_android.cc",
"renderer_host/delegated_frame_host_client_android.h",
"renderer_host/input/fling_scheduler_android.cc", "renderer_host/input/fling_scheduler_android.cc",
"renderer_host/input/fling_scheduler_android.h", "renderer_host/input/fling_scheduler_android.h",
"renderer_host/input/synthetic_gesture_target_android.cc", "renderer_host/input/synthetic_gesture_target_android.cc",
......
// Copyright 2018 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.
#include "content/browser/renderer_host/delegated_frame_host_client_android.h"
#include "content/browser/renderer_host/render_widget_host_impl.h"
#include "content/browser/renderer_host/render_widget_host_view_android.h"
namespace content {
DelegatedFrameHostClientAndroid::DelegatedFrameHostClientAndroid(
RenderWidgetHostViewAndroid* render_widget_host_view)
: render_widget_host_view_(render_widget_host_view) {}
DelegatedFrameHostClientAndroid::~DelegatedFrameHostClientAndroid() {}
void DelegatedFrameHostClientAndroid::SetBeginFrameSource(
viz::BeginFrameSource* begin_frame_source) {
render_widget_host_view_->SetBeginFrameSource(begin_frame_source);
}
void DelegatedFrameHostClientAndroid::DidReceiveCompositorFrameAck(
const std::vector<viz::ReturnedResource>& resources) {
render_widget_host_view_->DidReceiveCompositorFrameAck(resources);
}
void DelegatedFrameHostClientAndroid::DidPresentCompositorFrame(
uint32_t presentation_token,
const gfx::PresentationFeedback& feedback) {
render_widget_host_view_->DidPresentCompositorFrame(presentation_token,
feedback);
}
void DelegatedFrameHostClientAndroid::ReclaimResources(
const std::vector<viz::ReturnedResource>& resources) {
render_widget_host_view_->ReclaimResources(resources);
}
void DelegatedFrameHostClientAndroid::OnFrameTokenChanged(
uint32_t frame_token) {
render_widget_host_view_->OnFrameTokenChangedForView(frame_token);
}
} // namespace content
// Copyright 2018 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_BROWSER_RENDERER_HOST_DELEGATED_FRAME_HOST_CLIENT_ANDROID_H_
#define CONTENT_BROWSER_RENDERER_HOST_DELEGATED_FRAME_HOST_CLIENT_ANDROID_H_
#include "base/macros.h"
#include "content/common/content_export.h"
#include "ui/android/delegated_frame_host_android.h"
namespace content {
class RenderWidgetHostViewAndroid;
class CONTENT_EXPORT DelegatedFrameHostClientAndroid
: public ui::DelegatedFrameHostAndroid::Client {
public:
explicit DelegatedFrameHostClientAndroid(
RenderWidgetHostViewAndroid* render_widget_host_view);
~DelegatedFrameHostClientAndroid() override;
private:
// DelegatedFrameHostAndroid::Client implementation.
void SetBeginFrameSource(viz::BeginFrameSource* begin_frame_source) override;
void DidPresentCompositorFrame(
uint32_t presentation_token,
const gfx::PresentationFeedback& feedback) override;
void DidReceiveCompositorFrameAck(
const std::vector<viz::ReturnedResource>& resources) override;
void ReclaimResources(
const std::vector<viz::ReturnedResource>& resources) override;
void OnFrameTokenChanged(uint32_t frame_token) override;
RenderWidgetHostViewAndroid* render_widget_host_view_;
DISALLOW_COPY_AND_ASSIGN(DelegatedFrameHostClientAndroid);
};
} // namespace content
#endif // CONTENT_BROWSER_RENDERER_HOST_DELEGATED_FRAME_HOST_CLIENT_ANDROID_H_
...@@ -21,19 +21,20 @@ DelegatedFrameHostClientAura::DelegatedFrameHostClientAura( ...@@ -21,19 +21,20 @@ DelegatedFrameHostClientAura::DelegatedFrameHostClientAura(
DelegatedFrameHostClientAura::~DelegatedFrameHostClientAura() {} DelegatedFrameHostClientAura::~DelegatedFrameHostClientAura() {}
ui::Layer* DelegatedFrameHostClientAura::DelegatedFrameHostGetLayer() const { ui::Layer* DelegatedFrameHostClientAura::DelegatedFrameHostGetLayer() const {
return render_widget_host_view_->window_->layer(); return render_widget_host_view_->window()->layer();
} }
bool DelegatedFrameHostClientAura::DelegatedFrameHostIsVisible() const { bool DelegatedFrameHostClientAura::DelegatedFrameHostIsVisible() const {
return !render_widget_host_view_->host_->is_hidden(); return !render_widget_host_view_->host()->is_hidden();
} }
SkColor DelegatedFrameHostClientAura::DelegatedFrameHostGetGutterColor() const { SkColor DelegatedFrameHostClientAura::DelegatedFrameHostGetGutterColor() const {
// When making an element on the page fullscreen the element's background // When making an element on the page fullscreen the element's background
// may not match the page's, so use black as the gutter color to avoid // may not match the page's, so use black as the gutter color to avoid
// flashes of brighter colors during the transition. // flashes of brighter colors during the transition.
if (render_widget_host_view_->host_->delegate() && if (render_widget_host_view_->host()->delegate() &&
render_widget_host_view_->host_->delegate() render_widget_host_view_->host()
->delegate()
->IsFullscreenForCurrentTab()) { ->IsFullscreenForCurrentTab()) {
return SK_ColorBLACK; return SK_ColorBLACK;
} }
......
...@@ -47,6 +47,7 @@ ...@@ -47,6 +47,7 @@
#include "content/browser/gpu/gpu_process_host.h" #include "content/browser/gpu/gpu_process_host.h"
#include "content/browser/media/android/media_web_contents_observer_android.h" #include "content/browser/media/android/media_web_contents_observer_android.h"
#include "content/browser/renderer_host/compositor_impl_android.h" #include "content/browser/renderer_host/compositor_impl_android.h"
#include "content/browser/renderer_host/delegated_frame_host_client_android.h"
#include "content/browser/renderer_host/dip_util.h" #include "content/browser/renderer_host/dip_util.h"
#include "content/browser/renderer_host/frame_metadata_util.h" #include "content/browser/renderer_host/frame_metadata_util.h"
#include "content/browser/renderer_host/input/input_router.h" #include "content/browser/renderer_host/input/input_router.h"
...@@ -196,9 +197,12 @@ RenderWidgetHostViewAndroid::RenderWidgetHostViewAndroid( ...@@ -196,9 +197,12 @@ RenderWidgetHostViewAndroid::RenderWidgetHostViewAndroid(
view_.set_event_handler(this); view_.set_event_handler(this);
if (using_browser_compositor_) { if (using_browser_compositor_) {
delegated_frame_host_client_ =
std::make_unique<DelegatedFrameHostClientAndroid>(this);
delegated_frame_host_ = std::make_unique<ui::DelegatedFrameHostAndroid>( delegated_frame_host_ = std::make_unique<ui::DelegatedFrameHostAndroid>(
&view_, CompositorImpl::GetHostFrameSinkManager(), this, &view_, CompositorImpl::GetHostFrameSinkManager(),
host()->GetFrameSinkId(), features::IsSurfaceSynchronizationEnabled()); delegated_frame_host_client_.get(), host()->GetFrameSinkId(),
features::IsSurfaceSynchronizationEnabled());
if (is_showing_) { if (is_showing_) {
delegated_frame_host_->WasShown( delegated_frame_host_->WasShown(
local_surface_id_allocator_.GetCurrentLocalSurfaceId(), local_surface_id_allocator_.GetCurrentLocalSurfaceId(),
...@@ -967,10 +971,6 @@ void RenderWidgetHostViewAndroid::ReclaimResources( ...@@ -967,10 +971,6 @@ void RenderWidgetHostViewAndroid::ReclaimResources(
renderer_compositor_frame_sink_->ReclaimResources(resources); renderer_compositor_frame_sink_->ReclaimResources(resources);
} }
void RenderWidgetHostViewAndroid::OnFrameTokenChanged(uint32_t frame_token) {
OnFrameTokenChangedForView(frame_token);
}
void RenderWidgetHostViewAndroid::DidCreateNewRendererCompositorFrameSink( void RenderWidgetHostViewAndroid::DidCreateNewRendererCompositorFrameSink(
viz::mojom::CompositorFrameSinkClient* renderer_compositor_frame_sink) { viz::mojom::CompositorFrameSinkClient* renderer_compositor_frame_sink) {
if (!delegated_frame_host_) { if (!delegated_frame_host_) {
......
...@@ -66,7 +66,6 @@ class CONTENT_EXPORT RenderWidgetHostViewAndroid ...@@ -66,7 +66,6 @@ class CONTENT_EXPORT RenderWidgetHostViewAndroid
: public RenderWidgetHostViewBase, : public RenderWidgetHostViewBase,
public StylusTextSelectorClient, public StylusTextSelectorClient,
public content::TextInputManager::Observer, public content::TextInputManager::Observer,
public ui::DelegatedFrameHostAndroid::Client,
public ui::EventHandlerAndroid, public ui::EventHandlerAndroid,
public ui::GestureProviderClient, public ui::GestureProviderClient,
public ui::TouchSelectionControllerClient, public ui::TouchSelectionControllerClient,
...@@ -234,16 +233,13 @@ class CONTENT_EXPORT RenderWidgetHostViewAndroid ...@@ -234,16 +233,13 @@ class CONTENT_EXPORT RenderWidgetHostViewAndroid
std::unique_ptr<ui::TouchHandleDrawable> CreateDrawable() override; std::unique_ptr<ui::TouchHandleDrawable> CreateDrawable() override;
void DidScroll() override; void DidScroll() override;
// DelegatedFrameHostAndroid::Client implementation. // Used by DelegatedFrameHostClientAndroid.
void SetBeginFrameSource(viz::BeginFrameSource* begin_frame_source) override; void SetBeginFrameSource(viz::BeginFrameSource* begin_frame_source);
void DidPresentCompositorFrame( void DidPresentCompositorFrame(uint32_t presentation_token,
uint32_t presentation_token, const gfx::PresentationFeedback& feedback);
const gfx::PresentationFeedback& feedback) override;
void DidReceiveCompositorFrameAck( void DidReceiveCompositorFrameAck(
const std::vector<viz::ReturnedResource>& resources) override; const std::vector<viz::ReturnedResource>& resources);
void ReclaimResources( void ReclaimResources(const std::vector<viz::ReturnedResource>& resources);
const std::vector<viz::ReturnedResource>& resources) override;
void OnFrameTokenChanged(uint32_t frame_token) override;
// viz::BeginFrameObserver implementation. // viz::BeginFrameObserver implementation.
void OnBeginFrame(const viz::BeginFrameArgs& args) override; void OnBeginFrame(const viz::BeginFrameArgs& args) override;
...@@ -448,6 +444,9 @@ class CONTENT_EXPORT RenderWidgetHostViewAndroid ...@@ -448,6 +444,9 @@ class CONTENT_EXPORT RenderWidgetHostViewAndroid
mutable ui::ViewAndroid view_; mutable ui::ViewAndroid view_;
std::unique_ptr<ui::DelegatedFrameHostAndroid::Client>
delegated_frame_host_client_;
// Manages the Compositor Frames received from the renderer. // Manages the Compositor Frames received from the renderer.
std::unique_ptr<ui::DelegatedFrameHostAndroid> delegated_frame_host_; std::unique_ptr<ui::DelegatedFrameHostAndroid> delegated_frame_host_;
......
...@@ -41,6 +41,7 @@ class UI_ANDROID_EXPORT DelegatedFrameHostAndroid ...@@ -41,6 +41,7 @@ class UI_ANDROID_EXPORT DelegatedFrameHostAndroid
public: public:
class Client { class Client {
public: public:
virtual ~Client() {}
virtual void SetBeginFrameSource( virtual void SetBeginFrameSource(
viz::BeginFrameSource* begin_frame_source) = 0; viz::BeginFrameSource* begin_frame_source) = 0;
virtual void DidPresentCompositorFrame( virtual void DidPresentCompositorFrame(
......
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