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

Commit 45bbf162 authored by Automerger Merge Worker's avatar Automerger Merge Worker Committed by Android (Google) Code Review
Browse files

Merge "Merge "Don't create StateTrackers for whitelisted atoms" into rvc-dev...

Merge "Merge "Don't create StateTrackers for whitelisted atoms" into rvc-dev am: c20fcfee am: 6090c549 am: b50522fa" into rvc-qpr-dev-plus-aosp
parents aaf797b1 c66080c3
Loading
Loading
Loading
Loading
+1 −1
Original line number Original line Diff line number Diff line
@@ -442,7 +442,7 @@ protected:
    bool mIsActive;
    bool mIsActive;


    // The slice_by_state atom ids defined in statsd_config.
    // The slice_by_state atom ids defined in statsd_config.
    std::vector<int32_t> mSlicedStateAtoms;
    const std::vector<int32_t> mSlicedStateAtoms;


    // Maps atom ids and state values to group_ids (<atom_id, <value, group_id>>).
    // Maps atom ids and state values to group_ids (<atom_id, <value, group_id>>).
    const std::unordered_map<int32_t, std::unordered_map<int, int64_t>> mStateGroupMap;
    const std::unordered_map<int32_t, std::unordered_map<int, int64_t>> mStateGroupMap;
+10 −1
Original line number Original line Diff line number Diff line
@@ -791,10 +791,19 @@ bool initMetrics(const ConfigKey& key, const StatsdConfig& config, const int64_t
        }
        }
        noReportMetricIds.insert(no_report_metric);
        noReportMetricIds.insert(no_report_metric);
    }
    }

    const set<int> whitelistedAtomIds(config.whitelisted_atom_ids().begin(),
                                      config.whitelisted_atom_ids().end());
    for (const auto& it : allMetricProducers) {
    for (const auto& it : allMetricProducers) {
        // Register metrics to StateTrackers
        // Register metrics to StateTrackers
        for (int atomId : it->getSlicedStateAtoms()) {
        for (int atomId : it->getSlicedStateAtoms()) {
            // Register listener for non-whitelisted atoms only. Using whitelisted atom as a sliced
            // state atom is not allowed.
            if (whitelistedAtomIds.find(atomId) == whitelistedAtomIds.end()) {
                StateManager::getInstance().registerListener(atomId, it);
                StateManager::getInstance().registerListener(atomId, it);
            } else {
                return false;
            }
        }
        }
    }
    }
    return true;
    return true;
+29 −0
Original line number Original line Diff line number Diff line
@@ -29,6 +29,7 @@
#include "src/metrics/MetricProducer.h"
#include "src/metrics/MetricProducer.h"
#include "src/metrics/ValueMetricProducer.h"
#include "src/metrics/ValueMetricProducer.h"
#include "src/metrics/metrics_manager_util.h"
#include "src/metrics/metrics_manager_util.h"
#include "src/state/StateManager.h"
#include "statsd_test_util.h"
#include "statsd_test_util.h"


using namespace testing;
using namespace testing;
@@ -615,6 +616,34 @@ TEST(MetricsManagerTest, TestCheckLogCredentialsWhitelistedAtom) {
    EXPECT_TRUE(metricsManager.checkLogCredentials(event));
    EXPECT_TRUE(metricsManager.checkLogCredentials(event));
}
}


TEST(MetricsManagerTest, TestWhitelistedAtomStateTracker) {
    sp<UidMap> uidMap;
    sp<StatsPullerManager> pullerManager = new StatsPullerManager();
    sp<AlarmMonitor> anomalyAlarmMonitor;
    sp<AlarmMonitor> periodicAlarmMonitor;

    StatsdConfig config = buildGoodConfig();
    config.add_allowed_log_source("AID_SYSTEM");
    config.add_whitelisted_atom_ids(3);
    config.add_whitelisted_atom_ids(4);

    State state;
    state.set_id(1);
    state.set_atom_id(3);

    *config.add_state() = state;

    config.mutable_count_metric(0)->add_slice_by_state(state.id());

    StateManager::getInstance().clear();

    MetricsManager metricsManager(kConfigKey, config, timeBaseSec, timeBaseSec, uidMap,
                                  pullerManager, anomalyAlarmMonitor, periodicAlarmMonitor);

    EXPECT_EQ(0, StateManager::getInstance().getStateTrackersCount());
    EXPECT_FALSE(metricsManager.isConfigValid());
}

}  // namespace statsd
}  // namespace statsd
}  // namespace os
}  // namespace os
}  // namespace android
}  // namespace android