Remove usage of getStatus.
- remove from libaudiohal
- remove from services/radio
- remove from soundtrigger
- remove from omx
Bug: 31348667
Test: compiles
Change-Id: I75bb7b7388527dacfdc5bf128712cb8690bc286b
diff --git a/media/libaudiohal/ConversionHelperHidl.cpp b/media/libaudiohal/ConversionHelperHidl.cpp
index 1fabfbe..9f9eb75 100644
--- a/media/libaudiohal/ConversionHelperHidl.cpp
+++ b/media/libaudiohal/ConversionHelperHidl.cpp
@@ -82,26 +82,8 @@
}
}
-// static
-void ConversionHelperHidl::crashIfHalIsDead(const Status& status) {
- LOG_ALWAYS_FATAL_IF(
- status.transactionError() == DEAD_OBJECT, "HAL server crashed, need to restart");
-}
-
-status_t ConversionHelperHidl::processReturn(const char* funcName, const Status& status) {
- const status_t st = status.transactionError();
- ALOGE_IF(st, "%s %p %s: %s (from rpc)", mClassName, this, funcName, strerror(-st));
- crashIfHalIsDead(status);
- return st;
-}
-
-status_t ConversionHelperHidl::processReturn(
- const char* funcName, const Status& status, hardware::audio::V2_0::Result retval) {
- const status_t st = status.isOk() ? analyzeResult(retval) : status.transactionError();
- ALOGE_IF(!status.isOk() && st, "%s %p %s: %s (from rpc)",
- mClassName, this, funcName, strerror(-st));
- crashIfHalIsDead(status);
- return st;
+void ConversionHelperHidl::emitError(const char* funcName, const char* description) {
+ ALOGE("%s %p %s: %s (from rpc)", mClassName, this, funcName, description);
}
} // namespace android
diff --git a/media/libaudiohal/ConversionHelperHidl.h b/media/libaudiohal/ConversionHelperHidl.h
index 428daf2..89e6e88 100644
--- a/media/libaudiohal/ConversionHelperHidl.h
+++ b/media/libaudiohal/ConversionHelperHidl.h
@@ -30,9 +30,6 @@
namespace android {
class ConversionHelperHidl {
- public:
- static void crashIfHalIsDead(const Status& status);
-
protected:
static status_t keysFromHal(const String8& keys, hidl_vec<hidl_string> *hidlKeys);
static status_t parametersFromHal(const String8& kvPairs, hidl_vec<ParameterValue> *hidlParams);
@@ -40,18 +37,22 @@
ConversionHelperHidl(const char* className);
- status_t processReturn(const char* funcName, const Return<void>& ret) {
- return processReturn(funcName, ret.getStatus());
- }
-
template<typename R, typename T>
status_t processReturn(const char* funcName, const Return<R>& ret, T *retval) {
- if (ret.getStatus().isOk()) {
+ if (ret.isOk()) {
// This way it also works for enum class to unscoped enum conversion.
*retval = static_cast<T>(static_cast<R>(ret));
return OK;
}
- return processReturn(funcName, ret.getStatus());
+ return processReturn(funcName, ret);
+ }
+
+ template<typename T>
+ status_t processReturn(const char* funcName, const Return<T>& ret) {
+ if (!ret.isOk()) {
+ emitError(funcName, ret.description().c_str());
+ }
+ return ret.isOk() ? OK : UNKNOWN_ERROR;
}
status_t processReturn(const char* funcName, const Return<hardware::audio::V2_0::Result>& ret) {
@@ -61,16 +62,21 @@
template<typename T>
status_t processReturn(
const char* funcName, const Return<T>& ret, hardware::audio::V2_0::Result retval) {
- return processReturn(funcName, ret.getStatus(), retval);
+ const status_t st = ret.isOk() ? analyzeResult(retval) : UNKNOWN_ERROR;
+ if (!ret.isOk()) {
+ emitError(funcName, ret.description().c_str());
+ } else if (st) {
+ emitError(funcName, strerror(st));
+ }
+ return st;
}
private:
const char* mClassName;
static status_t analyzeResult(const hardware::audio::V2_0::Result& result);
- status_t processReturn(const char* funcName, const Status& status);
- status_t processReturn(
- const char* funcName, const Status& status, hardware::audio::V2_0::Result retval);
+
+ void emitError(const char* funcName, const char* description);
};
} // namespace android
diff --git a/media/libaudiohal/DevicesFactoryHalHidl.cpp b/media/libaudiohal/DevicesFactoryHalHidl.cpp
index efcc089..6444079 100644
--- a/media/libaudiohal/DevicesFactoryHalHidl.cpp
+++ b/media/libaudiohal/DevicesFactoryHalHidl.cpp
@@ -78,13 +78,12 @@
*device = new DeviceHalHidl(result);
}
});
- if (ret.getStatus().isOk()) {
+ if (ret.isOk()) {
if (retval == Result::OK) return OK;
else if (retval == Result::INVALID_ARGUMENTS) return BAD_VALUE;
else return NO_INIT;
}
- ConversionHelperHidl::crashIfHalIsDead(ret.getStatus());
- return ret.getStatus().transactionError();
+ return UNKNOWN_ERROR;
}
} // namespace android
diff --git a/media/libaudiohal/EffectHalHidl.cpp b/media/libaudiohal/EffectHalHidl.cpp
index 1cd1997..0a58fa0 100644
--- a/media/libaudiohal/EffectHalHidl.cpp
+++ b/media/libaudiohal/EffectHalHidl.cpp
@@ -103,8 +103,7 @@
effectDescriptorToHal(result, pDescriptor);
}
});
- ConversionHelperHidl::crashIfHalIsDead(ret.getStatus());
- return ret.getStatus().isOk() ? analyzeResult(retval) : ret.getStatus().transactionError();
+ return ret.isOk() ? analyzeResult(retval) : UNKNOWN_ERROR;
}
} // namespace android
diff --git a/media/libaudiohal/EffectsFactoryHalHidl.cpp b/media/libaudiohal/EffectsFactoryHalHidl.cpp
index bacbe4e..1ab5dad 100644
--- a/media/libaudiohal/EffectsFactoryHalHidl.cpp
+++ b/media/libaudiohal/EffectsFactoryHalHidl.cpp
@@ -43,7 +43,7 @@
return EffectIsNullUuid(pEffectUuid);
}
-EffectsFactoryHalHidl::EffectsFactoryHalHidl() {
+EffectsFactoryHalHidl::EffectsFactoryHalHidl() : ConversionHelperHidl("EffectsFactory"){
mEffectsFactory = IEffectsFactory::getService("audio_effects_factory");
}
@@ -60,12 +60,11 @@
mLastDescriptors = result;
}
});
- if (ret.getStatus().isOk()) {
+ if (ret.isOk()) {
return retval == Result::OK ? OK : NO_INIT;
}
mLastDescriptors.resize(0);
- ConversionHelperHidl::crashIfHalIsDead(ret.getStatus());
- return ret.getStatus().transactionError();
+ return processReturn(__FUNCTION__, ret);
}
status_t EffectsFactoryHalHidl::queryNumberEffects(uint32_t *pNumEffects) {
@@ -104,13 +103,12 @@
EffectHalHidl::effectDescriptorToHal(result, pDescriptor);
}
});
- if (ret.getStatus().isOk()) {
+ if (ret.isOk()) {
if (retval == Result::OK) return OK;
else if (retval == Result::INVALID_ARGUMENTS) return NAME_NOT_FOUND;
else return NO_INIT;
}
- ConversionHelperHidl::crashIfHalIsDead(ret.getStatus());
- return ret.getStatus().transactionError();
+ return processReturn(__FUNCTION__, ret);
}
status_t EffectsFactoryHalHidl::createEffect(
@@ -128,13 +126,12 @@
*effect = new EffectHalHidl(result, effectId);
}
});
- if (ret.getStatus().isOk()) {
+ if (ret.isOk()) {
if (retval == Result::OK) return OK;
else if (retval == Result::INVALID_ARGUMENTS) return NAME_NOT_FOUND;
else return NO_INIT;
}
- ConversionHelperHidl::crashIfHalIsDead(ret.getStatus());
- return ret.getStatus().transactionError();
+ return processReturn(__FUNCTION__, ret);
}
status_t EffectsFactoryHalHidl::dumpEffects(int fd) {
@@ -143,8 +140,7 @@
hidlHandle->data[0] = fd;
Return<void> ret = mEffectsFactory->debugDump(hidlHandle);
native_handle_delete(hidlHandle);
- ConversionHelperHidl::crashIfHalIsDead(ret.getStatus());
- return ret.getStatus().transactionError();
+ return processReturn(__FUNCTION__, ret);
}
} // namespace android
diff --git a/media/libaudiohal/EffectsFactoryHalHidl.h b/media/libaudiohal/EffectsFactoryHalHidl.h
index f16db17..e89f042 100644
--- a/media/libaudiohal/EffectsFactoryHalHidl.h
+++ b/media/libaudiohal/EffectsFactoryHalHidl.h
@@ -27,7 +27,7 @@
using ::android::hardware::audio::effect::V2_0::IEffectsFactory;
using ::android::hardware::hidl_vec;
-class EffectsFactoryHalHidl : public EffectsFactoryHalInterface
+class EffectsFactoryHalHidl : public EffectsFactoryHalInterface, public ConversionHelperHidl
{
public:
// Returns the number of different effects in all loaded libraries.
diff --git a/media/libaudiohal/StreamHalHidl.cpp b/media/libaudiohal/StreamHalHidl.cpp
index 7f8d663..5943e22 100644
--- a/media/libaudiohal/StreamHalHidl.cpp
+++ b/media/libaudiohal/StreamHalHidl.cpp
@@ -342,7 +342,7 @@
}
}
});
- if (!ret.getStatus().isOk() || retval != Result::OK) {
+ if (!ret.isOk() || retval != Result::OK) {
return processReturn("prepareForWriting", ret, retval);
}
if (!tempDataMQ || !tempDataMQ->isValid() || !tempStatusMQ || !tempStatusMQ->isValid()
@@ -456,7 +456,7 @@
timestamp->tv_nsec = hidlTimeStamp.tvNSec;
}
});
- if (ret.getStatus().isOk() && retval == Result::NOT_SUPPORTED) {
+ if (ret.isOk() && retval == Result::NOT_SUPPORTED) {
mGetPresentationPositionNotSupported = true;
}
return processReturn("getPresentationPosition", ret, retval);
@@ -570,7 +570,7 @@
}
}
});
- if (!ret.getStatus().isOk() || retval != Result::OK) {
+ if (!ret.isOk() || retval != Result::OK) {
return processReturn("prepareForReading", ret, retval);
}
if (!tempDataMQ || !tempDataMQ->isValid() || !tempStatusMQ || !tempStatusMQ->isValid()
diff --git a/media/libstagefright/omx/hal/1.0/Conversion.h b/media/libstagefright/omx/hal/1.0/Conversion.h
index 44d2c84..d42e5bf 100644
--- a/media/libstagefright/omx/hal/1.0/Conversion.h
+++ b/media/libstagefright/omx/hal/1.0/Conversion.h
@@ -2,7 +2,6 @@
#define ANDROID_HARDWARE_MEDIA_OMX_V1_0__CONVERSION_H
#include <hidl/MQDescriptor.h>
-#include <hidl/Status.h>
#include <unistd.h>
#include <vector>
@@ -147,13 +146,13 @@
*/
/**
- * \brief Convert `binder::Status` to `hardware::Status`.
+ * \brief Convert `binder::Status` to `Return<void>`.
*
* \param[in] l The source `binder::Status`.
- * \return The corresponding `hardware::Status`.
+ * \return The corresponding `Return<void>`.
*/
-// convert: ::android::binder::Status -> ::android::hardware::Status
-inline ::android::hardware::Status toHardwareStatus(
+// convert: ::android::binder::Status -> Return<void>
+inline Return<void> toHardwareStatus(
::android::binder::Status const& l) {
if (l.exceptionCode() == ::android::binder::Status::EX_SERVICE_SPECIFIC) {
return ::android::hardware::Status::fromServiceSpecificError(
@@ -166,36 +165,17 @@
}
/**
- * \brief Convert `hardware::Status` to `binder::Status`.
+ * \brief Convert `Return<void>` to `binder::Status`.
*
- * \param[in] t The source `hardware::Status`.
+ * \param[in] t The source `Return<void>`.
* \return The corresponding `binder::Status`.
*/
-// convert: ::android::hardware::Status -> ::android::binder::Status
+// convert: Return<void> -> ::android::binder::Status
inline ::android::binder::Status toBinderStatus(
- ::android::hardware::Status const& t) {
- if (t.exceptionCode() == ::android::hardware::Status::EX_SERVICE_SPECIFIC) {
- return ::android::binder::Status::fromServiceSpecificError(
- t.serviceSpecificErrorCode(),
- t.exceptionMessage());
- }
+ Return<void> const& t) {
return ::android::binder::Status::fromExceptionCode(
- t.exceptionCode(),
- t.exceptionMessage());
-}
-
-/**
- * \brief Convert `hardware::Return<void>` to `binder::Status`.
- *
- * \param[in] t The source `hardware::Return<void>`.
- * \return The corresponding `binder::Status`.
- *
- * This function simply calls `toBinderStatus(::android::hardware::Status
- * const&)`.
- */
-// convert: ::android::hardware::Return<void> -> ::android::binder::Status
-inline ::android::binder::Status toBinderStatus(Return<void> const& t) {
- return toBinderStatus(t.getStatus());
+ t.isOk() ? OK : UNKNOWN_ERROR,
+ t.description().c_str());
}
/**
@@ -215,8 +195,7 @@
*/
// convert: Status -> status_t
inline status_t toStatusT(Return<Status> const& t) {
- return t.isOk() ? static_cast<status_t>(static_cast<Status>(t)) :
- t.getStatus().transactionError();
+ return t.isOk() ? static_cast<status_t>(static_cast<Status>(t)) : UNKNOWN_ERROR;
}
/**
@@ -227,7 +206,7 @@
*/
// convert: Return<void> -> status_t
inline status_t toStatusT(Return<void> const& t) {
- return t.getStatus().transactionError();
+ return t.isOk() ? OK : UNKNOWN_ERROR;
}
/**
diff --git a/services/radio/RadioHalHidl.cpp b/services/radio/RadioHalHidl.cpp
index 182880a..34a6db7 100644
--- a/services/radio/RadioHalHidl.cpp
+++ b/services/radio/RadioHalHidl.cpp
@@ -39,11 +39,6 @@
return new RadioHalHidl(classId);
}
-void RadioHalHidl::crashIfHalIsDead(const Status& status) {
- LOG_ALWAYS_FATAL_IF(
- status.transactionError() == DEAD_OBJECT, "HAL server crashed, need to restart");
-}
-
int RadioHalHidl::getProperties(radio_hal_properties_t *properties)
{
ALOGV("%s IN", __FUNCTION__);
@@ -52,7 +47,7 @@
return -ENODEV;
}
Properties halProperties;
- Result halResult;
+ Result halResult = Result::NOT_INITIALIZED;
Return<void> hidlReturn =
module->getProperties([&](Result result, const Properties& properties) {
halResult = result;
@@ -61,7 +56,6 @@
}
});
- crashIfHalIsDead(hidlReturn.getStatus());
if (halResult == Result::OK) {
HidlUtils::convertPropertiesFromHal(properties, &halProperties);
}
@@ -80,7 +74,7 @@
sp<Tuner> tunerImpl = new Tuner(callback, this);
BandConfig halConfig;
- Result halResult;
+ Result halResult = Result::NOT_INITIALIZED;
sp<ITuner> halTuner;
HidlUtils::convertBandConfigToHal(&halConfig, config);
@@ -93,7 +87,6 @@
}
});
- crashIfHalIsDead(hidlReturn.getStatus());
if (halResult == Result::OK) {
tunerImpl->setHalTuner(halTuner);
tuner = tunerImpl;
@@ -154,7 +147,6 @@
HidlUtils::convertBandConfigToHal(&halConfig, config);
Return<Result> hidlResult = mHalTuner->setConfiguration(halConfig);
- checkHidlStatus(hidlResult.getStatus());
return HidlUtils::convertHalResult(hidlResult);
}
@@ -173,8 +165,7 @@
halConfig = config;
}
});
- status_t status = checkHidlStatus(hidlReturn.getStatus());
- if (status == NO_ERROR && halResult == Result::OK) {
+ if (hidlReturn.isOk() && halResult == Result::OK) {
HidlUtils::convertBandConfigFromHal(config, &halConfig);
}
return HidlUtils::convertHalResult(halResult);
@@ -188,7 +179,6 @@
}
Return<Result> hidlResult =
mHalTuner->scan(static_cast<Direction>(direction), skip_sub_channel);
- checkHidlStatus(hidlResult.getStatus());
return HidlUtils::convertHalResult(hidlResult);
}
@@ -200,7 +190,6 @@
}
Return<Result> hidlResult =
mHalTuner->step(static_cast<Direction>(direction), skip_sub_channel);
- checkHidlStatus(hidlResult.getStatus());
return HidlUtils::convertHalResult(hidlResult);
}
@@ -212,7 +201,6 @@
}
Return<Result> hidlResult =
mHalTuner->tune(channel, sub_channel);
- checkHidlStatus(hidlResult.getStatus());
return HidlUtils::convertHalResult(hidlResult);
}
@@ -223,7 +211,6 @@
return -ENODEV;
}
Return<Result> hidlResult = mHalTuner->cancel();
- checkHidlStatus(hidlResult.getStatus());
return HidlUtils::convertHalResult(hidlResult);
}
@@ -245,8 +232,7 @@
halInfo = info;
}
});
- status_t status = checkHidlStatus(hidlReturn.getStatus());
- if (status == NO_ERROR && halResult == Result::OK) {
+ if (hidlReturn.isOk() && halResult == Result::OK) {
HidlUtils::convertProgramInfoFromHal(info, &halInfo);
}
return HidlUtils::convertHalResult(halResult);
@@ -368,16 +354,6 @@
mHalTuner.clear();
}
-status_t RadioHalHidl::Tuner::checkHidlStatus(Status hidlStatus)
-{
- status_t status = hidlStatus.transactionError();
- if (status == DEAD_OBJECT) {
- handleHwFailure();
- }
- RadioHalHidl::crashIfHalIsDead(hidlStatus);
- return status;
-}
-
void RadioHalHidl::Tuner::onCallback(radio_hal_event_t *halEvent)
{
if (mCallback != 0) {
diff --git a/services/radio/RadioHalHidl.h b/services/radio/RadioHalHidl.h
index 1657a40..b60a95e 100644
--- a/services/radio/RadioHalHidl.h
+++ b/services/radio/RadioHalHidl.h
@@ -45,8 +45,6 @@
public:
RadioHalHidl(radio_class_t classId);
- static void crashIfHalIsDead(const Status& status);
-
// RadioInterface
virtual int getProperties(radio_hal_properties_t *properties);
virtual int openTuner(const radio_hal_band_config_t *config,
@@ -88,7 +86,6 @@
void onCallback(radio_hal_event_t *halEvent);
void handleHwFailure();
- status_t checkHidlStatus(Status hidlStatus);
sp<ITuner> mHalTuner;
sp<TunerCallbackInterface> mCallback;
diff --git a/services/soundtrigger/SoundTriggerHalHidl.cpp b/services/soundtrigger/SoundTriggerHalHidl.cpp
index c027799..eb9d38d 100644
--- a/services/soundtrigger/SoundTriggerHalHidl.cpp
+++ b/services/soundtrigger/SoundTriggerHalHidl.cpp
@@ -53,13 +53,13 @@
});
}
- if (hidlReturn.getStatus().isOk()) {
+ if (hidlReturn.isOk()) {
if (ret == 0) {
convertPropertiesFromHal(properties, &halProperties);
}
} else {
- ret = (int)hidlReturn.getStatus().transactionError();
- crashIfHalIsDead(ret);
+ ALOGE("getProperties error %s", hidlReturn.description().c_str());
+ return UNKNOWN_ERROR;
}
ALOGI("getProperties ret %d", ret);
return ret;
@@ -123,7 +123,7 @@
delete halSoundModel;
- if (hidlReturn.getStatus().isOk()) {
+ if (hidlReturn.isOk()) {
if (ret == 0) {
AutoMutex lock(mLock);
*handle = (sound_model_handle_t)modelId;
@@ -131,12 +131,10 @@
mSoundModels.add(*handle, model);
}
} else {
- ret = (int)hidlReturn.getStatus().transactionError();
- ALOGE("loadSoundModel error %d", ret);
- crashIfHalIsDead(ret);
+ ALOGE("loadSoundModel error %s", hidlReturn.description().c_str());
+ return UNKNOWN_ERROR;
}
-
return ret;
}
@@ -158,13 +156,13 @@
AutoMutex lock(mHalLock);
hidlReturn = soundtrigger->unloadSoundModel(model->mHalHandle);
}
- int ret = (int)hidlReturn.getStatus().transactionError();
- ALOGE_IF(ret != 0, "unloadSoundModel error %d", ret);
- crashIfHalIsDead(ret);
- if (ret == 0) {
- ret = hidlReturn;
+
+ if (!hidlReturn.isOk()) {
+ ALOGE("unloadSoundModel error %s", hidlReturn.description().c_str());
+ return UNKNOWN_ERROR;
}
- return ret;
+
+ return hidlReturn;
}
int SoundTriggerHalHidl::startRecognition(sound_model_handle_t handle,
@@ -197,13 +195,11 @@
delete halConfig;
- int ret = (int)hidlReturn.getStatus().transactionError();
- ALOGE_IF(ret != 0, "startRecognition error %d", ret);
- crashIfHalIsDead(ret);
- if (ret == 0) {
- ret = hidlReturn;
+ if (!hidlReturn.isOk()) {
+ ALOGE("startRecognition error %s", hidlReturn.description().c_str());
+ return UNKNOWN_ERROR;
}
- return ret;
+ return hidlReturn;
}
int SoundTriggerHalHidl::stopRecognition(sound_model_handle_t handle)
@@ -225,13 +221,11 @@
hidlReturn = soundtrigger->stopRecognition(model->mHalHandle);
}
- int ret = (int)hidlReturn.getStatus().transactionError();
- ALOGE_IF(ret != 0, "stopRecognition error %d", ret);
- crashIfHalIsDead(ret);
- if (ret == 0) {
- ret = hidlReturn;
+ if (!hidlReturn.isOk()) {
+ ALOGE("stopRecognition error %s", hidlReturn.description().c_str());
+ return UNKNOWN_ERROR;
}
- return ret;
+ return hidlReturn;
}
int SoundTriggerHalHidl::stopAllRecognitions()
@@ -247,13 +241,11 @@
hidlReturn = soundtrigger->stopAllRecognitions();
}
- int ret = (int)hidlReturn.getStatus().transactionError();
- ALOGE_IF(ret != 0, "stopAllRecognitions error %d", ret);
- crashIfHalIsDead(ret);
- if (ret == 0) {
- ret = hidlReturn;
+ if (!hidlReturn.isOk()) {
+ ALOGE("stopAllRecognitions error %s", hidlReturn.description().c_str());
+ return UNKNOWN_ERROR;
}
- return ret;
+ return hidlReturn;
}
SoundTriggerHalHidl::SoundTriggerHalHidl(const char *moduleName)
@@ -279,11 +271,6 @@
return mISoundTrigger;
}
-void SoundTriggerHalHidl::crashIfHalIsDead(int ret)
-{
- LOG_ALWAYS_FATAL_IF(ret == -EPIPE, "HAL server crashed, need to restart");
-}
-
sp<SoundTriggerHalHidl::SoundModel> SoundTriggerHalHidl::getModel(sound_model_handle_t handle)
{
AutoMutex lock(mLock);
diff --git a/services/soundtrigger/SoundTriggerHalHidl.h b/services/soundtrigger/SoundTriggerHalHidl.h
index b235e1c..f084b2b 100644
--- a/services/soundtrigger/SoundTriggerHalHidl.h
+++ b/services/soundtrigger/SoundTriggerHalHidl.h
@@ -143,7 +143,6 @@
uint32_t nextUniqueId();
sp<ISoundTriggerHw> getService();
- void crashIfHalIsDead(int ret);
sp<SoundModel> getModel(sound_model_handle_t handle);
sp<SoundModel> removeModel(sound_model_handle_t handle);