提交 8e1fc821 编写于 作者: F Florian Loitsch

Add 'FlushRealTimeEvents' to window.

上级 42deccf6
......@@ -121,6 +121,9 @@ class Window {
/// [Scene]. For optimal performance, this should only be called in response
/// to the [onBeginFrame] callback being invoked.
void render(Scene scene) native "Window_render";
/// Flushes pending real-time events, executing their callbacks.
void flushRealTimeEvents() native "Scheduler_FlushRealTimeEvents";
}
/// The [Window] singleton.
......
......@@ -29,6 +29,11 @@ void Render(Dart_NativeArguments args) {
DOMDartState::Current()->window()->client()->Render(scene);
}
void FlushRealTimeEvents(Dart_NativeArguments args) {
DOMDartState::Current()->window()->client()->FlushRealTimeEvents();
}
} // namespace
WindowClient::~WindowClient() {
......@@ -140,6 +145,7 @@ void Window::RegisterNatives(DartLibraryNatives* natives) {
natives->Register({
{ "Window_scheduleFrame", ScheduleFrame, 1, true },
{ "Window_render", Render, 2, true },
{ "Scheduler_FlushRealTimeEvents", FlushRealTimeEvents, 1, true},
});
}
......
......@@ -18,6 +18,7 @@ class DartLibraryNatives;
class WindowClient {
public:
virtual void ScheduleFrame() = 0;
virtual void FlushRealTimeEvents() = 0;
virtual void Render(Scene* scene) = 0;
protected:
......
......@@ -37,6 +37,9 @@ void SkyHeadless::RunFromSnapshotBuffer(const uint8_t* buffer, size_t size) {
void SkyHeadless::ScheduleFrame() {
}
void SkyHeadless::FlushRealTimeEvents() {
}
void SkyHeadless::Render(Scene* scene) {
}
......
......@@ -37,6 +37,7 @@ class SkyHeadless : public WindowClient {
private:
void ScheduleFrame() override;
void FlushRealTimeEvents() override;
void Render(Scene* scene) override;
std::unique_ptr<DartController> dart_controller_;
......
......@@ -100,6 +100,10 @@ void SkyView::ScheduleFrame() {
client_->ScheduleFrame();
}
void SkyView::FlushRealTimeEvents() {
client_->FlushRealTimeEvents();
}
void SkyView::Render(Scene* scene) {
layer_tree_ = scene->takeLayerTree();
}
......
......@@ -62,6 +62,7 @@ class SkyView : public WindowClient {
Window* GetWindow();
void ScheduleFrame() override;
void FlushRealTimeEvents() override;
void Render(Scene* scene) override;
SkyViewClient* client_;
......
......@@ -16,6 +16,7 @@ namespace blink {
class SkyViewClient {
public:
virtual void ScheduleFrame() = 0;
virtual void FlushRealTimeEvents() = 0;
virtual void Render(std::unique_ptr<sky::compositor::LayerTree> layer_tree) = 0;
virtual void DidCreateIsolate(Dart_Isolate isolate) = 0;
......
......@@ -50,6 +50,14 @@ void Animator::RequestFrame() {
}
}
void Animator::FlushRealTimeEvents() {
if (outstanding_requests_ > 0)
rasterizer_.WaitForIncomingResponseWithTimeout(0);
if (engine_requested_frame_ && vsync_provider_)
vsync_provider_.WaitForIncomingResponseWithTimeout(0);
}
void Animator::Stop() {
paused_ = true;
}
......
......@@ -19,6 +19,7 @@ class Animator {
~Animator();
void RequestFrame();
void FlushRealTimeEvents();
void Start();
void Stop();
......
......@@ -280,6 +280,10 @@ void Engine::ScheduleFrame() {
animator_->RequestFrame();
}
void Engine::FlushRealTimeEvents() {
animator_->FlushRealTimeEvents();
}
void Engine::Render(std::unique_ptr<compositor::LayerTree> layer_tree) {
}
......
......@@ -75,6 +75,7 @@ class Engine : public UIDelegate,
// SkyViewClient methods:
void ScheduleFrame() override;
void FlushRealTimeEvents() override;
void Render(std::unique_ptr<compositor::LayerTree> layer_tree) override;
void DidCreateIsolate(Dart_Isolate isolate) override;
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册