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

Add 'FlushRealTimeEvents' to window.

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