From 50c1c871a879514384ba51649c05d4c7393954c3 Mon Sep 17 00:00:00 2001 From: Nick Fisher Date: Fri, 9 May 2025 11:20:21 +0800 Subject: [PATCH] return false from RenderTicker when frame skipped --- thermion_dart/native/src/RenderTicker.cpp | 20 +++++++++++++------- 1 file changed, 13 insertions(+), 7 deletions(-) diff --git a/thermion_dart/native/src/RenderTicker.cpp b/thermion_dart/native/src/RenderTicker.cpp index 58245263..471809c4 100644 --- a/thermion_dart/native/src/RenderTicker.cpp +++ b/thermion_dart/native/src/RenderTicker.cpp @@ -29,12 +29,11 @@ #include #include -#include "Log.hpp" - -#include "RenderTicker.hpp" - #include +#include "Log.hpp" +#include "RenderTicker.hpp" + namespace thermion { @@ -63,10 +62,10 @@ namespace thermion TRACE("Set %d views as renderable", numViews); } - void RenderTicker::render(uint64_t frameTimeInNanos) + bool RenderTicker::render(uint64_t frameTimeInNanos) { auto startTime = std::chrono::high_resolution_clock::now(); - + bool rendered = false; std::lock_guard lock(mMutex); for (auto animationManager : mAnimationManagers) { @@ -88,14 +87,20 @@ namespace thermion bool beginFrame = mRenderer->beginFrame(swapChain, frameTimeInNanos); if (beginFrame) { + rendered = true; + auto durationNs = std::chrono::duration_cast(std::chrono::high_resolution_clock::now() - mLastRender).count() / 1e6f; + TRACE("Beginning frame (%.3f ms since last endFrame())", durationNs); for (auto view : views) { mRenderer->render(view); } + mLastRender = std::chrono::high_resolution_clock::now(); } else { - Log("Skipping frame"); + auto durationNs = std::chrono::duration_cast(std::chrono::high_resolution_clock::now() - mLastRender).count() / 1e6f; + TRACE("Skipping frame (%.3f ms since last endFrame())", durationNs); } mRenderer->endFrame(); + #ifdef ENABLE_TRACING numRendered++; } else { @@ -114,6 +119,7 @@ namespace thermion float durationMs = durationNs / 1e6f; TRACE("Total render() time: %.3f ms", durationMs); + return rendered; } void RenderTicker::addAnimationManager(AnimationManager* animationManager) {