[TimeStats] Track RenderEngine time per frame.
Bug: 144037240
Test: dumpsys SurfaceFlinger --timestats -dump
Change-Id: I7a4dd680ed08e3a7a05e3fd08d5e133e9d394193
diff --git a/services/surfaceflinger/CompositionEngine/src/CompositionEngine.cpp b/services/surfaceflinger/CompositionEngine/src/CompositionEngine.cpp
index be8646c..5eabecd 100644
--- a/services/surfaceflinger/CompositionEngine/src/CompositionEngine.cpp
+++ b/services/surfaceflinger/CompositionEngine/src/CompositionEngine.cpp
@@ -64,6 +64,14 @@
mRenderEngine = std::move(renderEngine);
}
+TimeStats& CompositionEngine::getTimeStats() const {
+ return *mTimeStats.get();
+}
+
+void CompositionEngine::setTimeStats(const std::shared_ptr<TimeStats>& timeStats) {
+ mTimeStats = timeStats;
+}
+
bool CompositionEngine::needsAnotherUpdate() const {
return mNeedsAnotherUpdate;
}
diff --git a/services/surfaceflinger/CompositionEngine/src/Output.cpp b/services/surfaceflinger/CompositionEngine/src/Output.cpp
index 6877f8b..5f752a0 100644
--- a/services/surfaceflinger/CompositionEngine/src/Output.cpp
+++ b/services/surfaceflinger/CompositionEngine/src/Output.cpp
@@ -838,9 +838,18 @@
setExpensiveRenderingExpected(true);
}
+ const nsecs_t renderEngineStart = systemTime();
renderEngine.drawLayers(clientCompositionDisplay, clientCompositionLayers,
buf->getNativeBuffer(), /*useFramebufferCache=*/true, std::move(fd),
&readyFence);
+ auto& timeStats = getCompositionEngine().getTimeStats();
+ if (readyFence.get() < 0) {
+ timeStats.recordRenderEngineDuration(renderEngineStart, systemTime());
+ } else {
+ timeStats.recordRenderEngineDuration(renderEngineStart,
+ std::make_shared<FenceTime>(
+ new Fence(dup(readyFence.get()))));
+ }
if (expensiveRenderingExpected) {
setExpensiveRenderingExpected(false);