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

Commit 851b4767 authored by Christine Tsai's avatar Christine Tsai Committed by Android (Google) Code Review
Browse files

Merge "Take 2: Integrate StateTracker into statsd"

parents 50beaa76 d21aacff
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -230,6 +230,7 @@ cc_test {
        "tests/e2e/Anomaly_duration_sum_e2e_test.cpp",
        "tests/e2e/Attribution_e2e_test.cpp",
        "tests/e2e/ConfigTtl_e2e_test.cpp",
        "tests/e2e/CountMetric_e2e_test.cpp",
        "tests/e2e/DurationMetric_e2e_test.cpp",
        "tests/e2e/GaugeMetric_e2e_pull_test.cpp",
        "tests/e2e/GaugeMetric_e2e_push_test.cpp",
+10 −6
Original line number Diff line number Diff line
@@ -16,24 +16,26 @@

#define DEBUG false  // STOPSHIP if true
#include "Log.h"
#include "statslog.h"

#include "StatsLogProcessor.h"

#include <android-base/file.h>
#include <dirent.h>
#include <frameworks/base/cmds/statsd/src/active_config_list.pb.h>
#include "StatsLogProcessor.h"
#include <log/log_event_list.h>
#include <utils/Errors.h>
#include <utils/SystemClock.h>

#include "android-base/stringprintf.h"
#include "external/StatsPullerManager.h"
#include "guardrail/StatsdStats.h"
#include "metrics/CountMetricProducer.h"
#include "state/StateManager.h"
#include "stats_log_util.h"
#include "stats_util.h"
#include "statslog.h"
#include "storage/StorageManager.h"

#include <log/log_event_list.h>
#include <utils/Errors.h>
#include <utils/SystemClock.h>

using namespace android;
using android::base::StringPrintf;
using android::util::FIELD_COUNT_REPEATED;
@@ -218,6 +220,8 @@ void StatsLogProcessor::OnLogEvent(LogEvent* event) {
        onIsolatedUidChangedEventLocked(*event);
    }

    StateManager::getInstance().onLogEvent(*event);

    if (mMetricsManagers.empty()) {
        return;
    }
+4 −0
Original line number Diff line number Diff line
@@ -262,6 +262,10 @@ private:
    FRIEND_TEST(MetricActivationE2eTest, TestCountMetricWithSameDeactivation);
    FRIEND_TEST(MetricActivationE2eTest, TestCountMetricWithTwoMetricsTwoDeactivations);

    FRIEND_TEST(CountMetricE2eTest, TestWithSimpleState);
    FRIEND_TEST(CountMetricE2eTest, TestWithMappedState);
    FRIEND_TEST(CountMetricE2eTest, TestWithMultipleStates);

    FRIEND_TEST(DurationMetricE2eTest, TestOneBucket);
    FRIEND_TEST(DurationMetricE2eTest, TestTwoBuckets);
    FRIEND_TEST(DurationMetricE2eTest, TestWithActivation);
+22 −12
Original line number Diff line number Diff line
@@ -18,13 +18,15 @@
#include "Log.h"

#include "CountMetricProducer.h"
#include "guardrail/StatsdStats.h"
#include "stats_util.h"
#include "stats_log_util.h"

#include <inttypes.h>
#include <limits.h>
#include <stdlib.h>

#include "guardrail/StatsdStats.h"
#include "stats_log_util.h"
#include "stats_util.h"

using android::util::FIELD_COUNT_REPEATED;
using android::util::FIELD_TYPE_BOOL;
using android::util::FIELD_TYPE_FLOAT;
@@ -65,16 +67,16 @@ const int FIELD_ID_BUCKET_NUM = 4;
const int FIELD_ID_START_BUCKET_ELAPSED_MILLIS = 5;
const int FIELD_ID_END_BUCKET_ELAPSED_MILLIS = 6;

CountMetricProducer::CountMetricProducer(const ConfigKey& key, const CountMetric& metric,
                                         const int conditionIndex,
                                         const sp<ConditionWizard>& wizard,
                                         const int64_t timeBaseNs, const int64_t startTimeNs,
                                         const unordered_map<int, shared_ptr<Activation>>&
                                                 eventActivationMap,
                                         const unordered_map<int, vector<shared_ptr<Activation>>>&
                                                 eventDeactivationMap)
CountMetricProducer::CountMetricProducer(
        const ConfigKey& key, const CountMetric& metric, const int conditionIndex,
        const sp<ConditionWizard>& wizard, const int64_t timeBaseNs, const int64_t startTimeNs,

        const unordered_map<int, shared_ptr<Activation>>& eventActivationMap,
        const unordered_map<int, vector<shared_ptr<Activation>>>& eventDeactivationMap,
        const vector<int>& slicedStateAtoms,
        const unordered_map<int, unordered_map<int, int64_t>>& stateGroupMap)
    : MetricProducer(metric.id(), key, timeBaseNs, conditionIndex, wizard, eventActivationMap,
                     eventDeactivationMap) {
                     eventDeactivationMap, slicedStateAtoms, stateGroupMap) {
    if (metric.has_bucket()) {
        mBucketSizeNs =
                TimeUnitToBucketSizeInMillisGuardrailed(key.GetUid(), metric.bucket()) * 1000000;
@@ -100,6 +102,8 @@ CountMetricProducer::CountMetricProducer(const ConfigKey& key, const CountMetric
        mConditionSliced = true;
    }

    // TODO(tsaichristine): b/142124705 handle metric state links

    flushIfNeededLocked(startTimeNs);
    // Adjust start for partial bucket
    mCurrentBucketStartTimeNs = startTimeNs;
@@ -112,6 +116,12 @@ CountMetricProducer::~CountMetricProducer() {
    VLOG("~CountMetricProducer() called");
}

void CountMetricProducer::onStateChanged(int atomId, const HashableDimensionKey& primaryKey,
                                         int oldState, int newState) {
    VLOG("CountMetric %lld onStateChanged State%d, key %s, %d -> %d", (long long)mMetricId, atomId,
         primaryKey.toString().c_str(), oldState, newState);
}

void CountMetricProducer::dumpStatesLocked(FILE* out, bool verbose) const {
    if (mCurrentSlicedCounter == nullptr ||
        mCurrentSlicedCounter->size() == 0) {
+17 −12
Original line number Diff line number Diff line
@@ -17,15 +17,16 @@
#ifndef COUNT_METRIC_PRODUCER_H
#define COUNT_METRIC_PRODUCER_H

#include <unordered_map>

#include <android/util/ProtoOutputStream.h>
#include <gtest/gtest_prod.h>
#include "../anomaly/AnomalyTracker.h"
#include "../condition/ConditionTracker.h"
#include "../matchers/matcher_util.h"

#include <unordered_map>

#include "MetricProducer.h"
#include "anomaly/AnomalyTracker.h"
#include "condition/ConditionTracker.h"
#include "frameworks/base/cmds/statsd/src/statsd_config.pb.h"
#include "matchers/matcher_util.h"
#include "stats_util.h"

namespace android {
@@ -40,16 +41,20 @@ struct CountBucket {

class CountMetricProducer : public MetricProducer {
public:
    CountMetricProducer(const ConfigKey& key, const CountMetric& countMetric,
                        const int conditionIndex, const sp<ConditionWizard>& wizard,
                        const int64_t timeBaseNs, const int64_t startTimeNs,
                        const std::unordered_map<int, std::shared_ptr<Activation>>&
                                eventActivationMap = {},
    CountMetricProducer(
            const ConfigKey& key, const CountMetric& countMetric, const int conditionIndex,
            const sp<ConditionWizard>& wizard, const int64_t timeBaseNs, const int64_t startTimeNs,
            const std::unordered_map<int, std::shared_ptr<Activation>>& eventActivationMap = {},
            const std::unordered_map<int, std::vector<std::shared_ptr<Activation>>>&
                                eventDeactivationMap = {});
                    eventDeactivationMap = {},
            const vector<int>& slicedStateAtoms = {},
            const unordered_map<int, unordered_map<int, int64_t>>& stateGroupMap = {});

    virtual ~CountMetricProducer();

    void onStateChanged(int atomId, const HashableDimensionKey& primaryKey, int oldState,
                        int newState) override;

protected:
    void onMatchedLogEventInternalLocked(
            const size_t matcherIndex, const MetricDimensionKey& eventKey,
Loading