Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 76d39da8 authored by Steven Moreland's avatar Steven Moreland Committed by Automerger Merge Worker
Browse files

Merge "ServiceManager: support debug dump w/ PIDs" am: 2ac99ed5 am: 2f6d4bca

Original change: https://android-review.googlesource.com/c/platform/frameworks/native/+/1564316

MUST ONLY BE SUBMITTED BY AUTOMERGER

Change-Id: I98f09304047cab4851f19543a20754b1eb91c7f4
parents 1dba361c 2f6d4bca
Loading
Loading
Loading
Loading
+17 −0
Original line number Diff line number Diff line
@@ -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
+2 −0
Original line number Diff line number Diff line
@@ -26,6 +26,7 @@ namespace android {

using os::IClientCallback;
using os::IServiceCallback;
using os::ServiceDebugInfo;

class ServiceManager : public os::BnServiceManager, public IBinder::DeathRecipient {
public:
@@ -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();

+1 −0
Original line number Diff line number Diff line
@@ -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",
}
+6 −0
Original line number Diff line number Diff line
@@ -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.
@@ -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();
}
+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;
}