From b69e076883fb1f11466dabddc7053b213fde84b5 Mon Sep 17 00:00:00 2001 From: Adithya Srinivasan Date: Mon, 11 Nov 2019 18:39:53 -0800 Subject: Add trace event for fallback composition When the HWC rejects composition of any layer, it is returned to surfaceflinger and queued to the GPU for doing client composition. This event is important to track as it can show why the GPU is busy at that time. Test: Set fallback composition in the middle of a GAPID trace from the commandline Bug: 140236090 Change-Id: Id1cb71f301023743dc9fa6a1396f8a525b5de7bd --- services/surfaceflinger/BufferLayer.cpp | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) (limited to 'services/surfaceflinger/BufferLayer.cpp') diff --git a/services/surfaceflinger/BufferLayer.cpp b/services/surfaceflinger/BufferLayer.cpp index 31462569e2..94c4a81df2 100644 --- a/services/surfaceflinger/BufferLayer.cpp +++ b/services/surfaceflinger/BufferLayer.cpp @@ -286,7 +286,7 @@ bool BufferLayer::onPreComposition(nsecs_t refreshStartTime) { return hasReadyFrame(); } -bool BufferLayer::onPostComposition(const std::optional& displayId, +bool BufferLayer::onPostComposition(sp displayDevice, const std::shared_ptr& glDoneFence, const std::shared_ptr& presentFence, const CompositorTiming& compositorTiming) { @@ -308,6 +308,14 @@ bool BufferLayer::onPostComposition(const std::optional& displayId, const int32_t layerId = getSequence(); mFlinger->mTimeStats->setDesiredTime(layerId, mCurrentFrameNumber, desiredPresentTime); + const auto outputLayer = findOutputLayerForDisplay(displayDevice); + if (outputLayer && outputLayer->requiresClientComposition()) { + nsecs_t clientCompositionTimestamp = outputLayer->getState().clientCompositionTimestamp; + mFlinger->mFrameTracer->traceTimestamp(layerId, getCurrentBufferId(), mCurrentFrameNumber, + clientCompositionTimestamp, + FrameTracer::FrameEvent::FALLBACK_COMPOSITION); + } + std::shared_ptr frameReadyFence = mBufferInfo.mFenceTime; if (frameReadyFence->isValid()) { mFrameTracker.setFrameReadyFence(std::move(frameReadyFence)); @@ -317,6 +325,7 @@ bool BufferLayer::onPostComposition(const std::optional& displayId, mFrameTracker.setFrameReadyTime(desiredPresentTime); } + const auto displayId = displayDevice->getId(); if (presentFence->isValid()) { mFlinger->mTimeStats->setPresentFence(layerId, mCurrentFrameNumber, presentFence); mFlinger->mFrameTracer->traceFence(layerId, getCurrentBufferId(), mCurrentFrameNumber, -- cgit v1.2.3-59-g8ed1b