From e05cbc632526576e91084892e66a91a00569f5ad Mon Sep 17 00:00:00 2001 From: Darren Hsu Date: Tue, 19 Apr 2022 15:58:52 +0800 Subject: [PATCH] Exclude timed power entities due to timeout mechanism The AoC power stats reporting might not be present when the AoC latency exceeds the allowed time after the timeout mechanism introduced in AoC state residency data provider. Bug: 229696611 Test: run vts -m VtsHalPowerStatsTargetTest Change-Id: I7c59ab50065961ed338314d6c8d22d41ece43e5f Signed-off-by: Darren Hsu --- .../aidl/vts/VtsHalPowerStatsTargetTest.cpp | 59 +++++++++++++++---- 1 file changed, 47 insertions(+), 12 deletions(-) diff --git a/power/stats/aidl/vts/VtsHalPowerStatsTargetTest.cpp b/power/stats/aidl/vts/VtsHalPowerStatsTargetTest.cpp index c7ba96cec3..4ee14e3bd9 100644 --- a/power/stats/aidl/vts/VtsHalPowerStatsTargetTest.cpp +++ b/power/stats/aidl/vts/VtsHalPowerStatsTargetTest.cpp @@ -65,6 +65,11 @@ class PowerStatsAidl : public testing::TestWithParam { template void testMatching(std::vector const& c1, R T::*f1, std::vector const& c2, R S::*f2); + bool containsTimedEntity(const std::string& str); + + void excludeTimedEntities(std::vector* entities, + std::vector* results); + std::shared_ptr powerstats; }; @@ -111,6 +116,29 @@ void PowerStatsAidl::testMatching(std::vector const& c1, R T::*f1, std::vecto EXPECT_EQ(c1fields, c2fields); } +bool PowerStatsAidl::containsTimedEntity(const std::string& str) { + // TODO(b/229698505): Extend PowerEntityInfo to identify timed power entity + return str.find("AoC") != std::string::npos; +} + +void PowerStatsAidl::excludeTimedEntities(std::vector* entities, + std::vector* results) { + for (auto it = entities->begin(); it != entities->end(); it++) { + if (containsTimedEntity((*it).name)) { + auto entityId = (*it).id; + entities->erase(it--); + + // Erase result element matching the entity ID + for (auto resultsIt = results->begin(); resultsIt != results->end(); resultsIt++) { + if ((*resultsIt).id == entityId) { + results->erase(resultsIt--); + break; + } + } + } + } +} + // Each PowerEntity must have a valid name TEST_P(PowerStatsAidl, ValidatePowerEntityNames) { std::vector infos; @@ -185,19 +213,20 @@ TEST_P(PowerStatsAidl, TestGetStateResidency) { ASSERT_OK(powerstats->getStateResidency({}, &results)); } -// State residency must return all results -TEST_P(PowerStatsAidl, TestGetStateResidencyAllResults) { +// State residency must return all results except timed power entities +TEST_P(PowerStatsAidl, TestGetStateResidencyAllResultsExceptTimedEntities) { std::vector entities; ASSERT_OK(powerstats->getPowerEntityInfo(&entities)); std::vector results; ASSERT_OK(powerstats->getStateResidency({}, &results)); + excludeTimedEntities(&entities, &results); testMatching(entities, &PowerEntity::id, results, &StateResidencyResult::id); } -// Each result must contain all state residencies -TEST_P(PowerStatsAidl, TestGetStateResidencyAllStateResidencies) { +// Each result must contain all state residencies except timed power entities +TEST_P(PowerStatsAidl, TestGetStateResidencyAllStateResidenciesExceptTimedEntities) { std::vector entities; ASSERT_OK(powerstats->getPowerEntityInfo(&entities)); @@ -205,16 +234,18 @@ TEST_P(PowerStatsAidl, TestGetStateResidencyAllStateResidencies) { ASSERT_OK(powerstats->getStateResidency({}, &results)); for (auto entity : entities) { - auto it = std::find_if(results.begin(), results.end(), - [&entity](const auto& x) { return x.id == entity.id; }); - ASSERT_NE(it, results.end()); + if (!containsTimedEntity(entity.name)) { + auto it = std::find_if(results.begin(), results.end(), + [&entity](const auto& x) { return x.id == entity.id; }); + ASSERT_NE(it, results.end()); - testMatching(entity.states, &State::id, it->stateResidencyData, &StateResidency::id); + testMatching(entity.states, &State::id, it->stateResidencyData, &StateResidency::id); + } } } -// State residency must return results for each requested power entity -TEST_P(PowerStatsAidl, TestGetStateResidencySelectedResults) { +// State residency must return results for each requested power entity except timed power entities +TEST_P(PowerStatsAidl, TestGetStateResidencySelectedResultsExceptTimedEntities) { std::vector entities; ASSERT_OK(powerstats->getPowerEntityInfo(&entities)); if (entities.empty()) { @@ -223,8 +254,12 @@ TEST_P(PowerStatsAidl, TestGetStateResidencySelectedResults) { std::vector selectedEntities = getRandomSubset(entities); std::vector selectedIds; - for (auto const& entity : selectedEntities) { - selectedIds.push_back(entity.id); + for (auto it = selectedEntities.begin(); it != selectedEntities.end(); it++) { + if (!containsTimedEntity((*it).name)) { + selectedIds.push_back((*it).id); + } else { + selectedEntities.erase(it--); + } } std::vector selectedResults;