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

Commit 3e585ecb authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Android (Google) Code Review
Browse files

Merge "Some fixes in StatsdStats, and add some unit tests"

parents aafee0d4 69f1baf7
Loading
Loading
Loading
Loading
+2 −1
Original line number Diff line number Diff line
@@ -199,6 +199,7 @@ void StatsLogProcessor::onDumpReport(const ConfigKey& key, vector<uint8_t>* outD
            iter.rp()->move(toRead);
        }
    }
    StatsdStats::getInstance().noteMetricsReportSent(key);
}

void StatsLogProcessor::OnConfigRemoved(const ConfigKey& key) {
@@ -234,7 +235,7 @@ void StatsLogProcessor::flushIfNecessary(uint64_t timestampNs,
    } else if (totalBytes > kMaxSerializedBytes) { // Too late. We need to start clearing data.
        // We ignore the return value so we force each metric producer to clear its contents.
        metricsManager->onDumpReport();
        StatsdStats::getInstance().noteDataDrop(key);
        StatsdStats::getInstance().noteDataDropped(key);
        VLOG("StatsD had to toss out metrics for %s", key.ToString().c_str());
    }
}
+1 −1
Original line number Diff line number Diff line
@@ -488,7 +488,7 @@ status_t StatsService::cmd_print_stats(FILE* out, const Vector<String8>& args) {
    if (args.size() > 1) {
        reset = strtol(args[1].string(), NULL, 10);
    }
    vector<int8_t> output;
    vector<uint8_t> output;
    statsdStats.dumpStats(&output, reset);
    return NO_ERROR;
}
+23 −7
Original line number Diff line number Diff line
@@ -61,7 +61,7 @@ const int FIELD_ID_ATOM_STATS_COUNT = 2;
// TODO: add stats for pulled atoms.
StatsdStats::StatsdStats() {
    mPushedAtomStats.resize(android::util::kMaxPushedAtomId + 1);
    mStartTime = time(nullptr);
    mStartTimeSec = time(nullptr);
}

StatsdStats& StatsdStats::getInstance() {
@@ -107,6 +107,7 @@ void StatsdStats::noteConfigRemovedInternalLocked(const ConfigKey& key) {
        mMetricsStats.erase(key);
        mConditionStats.erase(key);
        mIceBox.push_back(it->second);
        mConfigStats.erase(it);
    }
}

@@ -126,7 +127,7 @@ void StatsdStats::noteBroadcastSent(const ConfigKey& key) {
    it->second.add_broadcast_sent_time_sec(time(nullptr));
}

void StatsdStats::noteDataDrop(const ConfigKey& key) {
void StatsdStats::noteDataDropped(const ConfigKey& key) {
    lock_guard<std::mutex> lock(mLock);
    auto it = mConfigStats.find(key);
    if (it == mConfigStats.end()) {
@@ -137,6 +138,17 @@ void StatsdStats::noteDataDrop(const ConfigKey& key) {
    it->second.add_data_drop_time_sec(time(nullptr));
}

void StatsdStats::noteMetricsReportSent(const ConfigKey& key) {
    lock_guard<std::mutex> lock(mLock);
    auto it = mConfigStats.find(key);
    if (it == mConfigStats.end()) {
        ALOGE("Config key %s not found!", key.ToString().c_str());
        return;
    }

    it->second.add_dump_report_time_sec(time(nullptr));
}

void StatsdStats::noteConditionDimensionSize(const ConfigKey& key, const string& name, int size) {
    lock_guard<std::mutex> lock(mLock);
    // if name doesn't exist before, it will create the key with count 0.
@@ -164,7 +176,7 @@ void StatsdStats::noteMatcherMatched(const ConfigKey& key, const string& name) {
void StatsdStats::noteAtomLogged(int atomId, int32_t timeSec) {
    lock_guard<std::mutex> lock(mLock);

    if (timeSec < mStartTime) {
    if (timeSec < mStartTimeSec) {
        return;
    }

@@ -183,7 +195,7 @@ void StatsdStats::reset() {

void StatsdStats::resetInternalLocked() {
    // Reset the historical data, but keep the active ConfigStats
    mStartTime = time(nullptr);
    mStartTimeSec = time(nullptr);
    mIceBox.clear();
    mConditionStats.clear();
    mMetricsStats.clear();
@@ -225,11 +237,11 @@ void StatsdStats::addSubStatsToConfig(const ConfigKey& key,
    }
}

void StatsdStats::dumpStats(std::vector<int8_t>* output, bool reset) {
void StatsdStats::dumpStats(std::vector<uint8_t>* output, bool reset) {
    lock_guard<std::mutex> lock(mLock);

    if (DEBUG) {
        time_t t = time(nullptr);
        time_t t = mStartTimeSec;
        struct tm* tm = localtime(&t);
        char timeBuffer[80];
        strftime(timeBuffer, sizeof(timeBuffer), "%Y-%m-%d %I:%M%p", tm);
@@ -237,7 +249,7 @@ void StatsdStats::dumpStats(std::vector<int8_t>* output, bool reset) {
        VLOG("Stats collection start second: %s", timeBuffer);
    }
    ProtoOutputStream proto;
    proto.write(FIELD_TYPE_INT32 | FIELD_ID_BEGIN_TIME, mStartTime);
    proto.write(FIELD_TYPE_INT32 | FIELD_ID_BEGIN_TIME, mStartTimeSec);
    proto.write(FIELD_TYPE_INT32 | FIELD_ID_END_TIME, (int32_t)time(nullptr));

    VLOG("%lu Config in icebox: ", (unsigned long)mIceBox.size());
@@ -286,6 +298,10 @@ void StatsdStats::dumpStats(std::vector<int8_t>* output, bool reset) {
            for (const auto& dataDropTime : configStats.data_drop_time_sec()) {
                VLOG("\tdata drop time: %d", dataDropTime);
            }

            for (const auto& dumpTime : configStats.dump_report_time_sec()) {
                VLOG("\tdump report time: %d", dumpTime);
            }
        }

        addSubStatsToConfig(pair.first, configStats);
+17 −3
Original line number Diff line number Diff line
@@ -18,6 +18,7 @@
#include "config/ConfigKey.h"
#include "frameworks/base/cmds/statsd/src/stats_log.pb.h"

#include <gtest/gtest_prod.h>
#include <mutex>
#include <string>
#include <vector>
@@ -63,7 +64,14 @@ public:
    /**
     * Report a config's metrics data has been dropped.
     */
    void noteDataDrop(const ConfigKey& key);
    void noteDataDropped(const ConfigKey& key);

    /**
     * Report metrics data report has been sent.
     *
     * The report may be requested via StatsManager API, or through adb cmd.
     */
    void noteMetricsReportSent(const ConfigKey& key);

    /**
     * Report the size of output tuple of a condition.
@@ -114,14 +122,14 @@ public:
     *
     * [reset]: whether to clear the historical stats after the call.
     */
    void dumpStats(std::vector<int8_t>* buffer, bool reset);
    void dumpStats(std::vector<uint8_t>* buffer, bool reset);

private:
    StatsdStats();

    mutable std::mutex mLock;

    int32_t mStartTime;
    int32_t mStartTimeSec;

    // The stats about the configs that are still in use.
    std::map<const ConfigKey, StatsdStatsReport_ConfigStats> mConfigStats;
@@ -153,6 +161,12 @@ private:
    void resetInternalLocked();

    void addSubStatsToConfig(const ConfigKey& key, StatsdStatsReport_ConfigStats& configStats);

    FRIEND_TEST(StatsdStatsTest, TestValidConfigAdd);
    FRIEND_TEST(StatsdStatsTest, TestInvalidConfigAdd);
    FRIEND_TEST(StatsdStatsTest, TestConfigRemove);
    FRIEND_TEST(StatsdStatsTest, TestSubStats);
    FRIEND_TEST(StatsdStatsTest, TestAtomLog);
};

}  // namespace statsd
+4 −3
Original line number Diff line number Diff line
@@ -206,9 +206,10 @@ message StatsdStatsReport {

        repeated int32 broadcast_sent_time_sec = 10;
        repeated int32 data_drop_time_sec = 11;
        repeated MatcherStats matcher_stats = 12;
        repeated ConditionStats condition_stats = 13;
        repeated MetricStats metric_stats = 14;
        repeated int32 dump_report_time_sec = 12;
        repeated MatcherStats matcher_stats = 13;
        repeated ConditionStats condition_stats = 14;
        repeated MetricStats metric_stats = 15;
    }

    repeated ConfigStats config_stats = 3;
Loading