Fix OSR scrolling by passing our compositor to the fling scheduler (fixes issue #2745)
This commit is contained in:
parent
c4284b2938
commit
49786ccc34
|
@ -229,6 +229,11 @@ CefRenderWidgetHostViewOSR::CefRenderWidgetHostViewOSR(
|
|||
compositor_->SetRootLayer(root_layer_.get());
|
||||
compositor_->AddChildFrameSink(GetFrameSinkId());
|
||||
|
||||
content::RenderWidgetHostImpl* render_widget_host_impl =
|
||||
content::RenderWidgetHostImpl::From(render_widget_host_);
|
||||
if (render_widget_host_impl)
|
||||
render_widget_host_impl->SetCompositorForFlingScheduler(compositor_.get());
|
||||
|
||||
if (browser_impl_.get())
|
||||
ResizeRootLayer(false);
|
||||
|
||||
|
|
|
@ -458,5 +458,11 @@ patches = [
|
|||
# message loop.
|
||||
# https://bitbucket.org/chromiumembedded/cef/issues/2798
|
||||
'name': 'content_app_shutdown_2798',
|
||||
}
|
||||
},
|
||||
{
|
||||
# Add RenderWidgetHostImpl::SetCompositorForFlingScheduler to fix fling
|
||||
# scrolling in OSR mode.
|
||||
# https://bitbucket.org/chromiumembedded/cef/issues/2745
|
||||
'name': 'osr_fling_2745',
|
||||
},
|
||||
]
|
||||
|
|
|
@ -0,0 +1,70 @@
|
|||
diff --git content/browser/renderer_host/input/fling_scheduler.cc content/browser/renderer_host/input/fling_scheduler.cc
|
||||
index cf220cb41b00..5ebff06e6031 100644
|
||||
--- content/browser/renderer_host/input/fling_scheduler.cc
|
||||
+++ content/browser/renderer_host/input/fling_scheduler.cc
|
||||
@@ -71,6 +71,9 @@ void FlingScheduler::ProgressFlingOnBeginFrameIfneeded(
|
||||
}
|
||||
|
||||
ui::Compositor* FlingScheduler::GetCompositor() {
|
||||
+ if (compositor_) {
|
||||
+ return compositor_;
|
||||
+ }
|
||||
#if defined(USE_AURA)
|
||||
if (host_->GetView() && host_->GetView()->GetNativeView() &&
|
||||
host_->GetView()->GetNativeView()->GetHost() &&
|
||||
diff --git content/browser/renderer_host/input/fling_scheduler_base.h content/browser/renderer_host/input/fling_scheduler_base.h
|
||||
index cc4b13a7b9c6..84f3b9ed7cf4 100644
|
||||
--- content/browser/renderer_host/input/fling_scheduler_base.h
|
||||
+++ content/browser/renderer_host/input/fling_scheduler_base.h
|
||||
@@ -7,12 +7,23 @@
|
||||
|
||||
#include "content/browser/renderer_host/input/fling_controller.h"
|
||||
|
||||
+namespace ui {
|
||||
+class Compositor;
|
||||
+}
|
||||
+
|
||||
namespace content {
|
||||
|
||||
class FlingSchedulerBase : public FlingControllerSchedulerClient {
|
||||
public:
|
||||
virtual void ProgressFlingOnBeginFrameIfneeded(
|
||||
base::TimeTicks current_time) = 0;
|
||||
+
|
||||
+ void SetCompositor(ui::Compositor* compositor) {
|
||||
+ compositor_ = compositor;
|
||||
+ }
|
||||
+
|
||||
+protected:
|
||||
+ ui::Compositor* compositor_ = nullptr;
|
||||
};
|
||||
|
||||
} // namespace content
|
||||
diff --git content/browser/renderer_host/render_widget_host_impl.cc content/browser/renderer_host/render_widget_host_impl.cc
|
||||
index cfa68bf03b99..02918742fd15 100644
|
||||
--- content/browser/renderer_host/render_widget_host_impl.cc
|
||||
+++ content/browser/renderer_host/render_widget_host_impl.cc
|
||||
@@ -2661,6 +2661,11 @@ void RenderWidgetHostImpl::SetNeedsBeginFrameForFlingProgress() {
|
||||
SetNeedsBeginFrame(true);
|
||||
}
|
||||
|
||||
+void RenderWidgetHostImpl::SetCompositorForFlingScheduler(ui::Compositor* compositor)
|
||||
+{
|
||||
+ fling_scheduler_->SetCompositor(compositor);
|
||||
+}
|
||||
+
|
||||
void RenderWidgetHostImpl::AddPendingUserActivation(
|
||||
const WebInputEvent& event) {
|
||||
if (base::FeatureList::IsEnabled(features::kBrowserVerifiedUserActivation) &&
|
||||
diff --git content/browser/renderer_host/render_widget_host_impl.h content/browser/renderer_host/render_widget_host_impl.h
|
||||
index a3f9a2d865cc..2d6bdc5b65c2 100644
|
||||
--- content/browser/renderer_host/render_widget_host_impl.h
|
||||
+++ content/browser/renderer_host/render_widget_host_impl.h
|
||||
@@ -714,6 +714,7 @@ class CONTENT_EXPORT RenderWidgetHostImpl
|
||||
void ProgressFlingIfNeeded(base::TimeTicks current_time);
|
||||
void StopFling();
|
||||
void SetNeedsBeginFrameForFlingProgress();
|
||||
+ void SetCompositorForFlingScheduler(ui::Compositor* compositor);
|
||||
|
||||
// The RenderWidgetHostImpl will keep showing the old page (for a while) after
|
||||
// navigation until the first frame of the new page arrives. This reduces
|
Loading…
Reference in New Issue