Loading cmds/statsd/Android.bp +2 −2 Original line number Diff line number Diff line Loading @@ -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", Loading Loading @@ -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", Loading cmds/statsd/src/condition/StateTracker.cpp→cmds/statsd/src/condition/StateConditionTracker.cpp +12 −12 Original line number Diff line number Diff line Loading @@ -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 { Loading @@ -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) Loading Loading @@ -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()); } Loading @@ -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; Loading @@ -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, Loading @@ -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. Loading @@ -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()) { Loading @@ -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 { Loading cmds/statsd/src/condition/StateTracker.h→cmds/statsd/src/condition/StateConditionTracker.h +6 −6 Original line number Diff line number Diff line Loading @@ -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, Loading @@ -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: Loading Loading @@ -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 Loading cmds/statsd/src/metrics/metrics_manager_util.cpp +6 −6 Original line number Diff line number Diff line Loading @@ -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" Loading Loading @@ -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( Loading Loading @@ -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 { Loading cmds/statsd/src/metrics/metrics_manager_util.h +1 −1 Original line number Diff line number Diff line Loading @@ -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 Loading
cmds/statsd/Android.bp +2 −2 Original line number Diff line number Diff line Loading @@ -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", Loading Loading @@ -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", Loading
cmds/statsd/src/condition/StateTracker.cpp→cmds/statsd/src/condition/StateConditionTracker.cpp +12 −12 Original line number Diff line number Diff line Loading @@ -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 { Loading @@ -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) Loading Loading @@ -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()); } Loading @@ -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; Loading @@ -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, Loading @@ -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. Loading @@ -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()) { Loading @@ -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 { Loading
cmds/statsd/src/condition/StateTracker.h→cmds/statsd/src/condition/StateConditionTracker.h +6 −6 Original line number Diff line number Diff line Loading @@ -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, Loading @@ -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: Loading Loading @@ -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 Loading
cmds/statsd/src/metrics/metrics_manager_util.cpp +6 −6 Original line number Diff line number Diff line Loading @@ -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" Loading Loading @@ -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( Loading Loading @@ -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 { Loading
cmds/statsd/src/metrics/metrics_manager_util.h +1 −1 Original line number Diff line number Diff line Loading @@ -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