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

Commit 93787906 authored by Rocky Fang's avatar Rocky Fang Committed by Android (Google) Code Review
Browse files

Merge "Improve sensorservice dump" into main

parents f7521e32 8aa0980a
Loading
Loading
Loading
Loading
+25 −9
Original line number Diff line number Diff line
@@ -26,12 +26,17 @@ namespace android {

using util::ProtoOutputStream;

SensorService::SensorDirectConnection::SensorDirectConnection(const sp<SensorService>& service,
        uid_t uid, const sensors_direct_mem_t *mem, int32_t halChannelHandle,
        const String16& opPackageName, int deviceId)
        : mService(service), mUid(uid), mMem(*mem),
SensorService::SensorDirectConnection::SensorDirectConnection(
        const sp<SensorService>& service, uid_t uid, pid_t pid, const sensors_direct_mem_t* mem,
        int32_t halChannelHandle, const String16& opPackageName, int deviceId)
      : mService(service),
        mUid(uid),
        mPid(pid),
        mMem(*mem),
        mHalChannelHandle(halChannelHandle),
        mOpPackageName(opPackageName), mDeviceId(deviceId), mDestroyed(false) {
        mOpPackageName(opPackageName),
        mDeviceId(deviceId),
        mDestroyed(false) {
    mUserId = multiuser_get_user_id(mUid);
    ALOGD_IF(DEBUG_CONNECTIONS, "Created SensorDirectConnection");
}
@@ -62,10 +67,21 @@ void SensorService::SensorDirectConnection::onFirstRef() {

void SensorService::SensorDirectConnection::dump(String8& result) const {
    Mutex::Autolock _l(mConnectionLock);
    result.appendFormat("\tPackage %s, HAL channel handle %d, total sensor activated %zu\n",
            String8(mOpPackageName).c_str(), getHalChannelHandle(), mActivated.size());
    for (auto &i : mActivated) {
        result.appendFormat("\t\tSensor %#08x, rate %d\n", i.first, i.second);
    result.appendFormat("\t%s | HAL channel handle %d | uid %d | pid %d\n",
                        String8(mOpPackageName).c_str(), getHalChannelHandle(), mUid, mPid);
    result.appendFormat("\tActivated sensor count: %zu\n", mActivated.size());
    dumpSensorInfoWithLock(result, mActivated);

    result.appendFormat("\tBackup sensor (opened but UID idle) count: %zu\n",
                        mActivatedBackup.size());
    dumpSensorInfoWithLock(result, mActivatedBackup);
}

void SensorService::SensorDirectConnection::dumpSensorInfoWithLock(
        String8& result, std::unordered_map<int, int> sensors) const {
    for (auto& i : sensors) {
        result.appendFormat("\t\t%s 0x%08x | rate %d\n", mService->getSensorName(i.first).c_str(),
                            i.first, i.second);
    }
}

+11 −5
Original line number Diff line number Diff line
@@ -17,9 +17,10 @@
#ifndef ANDROID_SENSOR_DIRECT_CONNECTION_H
#define ANDROID_SENSOR_DIRECT_CONNECTION_H

#include <optional>
#include <android-base/thread_annotations.h>
#include <stdint.h>
#include <sys/types.h>
#include <optional>

#include <binder/BinderService.h>

@@ -37,7 +38,7 @@ class BitTube;

class SensorService::SensorDirectConnection: public BnSensorEventConnection {
public:
    SensorDirectConnection(const sp<SensorService>& service, uid_t uid,
    SensorDirectConnection(const sp<SensorService>& service, uid_t uid, pid_t pid,
                           const sensors_direct_mem_t* mem, int32_t halChannelHandle,
                           const String16& opPackageName, int deviceId);
    void dump(String8& result) const;
@@ -94,8 +95,13 @@ private:
    // Recover sensor requests previously capped by capRates().
    void uncapRates();

    // Dumps a set of sensor infos.
    void dumpSensorInfoWithLock(String8& result, std::unordered_map<int, int> sensors) const
            EXCLUSIVE_LOCKS_REQUIRED(mConnectionLock);

    const sp<SensorService> mService;
    const uid_t mUid;
    const pid_t mPid;
    const sensors_direct_mem_t mMem;
    const int32_t mHalChannelHandle;
    const String16 mOpPackageName;
+6 −7
Original line number Diff line number Diff line
@@ -90,15 +90,14 @@ void SensorService::SensorEventConnection::dump(String8& result) {
        result.append("NORMAL\n");
    }
    result.appendFormat("\t %s | WakeLockRefCount %d | uid %d | cache size %d | "
            "max cache size %d\n", mPackageName.c_str(), mWakeLockRefCount, mUid, mCacheSize,
            mMaxCacheSize);
                        "max cache size %d | has sensor access: %s\n",
                        mPackageName.c_str(), mWakeLockRefCount, mUid, mCacheSize, mMaxCacheSize,
                        hasSensorAccess() ? "true" : "false");
    for (auto& it : mSensorInfo) {
        const FlushInfo& flushInfo = it.second;
        result.appendFormat("\t %s 0x%08x | status: %s | pending flush events %d \n",
                            mService->getSensorName(it.first).c_str(),
                            it.first,
                            flushInfo.mFirstFlushPending ? "First flush pending" :
                                                           "active",
        result.appendFormat("\t %s 0x%08x | first flush pending: %s | pending flush events %d \n",
                            mService->getSensorName(it.first).c_str(), it.first,
                            flushInfo.mFirstFlushPending ? "true" : "false",
                            flushInfo.mPendingFlushEventsToSend);
    }
#if DEBUG_CONNECTIONS
+6 −3
Original line number Diff line number Diff line
@@ -682,14 +682,14 @@ status_t SensorService::dump(int fd, const Vector<String16>& args) {
                    mSensorPrivacyPolicy->isSensorPrivacyEnabled() ? "enabled" : "disabled");

            const auto& activeConnections = connLock.getActiveConnections();
            result.appendFormat("%zd active connections\n", activeConnections.size());
            result.appendFormat("%zd open event connections\n", activeConnections.size());
            for (size_t i=0 ; i < activeConnections.size() ; i++) {
                result.appendFormat("Connection Number: %zu \n", i);
                activeConnections[i]->dump(result);
            }

            const auto& directConnections = connLock.getDirectConnections();
            result.appendFormat("%zd direct connections\n", directConnections.size());
            result.appendFormat("%zd open direct connections\n", directConnections.size());
            for (size_t i = 0 ; i < directConnections.size() ; i++) {
                result.appendFormat("Direct connection %zu:\n", i);
                directConnections[i]->dump(result);
@@ -1729,7 +1729,10 @@ sp<ISensorEventConnection> SensorService::createSensorDirectConnection(
        ALOGE("SensorDevice::registerDirectChannel returns %d", channelHandle);
    } else {
        mem.handle = clone;
        conn = new SensorDirectConnection(this, uid, &mem, channelHandle, opPackageName, deviceId);
        IPCThreadState* thread = IPCThreadState::self();
        pid_t pid = (thread != nullptr) ? thread->getCallingPid() : -1;
        conn = new SensorDirectConnection(this, uid, pid, &mem, channelHandle, opPackageName,
                                          deviceId);
    }

    if (conn == nullptr) {