9 #include "flutter/fml/logging.h"
10 #include "flutter/fml/trace_event.h"
18 size_t max_frames_in_flight)
19 : frames_in_flight_sema_(
std::make_shared<fml::Semaphore>(
20 std::max<
std::size_t>(1u, max_frames_in_flight))),
21 context_(
std::move(context)) {
22 if (!context_ || !context_->IsValid()) {
37 TRACE_EVENT0(
"impeller",
"Renderer::Render");
42 if (!surface || !surface->IsValid()) {
46 RenderTarget render_target = surface->GetTargetRenderPassDescriptor();
48 if (render_callback && !render_callback(render_target)) {
52 if (!frames_in_flight_sema_->Wait()) {
56 const auto present_result = surface->Present();
58 frames_in_flight_sema_->Signal();
60 return present_result;