From d1f749836471e7ca43c357c8a34d2dfcb11e8e11 Mon Sep 17 00:00:00 2001 From: Vishnu Nair Date: Thu, 15 Jun 2023 20:16:51 -0700 Subject: [sf] write transaction trace to disk on error Flush always on transaction traces to disk when we detect errors like: - out of order buffer updates or cycles in the layer hierarchy so it easier to investigate issues from dogfood (ref bug b/272189296) Bug: 282110579, 238781169 Fixes: 277265947 Test: presubmit Change-Id: I22dbd7cd43d94763ac941f0c3871dc7e4ea8db8d --- services/surfaceflinger/Layer.cpp | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) (limited to 'services/surfaceflinger/Layer.cpp') diff --git a/services/surfaceflinger/Layer.cpp b/services/surfaceflinger/Layer.cpp index f627501c4f..fabcd6168c 100644 --- a/services/surfaceflinger/Layer.cpp +++ b/services/surfaceflinger/Layer.cpp @@ -3125,6 +3125,16 @@ bool Layer::setBuffer(std::shared_ptr& buffer, return true; } + if ((mDrawingState.producerId > bufferData.producerId) || + ((mDrawingState.producerId == bufferData.producerId) && + (mDrawingState.frameNumber > frameNumber))) { + ALOGE("Out of order buffers detected for %s producedId=%d frameNumber=%" PRIu64 + " -> producedId=%d frameNumber=%" PRIu64, + getDebugName(), mDrawingState.producerId, mDrawingState.frameNumber, + bufferData.producerId, frameNumber); + TransactionTraceWriter::getInstance().invoke("out_of_order_buffers_", /*overwrite=*/false); + } + mDrawingState.producerId = bufferData.producerId; mDrawingState.barrierProducerId = std::max(mDrawingState.producerId, mDrawingState.barrierProducerId); @@ -3132,7 +3142,6 @@ bool Layer::setBuffer(std::shared_ptr& buffer, mDrawingState.barrierFrameNumber = std::max(mDrawingState.frameNumber, mDrawingState.barrierFrameNumber); - // TODO(b/277265947) log and flush transaction trace when we detect out of order updates mDrawingState.releaseBufferListener = bufferData.releaseBufferListener; mDrawingState.buffer = std::move(buffer); mDrawingState.acquireFence = bufferData.flags.test(BufferData::BufferDataChange::fenceChanged) -- cgit v1.2.3-59-g8ed1b