mirror of
https://bitbucket.org/chromiumembedded/cef
synced 2025-06-05 21:39:12 +02:00
Fix OSR scrolling by passing our compositor to the fling scheduler (fixes issue #2745)
This commit is contained in:
committed by
Marshall Greenblatt
parent
c4284b2938
commit
49786ccc34
@@ -229,6 +229,11 @@ CefRenderWidgetHostViewOSR::CefRenderWidgetHostViewOSR(
|
|||||||
compositor_->SetRootLayer(root_layer_.get());
|
compositor_->SetRootLayer(root_layer_.get());
|
||||||
compositor_->AddChildFrameSink(GetFrameSinkId());
|
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())
|
if (browser_impl_.get())
|
||||||
ResizeRootLayer(false);
|
ResizeRootLayer(false);
|
||||||
|
|
||||||
|
@@ -458,5 +458,11 @@ patches = [
|
|||||||
# message loop.
|
# message loop.
|
||||||
# https://bitbucket.org/chromiumembedded/cef/issues/2798
|
# https://bitbucket.org/chromiumembedded/cef/issues/2798
|
||||||
'name': 'content_app_shutdown_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',
|
||||||
|
},
|
||||||
]
|
]
|
||||||
|
70
patch/patches/osr_fling_2745.patch
Normal file
70
patch/patches/osr_fling_2745.patch
Normal file
@@ -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
|
Reference in New Issue
Block a user