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

Commit e7fd9542 authored by Rocky Fang's avatar Rocky Fang
Browse files

Dump sensor register status and sensor name

Fixes: 356622719
Fixes: 356637587
Flag: EXEMPT bug fix
Test: dumpsys and see the expected output
Change-Id: I97ba13c837bf890eecb8b378e27c3269ba38affd
parent c69b0852
Loading
Loading
Loading
Loading
+32 −15
Original line number Diff line number Diff line
@@ -38,10 +38,11 @@ public:
        mActivated = false;
    }

    SensorRegistrationInfo(int32_t handle, const String8 &packageName,
                           int64_t samplingRateNs, int64_t maxReportLatencyNs, bool activate) {
    SensorRegistrationInfo(int32_t handle, const String8& packageName, int64_t samplingRateNs,
                           int64_t maxReportLatencyNs, bool activate, status_t registerStatus) {
        mSensorHandle = handle;
        mPackageName = packageName;
        mRegisteredStatus = registerStatus;

        mSamplingRateUs = static_cast<int64_t>(samplingRateNs/1000);
        mMaxReportLatencyUs = static_cast<int64_t>(maxReportLatencyNs/1000);
@@ -60,28 +61,43 @@ public:
       return (info.mSensorHandle == INT32_MIN && info.mRealtimeSec == 0);
    }

    // Dumpable interface
    virtual std::string dump() const override {
    std::string dump(SensorService* sensorService) const {
        struct tm* timeinfo = localtime(&mRealtimeSec);
        const int8_t hour = static_cast<int8_t>(timeinfo->tm_hour);
        const int8_t min = static_cast<int8_t>(timeinfo->tm_min);
        const int8_t sec = static_cast<int8_t>(timeinfo->tm_sec);

        std::ostringstream ss;
        ss << std::setfill('0') << std::setw(2) << static_cast<int>(hour) << ":"
           << std::setw(2) << static_cast<int>(min) << ":"
           << std::setw(2) << static_cast<int>(sec)
           << (mActivated ? " +" : " -")
           << " 0x" << std::hex << std::setw(8) << mSensorHandle << std::dec
           << std::setfill(' ') << " pid=" << std::setw(5) << mPid
           << " uid=" << std::setw(5) << mUid << " package=" << mPackageName;
        if (mActivated) {
           ss  << " samplingPeriod=" << mSamplingRateUs << "us"
               << " batchingPeriod=" << mMaxReportLatencyUs << "us";
        };
        ss << std::setfill('0') << std::setw(2) << static_cast<int>(hour) << ":" << std::setw(2)
           << static_cast<int>(min) << ":" << std::setw(2) << static_cast<int>(sec)
           << (mActivated ? " +" : " -") << " 0x" << std::hex << std::setw(8) << mSensorHandle;
        ss << std::dec << std::setfill(' ') << " pid=" << std::setw(5) << mPid
           << " uid=" << std::setw(5) << mUid;

        std::string samplingRate =
            mActivated ? std::to_string(mSamplingRateUs) : "  N/A  ";
        std::string batchingInterval =
            mActivated ? std::to_string(mMaxReportLatencyUs) : "  N/A  ";
        ss << " samplingPeriod=" << std::setfill(' ') << std::setw(8)
           << samplingRate << "us" << " batchingPeriod=" << std::setfill(' ')
           << std::setw(8) << batchingInterval << "us"
           << " result=" << statusToString(mRegisteredStatus)
           << " (sensor, package): (" << std::setfill(' ') << std::left
           << std::setw(27);

        if (sensorService != nullptr) {
          ss << sensorService->getSensorName(mSensorHandle);
        } else {
          ss << "null";
        }
        ss << ", " << mPackageName << ")";

        return ss.str();
    }

    // Dumpable interface
    virtual std::string dump() const override { return dump(static_cast<SensorService*>(nullptr)); }

    /**
     * Dump debugging information as android.service.SensorRegistrationInfoProto protobuf message
     * using ProtoOutputStream.
@@ -110,6 +126,7 @@ private:
    int64_t mMaxReportLatencyUs;
    bool mActivated;
    time_t mRealtimeSec;
    status_t mRegisteredStatus;
};

} // namespace android;
+9 −12
Original line number Diff line number Diff line
@@ -708,7 +708,7 @@ status_t SensorService::dump(int fd, const Vector<String16>& args) {
                        SENSOR_REGISTRATIONS_BUF_SIZE;
                    continue;
                }
                result.appendFormat("%s\n", reg_info.dump().c_str());
                result.appendFormat("%s\n", reg_info.dump(this).c_str());
                currentIndex = (currentIndex - 1 + SENSOR_REGISTRATIONS_BUF_SIZE) %
                        SENSOR_REGISTRATIONS_BUF_SIZE;
            } while(startIndex != currentIndex);
@@ -2167,17 +2167,17 @@ status_t SensorService::enable(const sp<SensorEventConnection>& connection,
                sensor->getSensor().getRequiredAppOp() >= 0) {
            connection->mHandleToAppOp[handle] = sensor->getSensor().getRequiredAppOp();
        }

        mLastNSensorRegistrations.editItemAt(mNextSensorRegIndex) =
                SensorRegistrationInfo(handle, connection->getPackageName(),
                                       samplingPeriodNs, maxBatchReportLatencyNs, true);
        mNextSensorRegIndex = (mNextSensorRegIndex + 1) % SENSOR_REGISTRATIONS_BUF_SIZE;
    }

    if (err != NO_ERROR) {
        // batch/activate has failed, reset our state.
        cleanupWithoutDisableLocked(connection, handle);
    }

    mLastNSensorRegistrations.editItemAt(mNextSensorRegIndex) =
            SensorRegistrationInfo(handle, connection->getPackageName(), samplingPeriodNs,
                                   maxBatchReportLatencyNs, /*activate=*/ true, err);
    mNextSensorRegIndex = (mNextSensorRegIndex + 1) % SENSOR_REGISTRATIONS_BUF_SIZE;
    return err;
}

@@ -2190,13 +2190,10 @@ status_t SensorService::disable(const sp<SensorEventConnection>& connection, int
    if (err == NO_ERROR) {
        std::shared_ptr<SensorInterface> sensor = getSensorInterfaceFromHandle(handle);
        err = sensor != nullptr ? sensor->activate(connection.get(), false) : status_t(BAD_VALUE);

    }
    if (err == NO_ERROR) {
    mLastNSensorRegistrations.editItemAt(mNextSensorRegIndex) =
                SensorRegistrationInfo(handle, connection->getPackageName(), 0, 0, false);
            SensorRegistrationInfo(handle, connection->getPackageName(), 0, 0, /*activate=*/ false, err);
    mNextSensorRegIndex = (mNextSensorRegIndex + 1) % SENSOR_REGISTRATIONS_BUF_SIZE;
    }
    return err;
}