提交 e9121df3 编写于 作者: C Chinmay Garde 提交者: GitHub

Make the animator host an implicit fallback VSync provider in case platforms...

Make the animator host an implicit fallback VSync provider in case platforms cant provide their own. (#2953)
上级 dd3d0cd4
......@@ -4,8 +4,22 @@
import("//mojo/public/tools/bindings/mojom.gni")
source_set("vsync_lib_fallback") {
sources = [
"fallback/vsync_provider_fallback_impl.h",
"fallback/vsync_provider_fallback_impl.cc",
]
deps = [
"//base:base",
"//mojo/public/cpp/application",
"//mojo/public/cpp/bindings:utility",
"//mojo/services/vsync/interfaces",
]
}
group("vsync") {
deps = [ ":vsync_lib" ]
deps = [ ":vsync_lib", ":vsync_lib_fallback" ]
}
if (is_android) {
......@@ -54,18 +68,7 @@ if (is_android) {
]
}
} else {
# Fallback VSync (avoid if at all possible)
source_set("vsync_lib") {
sources = [
"fallback/vsync_provider_fallback_impl.h",
"fallback/vsync_provider_fallback_impl.cc",
]
deps = [
"//base:base",
"//mojo/public/cpp/application",
"//mojo/public/cpp/bindings:utility",
"//mojo/services/vsync/interfaces",
]
group("vsync_lib") {
# Empty, will use fallbacks by default.
}
}
......@@ -46,9 +46,8 @@ source_set("common") {
]
public_deps = [
":generate_sky_embedder_diagnostic_server_resources_cc",
"//base:i18n",
"//base",
"//base:i18n",
"//build/config/sanitizers:deps",
"//dart/runtime:libdart",
"//flutter/assets",
......@@ -57,16 +56,17 @@ source_set("common") {
"//flutter/glue",
"//flutter/lib/ui",
"//flutter/runtime",
"//flutter/synchronization",
"//flutter/services/editing:interfaces",
"//flutter/services/engine:interfaces",
"//flutter/services/platform",
"//flutter/services/pointer:interfaces",
"//flutter/services/semantics:interfaces",
"//flutter/services/vsync:vsync_lib_fallback",
"//flutter/skia",
"//flutter/sky/engine",
"//flutter/sky/engine/core:core",
"//flutter/sky/engine/wtf",
"//flutter/synchronization",
"//lib/ftl",
"//lib/tonic",
"//mojo/common",
......@@ -79,6 +79,7 @@ source_set("common") {
"//mojo/services/gfx/composition/interfaces",
"//mojo/services/navigation/interfaces",
"//mojo/services/vsync/interfaces",
":generate_sky_embedder_diagnostic_server_resources_cc",
]
}
......
......@@ -18,7 +18,11 @@ Animator::Animator(Rasterizer* rasterizer, Engine* engine)
layer_tree_pipeline_(ftl::MakeRefCounted<LayerTreePipeline>(3)),
pending_frame_semaphore_(1),
paused_(false),
weak_factory_(this) {}
weak_factory_(this) {
new services::vsync::VsyncProviderFallbackImpl(
mojo::InterfaceRequest<::vsync::VSyncProvider>(
mojo::GetProxy(&fallback_vsync_provider_)));
}
Animator::~Animator() = default;
......@@ -96,7 +100,7 @@ void Animator::RequestFrame() {
DCHECK(weak->vsync_provider_)
<< "A VSync provider must be present to schedule a frame.";
weak->vsync_provider_->AwaitVSync(base::Bind(&Animator::BeginFrame, weak));
weak->AwaitVSync(base::Bind(&Animator::BeginFrame, weak));
});
}
......@@ -105,5 +109,18 @@ void Animator::set_vsync_provider(vsync::VSyncProviderPtr vsync_provider) {
RequestFrame();
}
void Animator::AwaitVSync(
const vsync::VSyncProvider::AwaitVSyncCallback& callback) {
// First, try the platform provided VSync provider.
if (vsync_provider_) {
vsync_provider_->AwaitVSync(callback);
return;
}
// Then, use the fallback provider if the platform cannot reliably supply
// VSync signals to us.
return fallback_vsync_provider_->AwaitVSync(callback);
}
} // namespace shell
} // namespace sky
......@@ -13,6 +13,7 @@
#include "lib/ftl/memory/ref_ptr.h"
#include "lib/ftl/time/time_point.h"
#include "mojo/services/vsync/interfaces/vsync.mojom.h"
#include "flutter/services/vsync/fallback/vsync_provider_fallback_impl.h"
namespace sky {
namespace shell {
......@@ -38,9 +39,12 @@ class Animator {
void BeginFrame(int64_t time_stamp);
void AwaitVSync(const vsync::VSyncProvider::AwaitVSyncCallback& callback);
Rasterizer* rasterizer_;
Engine* engine_;
vsync::VSyncProviderPtr vsync_provider_;
vsync::VSyncProviderPtr fallback_vsync_provider_;
ftl::RefPtr<LayerTreePipeline> layer_tree_pipeline_;
flutter::Semaphore pending_frame_semaphore_;
std::unique_ptr<flow::LayerTree> renderable_tree_;
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册