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/SurfaceFlinger.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/SurfaceFlinger.cpp')
| -rw-r--r-- | services/surfaceflinger/SurfaceFlinger.cpp | 25 |
1 files changed, 24 insertions, 1 deletions
diff --git a/services/surfaceflinger/SurfaceFlinger.cpp b/services/surfaceflinger/SurfaceFlinger.cpp index f0ccc14af4..e0ffb6b23b 100644 --- a/services/surfaceflinger/SurfaceFlinger.cpp +++ b/services/surfaceflinger/SurfaceFlinger.cpp @@ -909,6 +909,29 @@ void SurfaceFlinger::init() FTL_FAKE_GUARD(kMainThreadContext) { ALOGE("Run StartPropertySetThread failed!"); } + if (mTransactionTracing) { + TransactionTraceWriter::getInstance().setWriterFunction([&](const std::string& prefix, + bool overwrite) { + auto writeFn = [&]() { + const std::string filename = + TransactionTracing::DIR_NAME + prefix + TransactionTracing::FILE_NAME; + if (overwrite) { + std::ifstream file(filename); + if (file.is_open()) { + return; + } + } + mTransactionTracing->flush(); + mTransactionTracing->writeToFile(filename); + }; + if (std::this_thread::get_id() == mMainThreadId) { + writeFn(); + } else { + mScheduler->schedule(writeFn).get(); + } + }); + } + ALOGV("Done initializing"); } @@ -6728,7 +6751,7 @@ status_t SurfaceFlinger::onTransact(uint32_t code, const Parcel& data, Parcel* r mTransactionTracing->setBufferSize( TransactionTracing::ACTIVE_TRACING_BUFFER_SIZE); } else { - mTransactionTracing->writeToFile(); + TransactionTraceWriter::getInstance().invoke("", /* overwrite= */ true); mTransactionTracing->setBufferSize( TransactionTracing::CONTINUOUS_TRACING_BUFFER_SIZE); } |