diff options
| author | 2023-06-20 20:26:52 +0000 | |
|---|---|---|
| committer | 2023-06-20 20:26:52 +0000 | |
| commit | 1fe13e148e9dab6e724c19e5ca36feaf53796997 (patch) | |
| tree | 2852fb92f3f28279497d1f495f8030d027a1b2dd /services/surfaceflinger/Layer.cpp | |
| parent | fa731a2188c0cf9a55e22b27d810c4ef673eb356 (diff) | |
| parent | d136af5b6fc7d457126753092791283ff7933aef (diff) | |
Merge "[sf] write transaction trace to disk on error" into udc-qpr-dev am: d136af5b6f
Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/native/+/23700730
Change-Id: I1ebbf8daf68ff5d691bd3e3014c38c05d2913171
Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
Diffstat (limited to 'services/surfaceflinger/Layer.cpp')
| -rw-r--r-- | services/surfaceflinger/Layer.cpp | 11 |
1 files changed, 10 insertions, 1 deletions
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<renderengine::ExternalTexture>& 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<renderengine::ExternalTexture>& 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) |