diff options
| author | Benjamin Schwartz <bsschwar@google.com> | 2021-03-12 01:01:35 +0000 |
|---|---|---|
| committer | Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com> | 2021-03-12 01:01:35 +0000 |
| commit | 4abdf481ec76a329bada53c9a837f0f76df4b3cc (patch) | |
| tree | c4b21574bf47b681a46ce346a22139e0e997b497 | |
| parent | a26fdc46691103f39083bb43c9fc3bee31e61c3b (diff) | |
| parent | 3dd0588218311801ade4e74ad5cbc37569722e48 (diff) | |
Merge "power/stats: Return exception codes on error" am: 777542355a am: 3dd0588218
Original change: https://android-review.googlesource.com/c/platform/hardware/interfaces/+/1626963
MUST ONLY BE SUBMITTED BY AUTOMERGER
Change-Id: I2a54a2ed50c042858dbc774b259df7811b06b7a6
| -rw-r--r-- | power/stats/aidl/android/hardware/power/stats/IPowerStats.aidl | 39 | ||||
| -rw-r--r-- | power/stats/aidl/default/FakeEnergyMeter.h | 7 | ||||
| -rw-r--r-- | power/stats/aidl/default/PowerStats.cpp | 24 |
3 files changed, 36 insertions, 34 deletions
diff --git a/power/stats/aidl/android/hardware/power/stats/IPowerStats.aidl b/power/stats/aidl/android/hardware/power/stats/IPowerStats.aidl index 7a95f744d0..edc43ea400 100644 --- a/power/stats/aidl/android/hardware/power/stats/IPowerStats.aidl +++ b/power/stats/aidl/android/hardware/power/stats/IPowerStats.aidl @@ -32,7 +32,7 @@ interface IPowerStats { * A PowerEntity is defined as a platform subsystem, peripheral, or power domain that impacts * the total device power consumption. * - * @return List of information on each PowerEntity + * @return List of information on each PowerEntity for which state residency can be requested. */ PowerEntity[] getPowerEntityInfo(); @@ -52,11 +52,12 @@ interface IPowerStats { * Passing an empty list will return state residency for all available PowerEntitys. * ID of each PowerEntity is contained in PowerEntityInfo. * - * @return StateResidency since boot for each requested PowerEntity + * @return StateResidencyResults since boot for each requested and available PowerEntity. Note + * that StateResidencyResult for a given PowerEntity may not always be available. Clients shall + * not rely on StateResidencyResult always being returned for every request. * - * Returns the following service-specific exceptions in order of highest priority: - * - STATUS_BAD_VALUE if an invalid powerEntityId is provided - * - STATUS_FAILED_TRANSACTION if any StateResidencyResult fails to be returned + * Returns the following exception codes: + * - EX_ILLEGAL_ARGUMENT if an invalid powerEntityId is provided */ StateResidencyResult[] getStateResidency(in int[] powerEntityIds); @@ -66,7 +67,7 @@ interface IPowerStats { * An EnergyConsumer is a device subsystem or peripheral that consumes energy. Energy * consumption data may be used by framework for the purpose of power attribution. * - * @return List of EnergyConsumers that are available. + * @return List of EnergyConsumers for which energy consumption can be requested. */ EnergyConsumer[] getEnergyConsumerInfo(); @@ -74,38 +75,40 @@ interface IPowerStats { * Reports the energy consumed since boot by each requested EnergyConsumer. * * @param energyConsumerIds List of IDs of EnergyConsumers for which data is requested. - * Passing an empty list will return state residency for all available EnergyConsumers. + * Passing an empty list will return results for all available EnergyConsumers. * - * @return Energy consumed since boot for each requested EnergyConsumer + * @return Energy consumed since boot for each requested and available EnergyConsumer. Note + * that EnergyConsumerResult for a given EnergyConsumer may not always be available. Clients + * shall not rely on EnergyConsumerResult always being returned for every request. * - * Returns the following service-specific exceptions in order of highest priority: - * - STATUS_BAD_VALUE if an invalid energyConsumerId is provided - * - STATUS_FAILED_TRANSACTION if any EnergyConsumerResult fails to be returned + * Returns the following exception codes: + * - EX_ILLEGAL_ARGUMENT if an invalid energyConsumerId is provided */ EnergyConsumerResult[] getEnergyConsumed(in int[] energyConsumerIds); /** - * Return information related to all channels monitored by Energy Meters. + * Return information related to all Channels monitored by Energy Meters. * * An Energy Meter is a device that monitors energy and may support monitoring multiple * channels simultaneously. A channel may correspond a bus, sense resistor, or power rail. * - * @return Channels monitored by Energy Meters. + * @return All Channels for which energy measurements can be requested. */ Channel[] getEnergyMeterInfo(); /** - * Reports accumulated energy for each specified channel. + * Reports accumulated energy for each specified Channel. * * @param channelIds IDs of channels for which data is requested. * Passing an empty list will return energy measurements for all available channels. * ID of each channel is contained in ChannelInfo. * - * @return Energy measured since boot for each requested channel + * @return Energy measured since boot for each requested and available Channel. Note + * that EnergyMeasurement for a given Channel may not always be available. Clients + * shall not rely on EnergyMeasurement always being returned for every request. * - * Returns the following service-specific exceptions in order of highest priority: - * - STATUS_BAD_VALUE if an invalid channelId is provided - * - STATUS_FAILED_TRANSACTION if any EnergyMeasurement fails to be returned + * Returns the following exception codes: + * - EX_ILLEGAL_ARGUMENT if an invalid channelId is provided */ EnergyMeasurement[] readEnergyMeter(in int[] channelIds); } diff --git a/power/stats/aidl/default/FakeEnergyMeter.h b/power/stats/aidl/default/FakeEnergyMeter.h index f0d4ee7dfc..56dcdcca78 100644 --- a/power/stats/aidl/default/FakeEnergyMeter.h +++ b/power/stats/aidl/default/FakeEnergyMeter.h @@ -60,9 +60,12 @@ class FakeEnergyMeter : public PowerStats::IEnergyMeter { *_aidl_return = mEnergyMeasurements; } else { for (int32_t id : in_channelIds) { - if (id >= 0 && id < mEnergyMeasurements.size()) { - _aidl_return->push_back(mEnergyMeasurements[id]); + // check for invalid ids + if (id < 0 || id >= mEnergyMeasurements.size()) { + return ndk::ScopedAStatus(AStatus_fromExceptionCode(EX_ILLEGAL_ARGUMENT)); } + + _aidl_return->push_back(mEnergyMeasurements[id]); } } diff --git a/power/stats/aidl/default/PowerStats.cpp b/power/stats/aidl/default/PowerStats.cpp index 13735026c5..7cf591eb66 100644 --- a/power/stats/aidl/default/PowerStats.cpp +++ b/power/stats/aidl/default/PowerStats.cpp @@ -81,14 +81,12 @@ ndk::ScopedAStatus PowerStats::getStateResidency(const std::vector<int32_t>& in_ return getStateResidency(v, _aidl_return); } - binder_status_t err = STATUS_OK; - std::unordered_map<std::string, std::vector<StateResidency>> stateResidencies; for (const int32_t id : in_powerEntityIds) { - // skip any invalid ids + // check for invalid ids if (id < 0 || id >= mPowerEntityInfos.size()) { - continue; + return ndk::ScopedAStatus(AStatus_fromExceptionCode(EX_ILLEGAL_ARGUMENT)); } // Check to see if we already have data for the given id @@ -106,12 +104,12 @@ ndk::ScopedAStatus PowerStats::getStateResidency(const std::vector<int32_t>& in_ }; _aidl_return->emplace_back(res); } else { - // Failed to retrieve results for the given id. - err = STATUS_FAILED_TRANSACTION; + // Failed to get results for the given id. + LOG(ERROR) << "Failed to get results for " << powerEntityName; } } - return ndk::ScopedAStatus::fromStatus(err); + return ndk::ScopedAStatus::ok(); } ndk::ScopedAStatus PowerStats::getEnergyConsumerInfo(std::vector<EnergyConsumer>* _aidl_return) { @@ -132,12 +130,10 @@ ndk::ScopedAStatus PowerStats::getEnergyConsumed(const std::vector<int32_t>& in_ return getEnergyConsumed(v, _aidl_return); } - binder_status_t err = STATUS_OK; - for (const auto id : in_energyConsumerIds) { - // skip any invalid ids + // check for invalid ids if (id < 0 || id >= mEnergyConsumers.size()) { - continue; + return ndk::ScopedAStatus(AStatus_fromExceptionCode(EX_ILLEGAL_ARGUMENT)); } auto optionalResult = mEnergyConsumers[id]->getEnergyConsumed(); @@ -146,12 +142,12 @@ ndk::ScopedAStatus PowerStats::getEnergyConsumed(const std::vector<int32_t>& in_ result.id = id; _aidl_return->emplace_back(result); } else { - // Failed to retrieve results for the given id. - err = STATUS_FAILED_TRANSACTION; + // Failed to get results for the given id. + LOG(ERROR) << "Failed to get results for " << mEnergyConsumerInfos[id].name; } } - return ndk::ScopedAStatus::fromStatus(err); + return ndk::ScopedAStatus::ok(); } ndk::ScopedAStatus PowerStats::getEnergyMeterInfo(std::vector<Channel>* _aidl_return) { |
