From a0a8eb20f206a7a139bd0c0a5111dcb269c520db Mon Sep 17 00:00:00 2001 From: Jayant Chowdhary Date: Fri, 20 May 2022 03:30:09 +0000 Subject: Add AIDL HAL stack traces to bug-reports Bug: 233130219 Test: adb bugreport; check that camera provider has stack traces in VM traces Ignore-AOSP-First: I will cherry-pick after the topic is submitted. Merged-In: I1e087600ac764191a91eb9b1f11e51f21bce19e3 Change-Id: I1e087600ac764191a91eb9b1f11e51f21bce19e3 Signed-off-by: Jayant Chowdhary (cherry picked from commit ddd3da0d8f092a24d2a8a9a1e211d60292b7da35) --- libs/binder/IServiceManager.cpp | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) (limited to 'libs/binder/IServiceManager.cpp') diff --git a/libs/binder/IServiceManager.cpp b/libs/binder/IServiceManager.cpp index ea2f8d2274..fd2d86857e 100644 --- a/libs/binder/IServiceManager.cpp +++ b/libs/binder/IServiceManager.cpp @@ -99,6 +99,8 @@ public: status_t unregisterForNotifications(const String16& service, const sp& cb) override; + + std::vector getServiceDebugInfo() override; // for legacy ABI const String16& getInterfaceDescriptor() const override { return mTheRealServiceManager->getInterfaceDescriptor(); @@ -543,6 +545,23 @@ status_t ServiceManagerShim::unregisterForNotifications(const String16& name, return OK; } +std::vector ServiceManagerShim::getServiceDebugInfo() { + std::vector serviceDebugInfos; + std::vector ret; + if (Status status = mTheRealServiceManager->getServiceDebugInfo(&serviceDebugInfos); + !status.isOk()) { + ALOGW("%s Failed to get ServiceDebugInfo", __FUNCTION__); + return ret; + } + for (const auto& serviceDebugInfo : serviceDebugInfos) { + IServiceManager::ServiceDebugInfo retInfo; + retInfo.pid = serviceDebugInfo.debugPid; + retInfo.name = serviceDebugInfo.name; + ret.emplace_back(retInfo); + } + return ret; +} + #ifndef __ANDROID__ // ServiceManagerShim for host. Implements the old libbinder android::IServiceManager API. // The internal implementation of the AIDL interface android::os::IServiceManager calls into -- cgit v1.2.3-59-g8ed1b