diff --git a/engine/src/flutter/impeller/renderer/BUILD.gn b/engine/src/flutter/impeller/renderer/BUILD.gn index fb3a6f7ef2f..be4fe29aa40 100644 --- a/engine/src/flutter/impeller/renderer/BUILD.gn +++ b/engine/src/flutter/impeller/renderer/BUILD.gn @@ -75,7 +75,7 @@ impeller_component("renderer") { "render_pass_descriptor.h", "render_pass_descriptor.cc", "renderer.h", - "renderer.mm", + "renderer.cc", "sampler.h", "sampler.cc", "sampler_descriptor.h", diff --git a/engine/src/flutter/impeller/renderer/renderer.mm b/engine/src/flutter/impeller/renderer/renderer.cc similarity index 89% rename from engine/src/flutter/impeller/renderer/renderer.mm rename to engine/src/flutter/impeller/renderer/renderer.cc index 461deb0c4cd..59c9be341e6 100644 --- a/engine/src/flutter/impeller/renderer/renderer.mm +++ b/engine/src/flutter/impeller/renderer/renderer.cc @@ -13,7 +13,8 @@ namespace impeller { constexpr size_t kMaxFramesInFlight = 3u; Renderer::Renderer(std::shared_ptr context) - : frames_in_flight_sema_(::dispatch_semaphore_create(kMaxFramesInFlight)), + : frames_in_flight_sema_( + std::make_shared(kMaxFramesInFlight)), context_(std::move(context)) { if (!context_->IsValid()) { return; @@ -58,11 +59,13 @@ bool Renderer::Render(const Surface& surface, return false; } - ::dispatch_semaphore_wait(frames_in_flight_sema_, DISPATCH_TIME_FOREVER); + if (!frames_in_flight_sema_->Wait()) { + return false; + } command_buffer->Commit( [sema = frames_in_flight_sema_](CommandBuffer::CommitResult result) { - ::dispatch_semaphore_signal(sema); + sema->Signal(); if (result != CommandBuffer::CommitResult::kCompleted) { FML_LOG(ERROR) << "Could not commit command buffer."; } diff --git a/engine/src/flutter/impeller/renderer/renderer.h b/engine/src/flutter/impeller/renderer/renderer.h index 529ccb3c78d..ebd3930aec6 100644 --- a/engine/src/flutter/impeller/renderer/renderer.h +++ b/engine/src/flutter/impeller/renderer/renderer.h @@ -10,6 +10,7 @@ #include #include "flutter/fml/macros.h" +#include "fml/synchronization/semaphore.h" #include "impeller/geometry/size.h" #include "impeller/renderer/context.h" @@ -34,7 +35,7 @@ class Renderer { std::shared_ptr GetContext() const; private: - dispatch_semaphore_t frames_in_flight_sema_ = nullptr; + std::shared_ptr frames_in_flight_sema_; std::shared_ptr context_; bool is_valid_ = false;