diff options
| author | 2019-11-11 18:39:53 -0800 | |
|---|---|---|
| committer | 2019-11-18 12:41:42 -0800 | |
| commit | b69e076883fb1f11466dabddc7053b213fde84b5 (patch) | |
| tree | 3dd827f49de9135d43d96bb842e604b7ddf48115 /services/surfaceflinger/BufferLayer.cpp | |
| parent | 871023e652a6b24714291dec6da86d883c30bd6c (diff) | |
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
Diffstat (limited to 'services/surfaceflinger/BufferLayer.cpp')
| -rw-r--r-- | services/surfaceflinger/BufferLayer.cpp | 11 |
1 files changed, 10 insertions, 1 deletions
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>& displayId, +bool BufferLayer::onPostComposition(sp<const DisplayDevice> displayDevice, const std::shared_ptr<FenceTime>& glDoneFence, const std::shared_ptr<FenceTime>& presentFence, const CompositorTiming& compositorTiming) { @@ -308,6 +308,14 @@ bool BufferLayer::onPostComposition(const std::optional<DisplayId>& 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<FenceTime> frameReadyFence = mBufferInfo.mFenceTime; if (frameReadyFence->isValid()) { mFrameTracker.setFrameReadyFence(std::move(frameReadyFence)); @@ -317,6 +325,7 @@ bool BufferLayer::onPostComposition(const std::optional<DisplayId>& displayId, mFrameTracker.setFrameReadyTime(desiredPresentTime); } + const auto displayId = displayDevice->getId(); if (presentFence->isValid()) { mFlinger->mTimeStats->setPresentFence(layerId, mCurrentFrameNumber, presentFence); mFlinger->mFrameTracer->traceFence(layerId, getCurrentBufferId(), mCurrentFrameNumber, |