Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit e4a52711 authored by Jorim Jaggi's avatar Jorim Jaggi
Browse files

Ensure reportFrameMetrics not being called on deleted instance

Since onSurfaceStatsAvailable gets called on binder-thread, we
need to ensure that instance doesn't get released while
onSurfaceStatsAvailable is calling reportFrameMetrics.

Test: Boots
Bug: 188934435
Change-Id: Iafe582d6fe4087a3c4274ee39a2803abaa363fd2
parent 63a50896
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -680,6 +680,7 @@ void CanvasContext::onSurfaceStatsAvailable(void* context, ASurfaceControl* cont
        frameInfo->set(FrameInfoIndex::FrameCompleted) = std::max(gpuCompleteTime,
                frameInfo->get(FrameInfoIndex::SwapBuffersCompleted));
        frameInfo->set(FrameInfoIndex::GpuCompleted) = gpuCompleteTime;
        std::lock_guard(instance->mFrameMetricsReporterMutex);
        instance->mJankTracker.finishFrame(*frameInfo, instance->mFrameMetricsReporter);
    }
}
+2 −0
Original line number Diff line number Diff line
@@ -170,6 +170,7 @@ public:
        if (mFrameMetricsReporter.get() != nullptr) {
            mFrameMetricsReporter->removeObserver(observer);
            if (!mFrameMetricsReporter->hasObservers()) {
                std::lock_guard lock(mFrameMetricsReporterMutex);
                mFrameMetricsReporter.reset(nullptr);
            }
        }
@@ -295,6 +296,7 @@ private:
    JankTracker mJankTracker;
    FrameInfoVisualizer mProfiler;
    std::unique_ptr<FrameMetricsReporter> mFrameMetricsReporter;
    std::mutex mFrameMetricsReporterMutex;

    std::set<RenderNode*> mPrefetchedLayers;