Take 2: Integrate StateTracker into statsd
Changes in this CL compared to previous StateTracker version:
- MetricsManager parses StatsdConfig for State information and updates
MetricProducers accordingly
- MetricProducer implements StateListener
- MetricProducer has a list of atom ids of its slice_by_states and any
state maps from these states. MetricProducers are responsible for
handling the conversion from original state value to mapped state value.
- More unit tests added and e2e CountMetric test added
Test: bit statsd_test:*
Bug: 136566566
Change-Id: I07ce468733a1affcadf2be0206e081fddbbce4c5
diff --git a/cmds/statsd/src/state/StateManager.cpp b/cmds/statsd/src/state/StateManager.cpp
index a3059c5..95b2c76 100644
--- a/cmds/statsd/src/state/StateManager.cpp
+++ b/cmds/statsd/src/state/StateManager.cpp
@@ -35,26 +35,25 @@
}
}
-bool StateManager::registerListener(int stateAtomId, wp<StateListener> listener) {
+bool StateManager::registerListener(int atomId, wp<StateListener> listener) {
std::lock_guard<std::mutex> lock(mMutex);
// Check if state tracker already exists
- if (mStateTrackers.find(stateAtomId) == mStateTrackers.end()) {
+ if (mStateTrackers.find(atomId) == mStateTrackers.end()) {
// Create a new state tracker iff atom is a state atom
- auto it = android::util::AtomsInfo::kStateAtomsFieldOptions.find(stateAtomId);
+ auto it = android::util::AtomsInfo::kStateAtomsFieldOptions.find(atomId);
if (it != android::util::AtomsInfo::kStateAtomsFieldOptions.end()) {
- mStateTrackers[stateAtomId] = new StateTracker(stateAtomId, it->second);
+ mStateTrackers[atomId] = new StateTracker(atomId, it->second);
} else {
- ALOGE("StateManager cannot register listener, Atom %d is not a state atom",
- stateAtomId);
+ ALOGE("StateManager cannot register listener, Atom %d is not a state atom", atomId);
return false;
}
}
- mStateTrackers[stateAtomId]->registerListener(listener);
+ mStateTrackers[atomId]->registerListener(listener);
return true;
}
-void StateManager::unregisterListener(int stateAtomId, wp<StateListener> listener) {
+void StateManager::unregisterListener(int atomId, wp<StateListener> listener) {
std::unique_lock<std::mutex> lock(mMutex);
// Hold the sp<> until the lock is released so that ~StateTracker() is
@@ -62,7 +61,7 @@
sp<StateTracker> toRemove;
// Unregister listener from correct StateTracker
- auto it = mStateTrackers.find(stateAtomId);
+ auto it = mStateTrackers.find(atomId);
if (it != mStateTrackers.end()) {
it->second->unregisterListener(listener);
@@ -73,15 +72,15 @@
}
} else {
ALOGE("StateManager cannot unregister listener, StateTracker for atom %d does not exist",
- stateAtomId);
+ atomId);
}
lock.unlock();
}
-int StateManager::getState(int stateAtomId, const HashableDimensionKey& key) {
+int StateManager::getStateValue(int atomId, const HashableDimensionKey& key) {
std::lock_guard<std::mutex> lock(mMutex);
- if (mStateTrackers.find(stateAtomId) != mStateTrackers.end()) {
- return mStateTrackers[stateAtomId]->getState(key);
+ if (mStateTrackers.find(atomId) != mStateTrackers.end()) {
+ return mStateTrackers[atomId]->getStateValue(key);
}
return StateTracker::kStateUnknown;