Merge "Ensure reportFrameMetrics not being called on deleted instance" into sc-dev

This commit is contained in:
Jorim Jaggi
2021-06-04 13:04:52 +00:00
committed by Android (Google) Code Review
2 changed files with 3 additions and 0 deletions

View File

@@ -680,6 +680,7 @@ void CanvasContext::onSurfaceStatsAvailable(void* context, ASurfaceControl* cont
frameInfo->set(FrameInfoIndex::FrameCompleted) = std::max(gpuCompleteTime, frameInfo->set(FrameInfoIndex::FrameCompleted) = std::max(gpuCompleteTime,
frameInfo->get(FrameInfoIndex::SwapBuffersCompleted)); frameInfo->get(FrameInfoIndex::SwapBuffersCompleted));
frameInfo->set(FrameInfoIndex::GpuCompleted) = gpuCompleteTime; frameInfo->set(FrameInfoIndex::GpuCompleted) = gpuCompleteTime;
std::lock_guard(instance->mFrameMetricsReporterMutex);
instance->mJankTracker.finishFrame(*frameInfo, instance->mFrameMetricsReporter); instance->mJankTracker.finishFrame(*frameInfo, instance->mFrameMetricsReporter);
} }
} }

View File

@@ -170,6 +170,7 @@ public:
if (mFrameMetricsReporter.get() != nullptr) { if (mFrameMetricsReporter.get() != nullptr) {
mFrameMetricsReporter->removeObserver(observer); mFrameMetricsReporter->removeObserver(observer);
if (!mFrameMetricsReporter->hasObservers()) { if (!mFrameMetricsReporter->hasObservers()) {
std::lock_guard lock(mFrameMetricsReporterMutex);
mFrameMetricsReporter.reset(nullptr); mFrameMetricsReporter.reset(nullptr);
} }
} }
@@ -295,6 +296,7 @@ private:
JankTracker mJankTracker; JankTracker mJankTracker;
FrameInfoVisualizer mProfiler; FrameInfoVisualizer mProfiler;
std::unique_ptr<FrameMetricsReporter> mFrameMetricsReporter; std::unique_ptr<FrameMetricsReporter> mFrameMetricsReporter;
std::mutex mFrameMetricsReporterMutex;
std::set<RenderNode*> mPrefetchedLayers; std::set<RenderNode*> mPrefetchedLayers;