From 91bf54c436bed6031f6f2460f1ee8701fa6c1315 Mon Sep 17 00:00:00 2001 From: Nicolas Geoffray Date: Wed, 26 Jul 2023 14:40:02 +0100 Subject: Unwinder: use cached versions of dex_files_ and jit_debug_ if available. They may have already been set by eg AndroidLocalUnwinder::InternalUnwind. Test: perfetto trace doesn't show repeated dex file loads. Bug: 291133411 (cherry picked from https://android-review.googlesource.com/q/commit:8e2c60d01e0928275d30f320c3f83ac4f29b880c) Merged-In: I0f11f3e5d07b8b65d8c600a2984ebdac459920bd Change-Id: I0f11f3e5d07b8b65d8c600a2984ebdac459920bd --- libunwindstack/Unwinder.cpp | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/libunwindstack/Unwinder.cpp b/libunwindstack/Unwinder.cpp index 7304000..115a265 100644 --- a/libunwindstack/Unwinder.cpp +++ b/libunwindstack/Unwinder.cpp @@ -389,13 +389,17 @@ bool UnwinderFromPid::Init() { } } - jit_debug_ptr_ = CreateJitDebug(arch_, process_memory_); - jit_debug_ = jit_debug_ptr_.get(); - SetJitDebug(jit_debug_); + // jit_debug_ and dex_files_ may have already been set, for example in + // AndroidLocalUnwinder::InternalUnwind. + if (jit_debug_ == nullptr) { + jit_debug_ptr_ = CreateJitDebug(arch_, process_memory_); + SetJitDebug(jit_debug_ptr_.get()); + } #if defined(DEXFILE_SUPPORT) - dex_files_ptr_ = CreateDexFiles(arch_, process_memory_); - dex_files_ = dex_files_ptr_.get(); - SetDexFiles(dex_files_); + if (dex_files_ == nullptr) { + dex_files_ptr_ = CreateDexFiles(arch_, process_memory_); + SetDexFiles(dex_files_ptr_.get()); + } #endif return true; -- cgit v1.2.3