Loading cmds/servicemanager/ServiceManager.cpp +17 −0 Original line number Diff line number Diff line Loading @@ -623,4 +623,21 @@ Status ServiceManager::tryUnregisterService(const std::string& name, const sp<IB return Status::ok(); } Status ServiceManager::getServiceDebugInfo(std::vector<ServiceDebugInfo>* outReturn) { if (!mAccess->canList(mAccess->getCallingContext())) { return Status::fromExceptionCode(Status::EX_SECURITY); } outReturn->reserve(mNameToService.size()); for (auto const& [name, service] : mNameToService) { ServiceDebugInfo info; info.name = name; info.debugPid = service.debugPid; outReturn->push_back(std::move(info)); } return Status::ok(); } } // namespace android cmds/servicemanager/ServiceManager.h +2 −0 Original line number Diff line number Diff line Loading @@ -26,6 +26,7 @@ namespace android { using os::IClientCallback; using os::IServiceCallback; using os::ServiceDebugInfo; class ServiceManager : public os::BnServiceManager, public IBinder::DeathRecipient { public: Loading @@ -48,6 +49,7 @@ public: binder::Status registerClientCallback(const std::string& name, const sp<IBinder>& service, const sp<IClientCallback>& cb) override; binder::Status tryUnregisterService(const std::string& name, const sp<IBinder>& binder) override; binder::Status getServiceDebugInfo(std::vector<ServiceDebugInfo>* outReturn) override; void binderDied(const wp<IBinder>& who) override; void handleClientCallbacks(); Loading libs/binder/Android.bp +1 −0 Original line number Diff line number Diff line Loading @@ -214,6 +214,7 @@ filegroup { "aidl/android/os/IClientCallback.aidl", "aidl/android/os/IServiceCallback.aidl", "aidl/android/os/IServiceManager.aidl", "aidl/android/os/ServiceDebugInfo.aidl", ], path: "aidl", } Loading libs/binder/aidl/android/os/IServiceManager.aidl +6 −0 Original line number Diff line number Diff line Loading @@ -18,6 +18,7 @@ package android.os; import android.os.IClientCallback; import android.os.IServiceCallback; import android.os.ServiceDebugInfo; /** * Basic interface for finding and publishing system services. Loading Loading @@ -116,4 +117,9 @@ interface IServiceManager { * Attempt to unregister and remove a service. Will fail if the service is still in use. */ void tryUnregisterService(@utf8InCpp String name, IBinder service); /** * Get debug information for all currently registered services. */ ServiceDebugInfo[] getServiceDebugInfo(); } libs/binder/aidl/android/os/ServiceDebugInfo.aidl 0 → 100644 +32 −0 Original line number Diff line number Diff line /* * Copyright (C) 2021 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package android.os; /** * Debug information associated with a registered service * @hide */ parcelable ServiceDebugInfo { /** * Service name (see IServiceManager.addService/checkService/getService) */ @utf8InCpp String name; /** * PID of service at the time of registration (may no longer be valid). */ int debugPid; } Loading
cmds/servicemanager/ServiceManager.cpp +17 −0 Original line number Diff line number Diff line Loading @@ -623,4 +623,21 @@ Status ServiceManager::tryUnregisterService(const std::string& name, const sp<IB return Status::ok(); } Status ServiceManager::getServiceDebugInfo(std::vector<ServiceDebugInfo>* outReturn) { if (!mAccess->canList(mAccess->getCallingContext())) { return Status::fromExceptionCode(Status::EX_SECURITY); } outReturn->reserve(mNameToService.size()); for (auto const& [name, service] : mNameToService) { ServiceDebugInfo info; info.name = name; info.debugPid = service.debugPid; outReturn->push_back(std::move(info)); } return Status::ok(); } } // namespace android
cmds/servicemanager/ServiceManager.h +2 −0 Original line number Diff line number Diff line Loading @@ -26,6 +26,7 @@ namespace android { using os::IClientCallback; using os::IServiceCallback; using os::ServiceDebugInfo; class ServiceManager : public os::BnServiceManager, public IBinder::DeathRecipient { public: Loading @@ -48,6 +49,7 @@ public: binder::Status registerClientCallback(const std::string& name, const sp<IBinder>& service, const sp<IClientCallback>& cb) override; binder::Status tryUnregisterService(const std::string& name, const sp<IBinder>& binder) override; binder::Status getServiceDebugInfo(std::vector<ServiceDebugInfo>* outReturn) override; void binderDied(const wp<IBinder>& who) override; void handleClientCallbacks(); Loading
libs/binder/Android.bp +1 −0 Original line number Diff line number Diff line Loading @@ -214,6 +214,7 @@ filegroup { "aidl/android/os/IClientCallback.aidl", "aidl/android/os/IServiceCallback.aidl", "aidl/android/os/IServiceManager.aidl", "aidl/android/os/ServiceDebugInfo.aidl", ], path: "aidl", } Loading
libs/binder/aidl/android/os/IServiceManager.aidl +6 −0 Original line number Diff line number Diff line Loading @@ -18,6 +18,7 @@ package android.os; import android.os.IClientCallback; import android.os.IServiceCallback; import android.os.ServiceDebugInfo; /** * Basic interface for finding and publishing system services. Loading Loading @@ -116,4 +117,9 @@ interface IServiceManager { * Attempt to unregister and remove a service. Will fail if the service is still in use. */ void tryUnregisterService(@utf8InCpp String name, IBinder service); /** * Get debug information for all currently registered services. */ ServiceDebugInfo[] getServiceDebugInfo(); }
libs/binder/aidl/android/os/ServiceDebugInfo.aidl 0 → 100644 +32 −0 Original line number Diff line number Diff line /* * Copyright (C) 2021 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package android.os; /** * Debug information associated with a registered service * @hide */ parcelable ServiceDebugInfo { /** * Service name (see IServiceManager.addService/checkService/getService) */ @utf8InCpp String name; /** * PID of service at the time of registration (may no longer be valid). */ int debugPid; }