@@ -154,7 +154,7 @@ Layer::Layer(const surfaceflinger::LayerCreationArgs& args)
154154 mDrawingState .metadata = args.metadata ;
155155 mDrawingState .frameTimelineInfo = {};
156156 mDrawingState .postTime = -1 ;
157- mFrameTracker .setDisplayRefreshPeriod (
157+ mDeprecatedFrameTracker .setDisplayRefreshPeriod (
158158 args.flinger ->mScheduler ->getPacesetterVsyncPeriod ().ns ());
159159
160160 mOwnerUid = args.ownerUid ;
@@ -472,6 +472,9 @@ std::shared_ptr<frametimeline::SurfaceFrame> Layer::createSurfaceFrameForTransac
472472 getSequence (), mName ,
473473 mTransactionName ,
474474 /* isBuffer*/ false , gameMode);
475+ // Buffer hasn't yet been latched, so use mDrawingState
476+ surfaceFrame->setDesiredPresentTime (mDrawingState .desiredPresentTime );
477+
475478 surfaceFrame->setActualStartTime (info.startTimeNanos );
476479 // For Transactions, the post time is considered to be both queue and acquire fence time.
477480 surfaceFrame->setActualQueueTime (postTime);
@@ -490,6 +493,8 @@ std::shared_ptr<frametimeline::SurfaceFrame> Layer::createSurfaceFrameForBuffer(
490493 mFlinger ->mFrameTimeline ->createSurfaceFrameForToken (info, mOwnerPid , mOwnerUid ,
491494 getSequence (), mName , debugName,
492495 /* isBuffer*/ true , gameMode);
496+ // Buffer hasn't yet been latched, so use mDrawingState
497+ surfaceFrame->setDesiredPresentTime (mDrawingState .desiredPresentTime );
493498 surfaceFrame->setActualStartTime (info.startTimeNanos );
494499 // For buffers, acquire fence time will set during latch.
495500 surfaceFrame->setActualQueueTime (queueTime);
@@ -514,6 +519,8 @@ void Layer::setFrameTimelineVsyncForSkippedFrames(const FrameTimelineInfo& info,
514519 mOwnerPid , mOwnerUid ,
515520 getSequence (), mName , debugName,
516521 /* isBuffer*/ false , gameMode);
522+ // Buffer hasn't yet been latched, so use mDrawingState
523+ surfaceFrame->setDesiredPresentTime (mDrawingState .desiredPresentTime );
517524 surfaceFrame->setActualStartTime (skippedFrameTimelineInfo.skippedFrameStartTimeNanos );
518525 // For Transactions, the post time is considered to be both queue and acquire fence time.
519526 surfaceFrame->setActualQueueTime (postTime);
@@ -605,15 +612,42 @@ void Layer::miniDump(std::string& result, const frontend::LayerSnapshot& snapsho
605612}
606613
607614void Layer::dumpFrameStats (std::string& result) const {
608- mFrameTracker .dumpStats (result);
615+ if (FlagManager::getInstance ().deprecate_frame_tracker ()) {
616+ FrameStats fs = FrameStats ();
617+ getFrameStats (&fs);
618+ for (auto desired = fs.desiredPresentTimesNano .begin (),
619+ actual = fs.actualPresentTimesNano .begin (),
620+ ready = fs.frameReadyTimesNano .begin ();
621+ desired != fs.desiredPresentTimesNano .end () &&
622+ actual != fs.actualPresentTimesNano .end () && ready != fs.frameReadyTimesNano .end ();
623+ ++desired, ++actual, ++ready) {
624+ result.append (std::format (" {}\t {}\t {}\n " , *desired, *actual, *ready));
625+ }
626+
627+ result.push_back (' \n ' );
628+ } else {
629+ mDeprecatedFrameTracker .dumpStats (result);
630+ }
609631}
610632
611633void Layer::clearFrameStats () {
612- mFrameTracker .clearStats ();
634+ if (FlagManager::getInstance ().deprecate_frame_tracker ()) {
635+ mFrameStatsHistorySize = 0 ;
636+ } else {
637+ mDeprecatedFrameTracker .clearStats ();
638+ }
613639}
614640
615641void Layer::getFrameStats (FrameStats* outStats) const {
616- mFrameTracker .getStats (outStats);
642+ if (FlagManager::getInstance ().deprecate_frame_tracker ()) {
643+ if (auto ftl = getTimeline ()) {
644+ float fps = ftl->get ().computeFps ({getSequence ()});
645+ ftl->get ().generateFrameStats (getSequence (), mFrameStatsHistorySize , outStats);
646+ outStats->refreshPeriodNano = Fps::fromValue (fps).getPeriodNsecs ();
647+ }
648+ } else {
649+ mDeprecatedFrameTracker .getStats (outStats);
650+ }
617651}
618652
619653void Layer::onDisconnect () {
@@ -1348,9 +1382,9 @@ void Layer::onCompositionPresented(const DisplayDevice* display,
13481382 handle->compositorTiming = compositorTiming;
13491383 }
13501384
1351- // Update mFrameTracker .
1385+ // Update mDeprecatedFrameTracker .
13521386 nsecs_t desiredPresentTime = mBufferInfo .mDesiredPresentTime ;
1353- mFrameTracker .setDesiredPresentTime (desiredPresentTime);
1387+ mDeprecatedFrameTracker .setDesiredPresentTime (desiredPresentTime);
13541388
13551389 const int32_t layerId = getSequence ();
13561390 mFlinger ->mTimeStats ->setDesiredTime (layerId, mCurrentFrameNumber , desiredPresentTime);
@@ -1370,15 +1404,15 @@ void Layer::onCompositionPresented(const DisplayDevice* display,
13701404 }
13711405 }
13721406
1407+ // The SurfaceFrame's AcquireFence is the same as this.
13731408 std::shared_ptr<FenceTime> frameReadyFence = mBufferInfo .mFenceTime ;
13741409 if (frameReadyFence->isValid ()) {
1375- mFrameTracker .setFrameReadyFence (std::move (frameReadyFence));
1410+ mDeprecatedFrameTracker .setFrameReadyFence (std::move (frameReadyFence));
13761411 } else {
13771412 // There was no fence for this frame, so assume that it was ready
13781413 // to be presented at the desired present time.
1379- mFrameTracker .setFrameReadyTime (desiredPresentTime);
1414+ mDeprecatedFrameTracker .setFrameReadyTime (desiredPresentTime);
13801415 }
1381-
13821416 if (display) {
13831417 const auto activeMode = display->refreshRateSelector ().getActiveMode ();
13841418 const Fps refreshRate = activeMode.fps ;
@@ -1393,7 +1427,7 @@ void Layer::onCompositionPresented(const DisplayDevice* display,
13931427 mFlinger ->mFrameTracer ->traceFence (layerId, getCurrentBufferId (), mCurrentFrameNumber ,
13941428 presentFence,
13951429 FrameTracer::FrameEvent::PRESENT_FENCE);
1396- mFrameTracker .setActualPresentFence (std::shared_ptr<FenceTime>(presentFence));
1430+ mDeprecatedFrameTracker .setActualPresentFence (std::shared_ptr<FenceTime>(presentFence));
13971431 } else if (const auto displayId = PhysicalDisplayId::tryCast (display->getId ());
13981432 displayId && mFlinger ->getHwComposer ().isConnected (*displayId)) {
13991433 // The HWC doesn't support present fences, so use the present timestamp instead.
@@ -1414,11 +1448,12 @@ void Layer::onCompositionPresented(const DisplayDevice* display,
14141448 mFlinger ->mFrameTracer ->traceTimestamp (layerId, getCurrentBufferId (),
14151449 mCurrentFrameNumber , actualPresentTime,
14161450 FrameTracer::FrameEvent::PRESENT_FENCE);
1417- mFrameTracker .setActualPresentTime (actualPresentTime);
1451+ mDeprecatedFrameTracker .setActualPresentTime (actualPresentTime);
14181452 }
14191453 }
14201454
1421- mFrameTracker .advanceFrame ();
1455+ mFrameStatsHistorySize ++;
1456+ mDeprecatedFrameTracker .advanceFrame ();
14221457 mBufferInfo .mFrameLatencyNeeded = false ;
14231458}
14241459
0 commit comments