Merge "Fix PullUidProvider unregistering on config update" into rvc-dev am: 7df1a94f78 am: 364c8e2c2d am: 46ae2a065a am: 7e09028c2f
Change-Id: I5b50cf0f0734795f984e4747355ea2f3525cae3c
This commit is contained in:
@@ -252,9 +252,13 @@ void StatsPullerManager::RegisterPullUidProvider(const ConfigKey& configKey,
|
||||
mPullUidProviders[configKey] = provider;
|
||||
}
|
||||
|
||||
void StatsPullerManager::UnregisterPullUidProvider(const ConfigKey& configKey) {
|
||||
void StatsPullerManager::UnregisterPullUidProvider(const ConfigKey& configKey,
|
||||
wp<PullUidProvider> provider) {
|
||||
std::lock_guard<std::mutex> _l(mLock);
|
||||
mPullUidProviders.erase(configKey);
|
||||
const auto& it = mPullUidProviders.find(configKey);
|
||||
if (it != mPullUidProviders.end() && it->second == provider) {
|
||||
mPullUidProviders.erase(it);
|
||||
}
|
||||
}
|
||||
|
||||
void StatsPullerManager::OnAlarmFired(int64_t elapsedTimeNs) {
|
||||
|
||||
@@ -78,11 +78,12 @@ public:
|
||||
wp<PullDataReceiver> receiver);
|
||||
|
||||
// Registers a pull uid provider for the config key. When pulling atoms, it will be used to
|
||||
// determine which atoms to pull from.
|
||||
// determine which uids to pull from.
|
||||
virtual void RegisterPullUidProvider(const ConfigKey& configKey, wp<PullUidProvider> provider);
|
||||
|
||||
// Unregister a pull uid provider.
|
||||
virtual void UnregisterPullUidProvider(const ConfigKey& configKey);
|
||||
virtual void UnregisterPullUidProvider(const ConfigKey& configKey,
|
||||
wp<PullUidProvider> provider);
|
||||
|
||||
// Verify if we know how to pull for this matcher
|
||||
bool PullerForMatcherExists(int tagId) const;
|
||||
@@ -180,6 +181,8 @@ private:
|
||||
FRIEND_TEST(ValueMetricE2eTest, TestPulledEvents);
|
||||
FRIEND_TEST(ValueMetricE2eTest, TestPulledEvents_LateAlarm);
|
||||
FRIEND_TEST(ValueMetricE2eTest, TestPulledEvents_WithActivation);
|
||||
|
||||
FRIEND_TEST(StatsLogProcessorTest, TestPullUidProviderSetOnConfigUpdate);
|
||||
};
|
||||
|
||||
} // namespace statsd
|
||||
|
||||
@@ -189,7 +189,7 @@ MetricsManager::~MetricsManager() {
|
||||
StateManager::getInstance().unregisterListener(atomId, it);
|
||||
}
|
||||
}
|
||||
mPullerManager->UnregisterPullUidProvider(mConfigKey);
|
||||
mPullerManager->UnregisterPullUidProvider(mConfigKey, this);
|
||||
|
||||
VLOG("~MetricsManager()");
|
||||
}
|
||||
|
||||
@@ -528,7 +528,7 @@ TEST(MetricsManagerTest, TestLogSources) {
|
||||
}));
|
||||
sp<MockStatsPullerManager> pullerManager = new StrictMock<MockStatsPullerManager>();
|
||||
EXPECT_CALL(*pullerManager, RegisterPullUidProvider(kConfigKey, _)).Times(1);
|
||||
EXPECT_CALL(*pullerManager, UnregisterPullUidProvider(kConfigKey)).Times(1);
|
||||
EXPECT_CALL(*pullerManager, UnregisterPullUidProvider(kConfigKey, _)).Times(1);
|
||||
|
||||
sp<AlarmMonitor> anomalyAlarmMonitor;
|
||||
sp<AlarmMonitor> periodicAlarmMonitor;
|
||||
|
||||
@@ -301,6 +301,29 @@ TEST(StatsLogProcessorTest, TestOnDumpReportEraseData) {
|
||||
EXPECT_TRUE(noData);
|
||||
}
|
||||
|
||||
TEST(StatsLogProcessorTest, TestPullUidProviderSetOnConfigUpdate) {
|
||||
// Setup simple config key corresponding to empty config.
|
||||
sp<UidMap> m = new UidMap();
|
||||
sp<StatsPullerManager> pullerManager = new StatsPullerManager();
|
||||
sp<AlarmMonitor> anomalyAlarmMonitor;
|
||||
sp<AlarmMonitor> subscriberAlarmMonitor;
|
||||
StatsLogProcessor p(
|
||||
m, pullerManager, anomalyAlarmMonitor, subscriberAlarmMonitor, 0,
|
||||
[](const ConfigKey& key) { return true; },
|
||||
[](const int&, const vector<int64_t>&) { return true; });
|
||||
ConfigKey key(3, 4);
|
||||
StatsdConfig config = MakeConfig(false);
|
||||
p.OnConfigUpdated(0, key, config);
|
||||
EXPECT_NE(pullerManager->mPullUidProviders.find(key), pullerManager->mPullUidProviders.end());
|
||||
|
||||
config.add_default_pull_packages("AID_STATSD");
|
||||
p.OnConfigUpdated(5, key, config);
|
||||
EXPECT_NE(pullerManager->mPullUidProviders.find(key), pullerManager->mPullUidProviders.end());
|
||||
|
||||
p.OnConfigRemoved(key);
|
||||
EXPECT_EQ(pullerManager->mPullUidProviders.find(key), pullerManager->mPullUidProviders.end());
|
||||
}
|
||||
|
||||
TEST(StatsLogProcessorTest, TestActiveConfigMetricDiskWriteRead) {
|
||||
int uid = 1111;
|
||||
|
||||
|
||||
@@ -44,7 +44,8 @@ public:
|
||||
vector<std::shared_ptr<LogEvent>>* data, bool useUids));
|
||||
MOCK_METHOD2(RegisterPullUidProvider,
|
||||
void(const ConfigKey& configKey, wp<PullUidProvider> provider));
|
||||
MOCK_METHOD1(UnregisterPullUidProvider, void(const ConfigKey& configKey));
|
||||
MOCK_METHOD2(UnregisterPullUidProvider,
|
||||
void(const ConfigKey& configKey, wp<PullUidProvider> provider));
|
||||
};
|
||||
|
||||
class MockUidMap : public UidMap {
|
||||
|
||||
Reference in New Issue
Block a user