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

Commit ba6644d6 authored by Yao Chen's avatar Yao Chen Committed by Android (Google) Code Review
Browse files

Merge "Add more statsd's debugging info to dumpsys."

parents bd2f2e99 884c8c13
Loading
Loading
Loading
Loading
+8 −0
Original line number Diff line number Diff line
@@ -196,6 +196,14 @@ size_t StatsLogProcessor::GetMetricsSize(const ConfigKey& key) const {
    return it->second->byteSize();
}

void StatsLogProcessor::dumpStates(FILE* out, bool verbose) {
    std::lock_guard<std::mutex> lock(mMetricsMutex);
    fprintf(out, "MetricsManager count: %lu\n", (unsigned long)mMetricsManagers.size());
    for (auto metricsManager : mMetricsManagers) {
        metricsManager.second->dumpStates(out, verbose);
    }
}

void StatsLogProcessor::onDumpReport(const ConfigKey& key, const uint64_t& dumpTimeStampNs,
                                     ConfigMetricsReportList* report) {
    std::lock_guard<std::mutex> lock(mMetricsMutex);
+2 −0
Original line number Diff line number Diff line
@@ -61,6 +61,8 @@ public:
        return mUidMap;
    }

    void dumpStates(FILE* out, bool verbose);

private:
    mutable mutex mMetricsMutex;

+8 −3
Original line number Diff line number Diff line
@@ -175,8 +175,13 @@ status_t StatsService::dump(int fd, const Vector<String16>& args) {
        return NO_MEMORY;  // the fd is already open
    }

    bool verbose = false;
    if (args.size() > 0 && !args[0].compare(String16("-v"))) {
        verbose = true;
    }

    // TODO: Proto format for incident reports
    dump_impl(out);
    dump_impl(out, verbose);

    fclose(out);
    return NO_ERROR;
@@ -185,9 +190,9 @@ status_t StatsService::dump(int fd, const Vector<String16>& args) {
/**
 * Write debugging data about statsd in text format.
 */
void StatsService::dump_impl(FILE* out) {
    mConfigManager->Dump(out);
void StatsService::dump_impl(FILE* out, bool verbose) {
    StatsdStats::getInstance().dumpStats(out);
    mProcessor->dumpStates(out, verbose);
}

/**
+1 −1
Original line number Diff line number Diff line
@@ -140,7 +140,7 @@ private:
    /**
     * Text output of dumpsys.
     */
    void dump_impl(FILE* out);
    void dump_impl(FILE* out, bool verbose);

    /**
     * Print usage information for the commands
+31 −0
Original line number Diff line number Diff line
@@ -45,6 +45,8 @@ const int FIELD_ID_CONFIG_STATS = 3;
const int FIELD_ID_ATOM_STATS = 7;
const int FIELD_ID_UIDMAP_STATS = 8;
const int FIELD_ID_ANOMALY_ALARM_STATS = 9;
const int FIELD_ID_PULLED_ATOM_STATS = 10;
const int FIELD_ID_LOGGER_ERROR_STATS = 11;

const int FIELD_ID_MATCHER_STATS_NAME = 1;
const int FIELD_ID_MATCHER_STATS_COUNT = 2;
@@ -60,6 +62,9 @@ const int FIELD_ID_ATOM_STATS_COUNT = 2;

const int FIELD_ID_ANOMALY_ALARMS_REGISTERED = 1;

const int FIELD_ID_LOGGER_STATS_TIME = 1;
const int FIELD_ID_LOGGER_STATS_ERROR_CODE = 2;

std::map<int, long> StatsdStats::kPullerCooldownMap = {
        {android::util::KERNEL_WAKELOCK, 1},
        {android::util::WIFI_BYTES_TRANSFER, 1},
@@ -282,6 +287,15 @@ void StatsdStats::noteAtomLogged(int atomId, int32_t timeSec) {
    mPushedAtomStats[atomId]++;
}

void StatsdStats::noteLoggerError(int error) {
    lock_guard<std::mutex> lock(mLock);
    // grows strictly one at a time. so it won't > kMaxLoggerErrors
    if (mLoggerErrors.size() == kMaxLoggerErrors) {
        mLoggerErrors.pop_front();
    }
    mLoggerErrors.push_back(std::make_pair(time(nullptr), error));
}

void StatsdStats::reset() {
    lock_guard<std::mutex> lock(mLock);
    resetInternalLocked();
@@ -297,6 +311,7 @@ void StatsdStats::resetInternalLocked() {
    mAlertStats.clear();
    mAnomalyAlarmRegisteredStats = 0;
    mMatcherStats.clear();
    mLoggerErrors.clear();
    for (auto& config : mConfigStats) {
        config.second.clear_broadcast_sent_time_sec();
        config.second.clear_data_drop_time_sec();
@@ -465,6 +480,14 @@ void StatsdStats::dumpStats(FILE* out) const {
            "lost=%d\n",
            mUidMapStats.bytes_used(), mUidMapStats.snapshots(), mUidMapStats.changes(),
            mUidMapStats.dropped_snapshots(), mUidMapStats.dropped_changes());

    for (const auto& error : mLoggerErrors) {
        time_t error_time = error.first;
        struct tm* error_tm = localtime(&error_time);
        char buffer[80];
        strftime(buffer, sizeof(buffer), "%Y-%m-%d %I:%M%p\n", error_tm);
        fprintf(out, "Logger error %d at %s\n", error.second, buffer);
    }
}

void StatsdStats::dumpStats(std::vector<uint8_t>* output, bool reset) {
@@ -526,6 +549,14 @@ void StatsdStats::dumpStats(std::vector<uint8_t>* output, bool reset) {
    mUidMapStats.SerializeToArray(&buffer[0], numBytes);
    proto.write(FIELD_TYPE_MESSAGE | FIELD_ID_UIDMAP_STATS, &buffer[0], buffer.size());

    for (const auto& error : mLoggerErrors) {
        long long token = proto.start(FIELD_TYPE_MESSAGE | FIELD_ID_LOGGER_ERROR_STATS |
                                      FIELD_COUNT_REPEATED);
        proto.write(FIELD_TYPE_INT32 | FIELD_ID_LOGGER_STATS_TIME, error.first);
        proto.write(FIELD_TYPE_INT32 | FIELD_ID_LOGGER_STATS_ERROR_CODE, error.second);
        proto.end(token);
    }

    output->clear();
    size_t bufferSize = proto.size();
    output->resize(bufferSize);
Loading