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

Commit c46fbf97 authored by tsaichristine's avatar tsaichristine
Browse files

Rename old StateTracker

- The old StateTracker tracked state through a SimplePredicate defined
with only a "start" atom matcher that matched a state atom. This
StateTracker will be renamed StateConditionTracker to avoid confusion
with the new StateTracker.

Test: bit statsd_test:*
Bug: 136566566
Change-Id: I161aa463e83bd63d0fd52eb8579dab531f566dd5
parent d5c504d5
Loading
Loading
Loading
Loading
+2 −2
Original line number Diff line number Diff line
@@ -65,7 +65,7 @@ cc_defaults {
        "src/condition/condition_util.cpp",
        "src/condition/SimpleConditionTracker.cpp",
        "src/condition/ConditionWizard.cpp",
        "src/condition/StateTracker.cpp",
        "src/condition/StateConditionTracker.cpp",
        "src/config/ConfigKey.cpp",
        "src/config/ConfigListener.cpp",
        "src/config/ConfigManager.cpp",
@@ -227,7 +227,7 @@ cc_test {
        "tests/FieldValue_test.cpp",
        "tests/condition/CombinationConditionTracker_test.cpp",
        "tests/condition/SimpleConditionTracker_test.cpp",
        "tests/condition/StateTracker_test.cpp",
        "tests/condition/StateConditionTracker_test.cpp",
        "tests/condition/ConditionTimer_test.cpp",
        "tests/metrics/OringDurationTracker_test.cpp",
        "tests/metrics/MaxDurationTracker_test.cpp",
+12 −12
Original line number Diff line number Diff line
@@ -16,7 +16,7 @@
#define DEBUG false  // STOPSHIP if true
#include "Log.h"

#include "StateTracker.h"
#include "StateConditionTracker.h"
#include "guardrail/StatsdStats.h"

namespace android {
@@ -27,7 +27,7 @@ using std::string;
using std::unordered_set;
using std::vector;

StateTracker::StateTracker(const ConfigKey& key, const int64_t& id, const int index,
StateConditionTracker::StateConditionTracker(const ConfigKey& key, const int64_t& id, const int index,
                           const SimplePredicate& simplePredicate,
                           const unordered_map<int64_t, int>& trackerNameIndexMap,
                           const vector<Matcher> primaryKeys)
@@ -69,19 +69,19 @@ StateTracker::StateTracker(const ConfigKey& key, const int64_t& id, const int in
    mInitialized = true;
}

StateTracker::~StateTracker() {
    VLOG("~StateTracker()");
StateConditionTracker::~StateConditionTracker() {
    VLOG("~StateConditionTracker()");
}

bool StateTracker::init(const vector<Predicate>& allConditionConfig,
bool StateConditionTracker::init(const vector<Predicate>& allConditionConfig,
                        const vector<sp<ConditionTracker>>& allConditionTrackers,
                        const unordered_map<int64_t, int>& conditionIdIndexMap,
                        vector<bool>& stack) {
    return mInitialized;
}

void StateTracker::dumpState() {
    VLOG("StateTracker %lld DUMP:", (long long)mConditionId);
void StateConditionTracker::dumpState() {
    VLOG("StateConditionTracker %lld DUMP:", (long long)mConditionId);
    for (const auto& value : mSlicedState) {
        VLOG("\t%s -> %s", value.first.toString().c_str(), value.second.toString().c_str());
    }
@@ -95,7 +95,7 @@ void StateTracker::dumpState() {
    }
}

bool StateTracker::hitGuardRail(const HashableDimensionKey& newKey) {
bool StateConditionTracker::hitGuardRail(const HashableDimensionKey& newKey) {
    if (mSlicedState.find(newKey) != mSlicedState.end()) {
        // if the condition is not sliced or the key is not new, we are good!
        return false;
@@ -114,7 +114,7 @@ bool StateTracker::hitGuardRail(const HashableDimensionKey& newKey) {
    return false;
}

void StateTracker::evaluateCondition(const LogEvent& event,
void StateConditionTracker::evaluateCondition(const LogEvent& event,
                                     const vector<MatchingState>& eventMatcherValues,
                                     const vector<sp<ConditionTracker>>& mAllConditions,
                                     vector<ConditionState>& conditionCache,
@@ -135,7 +135,7 @@ void StateTracker::evaluateCondition(const LogEvent& event,
        return;
    }

    VLOG("StateTracker evaluate event %s", event.ToString().c_str());
    VLOG("StateConditionTracker evaluate event %s", event.ToString().c_str());

    // Primary key can exclusive fields must be simple fields. so there won't be more than
    // one keys matched.
@@ -151,7 +151,7 @@ void StateTracker::evaluateCondition(const LogEvent& event,
    }
    hitGuardRail(primaryKey);

    VLOG("StateTracker: key %s state %s", primaryKey.toString().c_str(), state.toString().c_str());
    VLOG("StateConditionTracker: key %s state %s", primaryKey.toString().c_str(), state.toString().c_str());

    auto it = mSlicedState.find(primaryKey);
    if (it == mSlicedState.end()) {
@@ -176,7 +176,7 @@ void StateTracker::evaluateCondition(const LogEvent& event,
    return;
}

void StateTracker::isConditionMet(
void StateConditionTracker::isConditionMet(
        const ConditionKey& conditionParameters, const vector<sp<ConditionTracker>>& allConditions,
        const bool isPartialLink,
        vector<ConditionState>& conditionCache) const {
+6 −6
Original line number Diff line number Diff line
@@ -25,14 +25,14 @@ namespace android {
namespace os {
namespace statsd {

class StateTracker : public virtual ConditionTracker {
class StateConditionTracker : public virtual ConditionTracker {
public:
    StateTracker(const ConfigKey& key, const int64_t& id, const int index,
    StateConditionTracker(const ConfigKey& key, const int64_t& id, const int index,
                 const SimplePredicate& simplePredicate,
                 const std::unordered_map<int64_t, int>& trackerNameIndexMap,
                 const vector<Matcher> primaryKeys);

    ~StateTracker();
    ~StateConditionTracker();

    bool init(const std::vector<Predicate>& allConditionConfig,
              const std::vector<sp<ConditionTracker>>& allConditionTrackers,
@@ -46,8 +46,8 @@ public:
                           std::vector<bool>& changedCache) override;

    /**
     * Note: dimensionFields will be ignored in StateTracker, because we demand metrics
     * must take the entire dimension fields from StateTracker. This is to make implementation
     * Note: dimensionFields will be ignored in StateConditionTracker, because we demand metrics
     * must take the entire dimension fields from StateConditionTracker. This is to make implementation
     * simple and efficient.
     *
     * For example: wakelock duration by uid process states:
@@ -109,7 +109,7 @@ private:
    // maps from [primary_key] to [primary_key, exclusive_state].
    std::unordered_map<HashableDimensionKey, HashableDimensionKey> mSlicedState;

    FRIEND_TEST(StateTrackerTest, TestStateChange);
    FRIEND_TEST(StateConditionTrackerTest, TestStateChange);
};

}  // namespace statsd
+6 −6
Original line number Diff line number Diff line
@@ -21,7 +21,7 @@

#include "../condition/CombinationConditionTracker.h"
#include "../condition/SimpleConditionTracker.h"
#include "../condition/StateTracker.h"
#include "../condition/StateConditionTracker.h"
#include "../external/StatsPullerManager.h"
#include "../matchers/CombinationLogMatchingTracker.h"
#include "../matchers/SimpleLogMatchingTracker.h"
@@ -182,13 +182,13 @@ bool initLogTrackers(const StatsdConfig& config, const UidMap& uidMap,
}

/**
 * A StateTracker is built from a SimplePredicate which has only "start", and no "stop"
 * A StateConditionTracker is built from a SimplePredicate which has only "start", and no "stop"
 * or "stop_all". The start must be an atom matcher that matches a state atom. It must
 * have dimension, the dimension must be the state atom's primary fields plus exclusive state
 * field. For example, the StateTracker is used in tracking UidProcessState and ScreenState.
 * field. For example, the StateConditionTracker is used in tracking UidProcessState and ScreenState.
 *
 */
bool isStateTracker(const SimplePredicate& simplePredicate, vector<Matcher>* primaryKeys) {
bool isStateConditionTracker(const SimplePredicate& simplePredicate, vector<Matcher>* primaryKeys) {
    // 1. must not have "stop". must have "dimension"
    if (!simplePredicate.has_stop() && simplePredicate.has_dimensions()) {
        auto it = android::util::AtomsInfo::kStateAtomsFieldOptions.find(
@@ -240,8 +240,8 @@ bool initConditions(const ConfigKey& key, const StatsdConfig& config,
        switch (condition.contents_case()) {
            case Predicate::ContentsCase::kSimplePredicate: {
                vector<Matcher> primaryKeys;
                if (isStateTracker(condition.simple_predicate(), &primaryKeys)) {
                    allConditionTrackers.push_back(new StateTracker(key, condition.id(), index,
                if (isStateConditionTracker(condition.simple_predicate(), &primaryKeys)) {
                    allConditionTrackers.push_back(new StateConditionTracker(key, condition.id(), index,
                                                                    condition.simple_predicate(),
                                                                    logTrackerMap, primaryKeys));
                } else {
+1 −1
Original line number Diff line number Diff line
@@ -113,7 +113,7 @@ bool initStatsdConfig(const ConfigKey& key, const StatsdConfig& config, UidMap&
                      vector<int>& metricsWithActivation,
                      std::set<int64_t>& noReportMetricIds);

bool isStateTracker(const SimplePredicate& simplePredicate, std::vector<Matcher>* primaryKeys);
bool isStateConditionTracker(const SimplePredicate& simplePredicate, std::vector<Matcher>* primaryKeys);

}  // namespace statsd
}  // namespace os
Loading