diff --git a/power/stats/aidl/default/PowerStats.cpp b/power/stats/aidl/default/PowerStats.cpp index 7cf591eb66..4b771a8be0 100644 --- a/power/stats/aidl/default/PowerStats.cpp +++ b/power/stats/aidl/default/PowerStats.cpp @@ -32,15 +32,19 @@ void PowerStats::addStateResidencyDataProvider(std::unique_ptrgetInfo(); - for (const auto& [entityName, states] : p->getInfo()) { + size_t index = mStateResidencyDataProviders.size(); + mStateResidencyDataProviders.emplace_back(std::move(p)); + + for (const auto& [entityName, states] : info) { PowerEntity i = { .id = id++, .name = entityName, .states = states, }; mPowerEntityInfos.emplace_back(i); - mStateResidencyDataProviders.emplace_back(std::move(p)); + mStateResidencyDataProviderIndex.emplace_back(index); } } @@ -92,7 +96,8 @@ ndk::ScopedAStatus PowerStats::getStateResidency(const std::vector& in_ // Check to see if we already have data for the given id std::string powerEntityName = mPowerEntityInfos[id].name; if (stateResidencies.find(powerEntityName) == stateResidencies.end()) { - mStateResidencyDataProviders[id]->getStateResidencies(&stateResidencies); + mStateResidencyDataProviders.at(mStateResidencyDataProviderIndex.at(id)) + ->getStateResidencies(&stateResidencies); } // Append results if we have them diff --git a/power/stats/aidl/default/PowerStats.h b/power/stats/aidl/default/PowerStats.h index f4c5e69569..91d272d340 100644 --- a/power/stats/aidl/default/PowerStats.h +++ b/power/stats/aidl/default/PowerStats.h @@ -73,6 +73,8 @@ class PowerStats : public BnPowerStats { private: std::vector> mStateResidencyDataProviders; std::vector mPowerEntityInfos; + /* Index that maps each power entity id to an entry in mStateResidencyDataProviders */ + std::vector mStateResidencyDataProviderIndex; std::vector> mEnergyConsumers; std::vector mEnergyConsumerInfos;