Merge "Migrate Test Targets to New Android Ownership Model" into main am: 5f52ebbf0f am: 6acc4f4edb Original change: https://android-review.googlesource.com/c/platform/hardware/google/av/+/2946230 Change-Id: If0d0f45df7b0b022bc803461c97a1d17af3a68b7 Signed-off-by: Automerger Merge Worker <[email protected]>
diff --git a/media/eco/Android.bp b/media/eco/Android.bp index 7fcb676..2a9e2a8 100644 --- a/media/eco/Android.bp +++ b/media/eco/Android.bp
@@ -17,15 +17,16 @@ unstable: true, backend: { cpp: { + enabled: false, + }, + ndk: { enabled: true, + apps_enabled: false, additional_shared_libraries: [ "libmedia_ecoservice_ecodata", "libbinder_ndk", ], }, - ndk: { - enabled: false, - }, java: { enabled: false, }, @@ -49,7 +50,6 @@ shared_libs: [ "libbase", - "libbinder", "libbinder_ndk", "liblog", "libutils", @@ -90,10 +90,9 @@ ], whole_static_libs: [ "libmedia_ecoservice_ecodata", - "libmedia_ecoservice_aidl-cpp", + "libmedia_ecoservice_aidl-ndk", ], shared_libs: [ - "libbinder", "libbinder_ndk", "libcutils", "liblog", @@ -101,7 +100,6 @@ "[email protected]", ], export_shared_lib_headers: [ - "libbinder", "libbinder_ndk", ],
diff --git a/media/eco/ECOData.cpp b/media/eco/ECOData.cpp index 3d7b533..4010112 100644 --- a/media/eco/ECOData.cpp +++ b/media/eco/ECOData.cpp
@@ -19,7 +19,8 @@ #include "eco/ECOData.h" -#include <binder/Parcel.h> +#include <android/binder_parcel.h> +#include <android/binder_parcel_utils.h> #include <inttypes.h> #include <utils/Errors.h> #include <utils/Log.h> @@ -29,81 +30,76 @@ #include "eco/ECODataKey.h" #include "eco/ECOUtils.h" +namespace aidl { namespace android { namespace media { namespace eco { using namespace ::android; -status_t ECOData::readFromParcel(const Parcel* parcel) { +binder_status_t ECOData::readFromParcel(const AParcel* parcel) { if (parcel == nullptr) { ALOGE("readFromParcel failed. Parcel pointer can not be null"); return BAD_VALUE; } // Reads the data type and time. - RETURN_STATUS_IF_ERROR(parcel->readInt32(&mDataType)); - RETURN_STATUS_IF_ERROR(parcel->readInt64(&mDataTimeUs)); + RETURN_STATUS_IF_ERROR(AParcel_readInt32(parcel, &mDataType)); + RETURN_STATUS_IF_ERROR(AParcel_readInt64(parcel, &mDataTimeUs)); // Reads the number of items. uint32_t numOfItems = 0; - RETURN_STATUS_IF_ERROR(parcel->readUint32(&numOfItems)); + RETURN_STATUS_IF_ERROR(AParcel_readUint32(parcel, &numOfItems)); // Reads the key-value pairs one by one. for (size_t i = 0; i < numOfItems; ++i) { // Reads the name of the key. - const char* name = parcel->readCString(); - if (name == NULL) { - ALOGE("Failed reading name for the key. Parsing aborted."); - return NAME_NOT_FOUND; - } + std::string name; + AParcel_readString(parcel, &name, ndk::AParcel_stdStringAllocator); int32_t type; - RETURN_STATUS_IF_ERROR(parcel->readInt32(&type)); + RETURN_STATUS_IF_ERROR(AParcel_readInt32(parcel, &type)); switch (static_cast<ValueType>(type)) { case kTypeInt32: { int32_t value32; - RETURN_STATUS_IF_ERROR(parcel->readInt32(&value32)); - setInt32(std::string(name), value32); + RETURN_STATUS_IF_ERROR(AParcel_readInt32(parcel, &value32)); + setInt32(name, value32); break; } case kTypeInt64: { int64_t value64; - RETURN_STATUS_IF_ERROR(parcel->readInt64(&value64)); - setInt64(std::string(name), value64); + RETURN_STATUS_IF_ERROR(AParcel_readInt64(parcel, &value64)); + setInt64(name, value64); break; } case kTypeSize: { int32_t valueSize; - RETURN_STATUS_IF_ERROR(parcel->readInt32(&valueSize)); - setInt32(std::string(name), valueSize); + RETURN_STATUS_IF_ERROR(AParcel_readInt32(parcel, &valueSize)); + setInt32(name, valueSize); break; } case kTypeFloat: { float valueFloat; - RETURN_STATUS_IF_ERROR(parcel->readFloat(&valueFloat)); - setFloat(std::string(name), valueFloat); + RETURN_STATUS_IF_ERROR(AParcel_readFloat(parcel, &valueFloat)); + setFloat(name, valueFloat); break; } case kTypeDouble: { double valueDouble; - RETURN_STATUS_IF_ERROR(parcel->readDouble(&valueDouble)); - setDouble(std::string(name), valueDouble); + RETURN_STATUS_IF_ERROR(AParcel_readDouble(parcel, &valueDouble)); + setDouble(name, valueDouble); break; } case kTypeString: { - const char* valueStr = parcel->readCString(); - if (valueStr == NULL) { - ALOGE("Failed reading name for the key. Parsing aborted."); - return NAME_NOT_FOUND; - } - setString(std::string(name), valueStr); + std::string valueString; + AParcel_readString(parcel, &valueString, ndk::AParcel_stdStringAllocator); + setString(name, valueString); break; } case kTypeInt8: { int8_t value8; - RETURN_STATUS_IF_ERROR(parcel->readByte(&value8)); - setInt8(std::string(name), value8); + RETURN_STATUS_IF_ERROR(AParcel_readByte(parcel, &value8)); + setInt8(name, value8); break; } default: { @@ -115,54 +111,57 @@ return NO_ERROR; } -status_t ECOData::writeToParcel(Parcel* parcel) const { +binder_status_t ECOData::writeToParcel(AParcel* parcel) const { if (parcel == nullptr) { ALOGE("writeToParcel failed. Parcel pointer can not be null"); return BAD_VALUE; } // Writes out the data type and time. - RETURN_STATUS_IF_ERROR(parcel->writeInt32(mDataType)); - RETURN_STATUS_IF_ERROR(parcel->writeInt64(mDataTimeUs)); + RETURN_STATUS_IF_ERROR(AParcel_writeInt32(parcel, mDataType)); + RETURN_STATUS_IF_ERROR(AParcel_writeInt64(parcel, mDataTimeUs)); // Writes out number of items. - RETURN_STATUS_IF_ERROR(parcel->writeUint32(int32_t(mKeyValueStore.size()))); + RETURN_STATUS_IF_ERROR(AParcel_writeUint32(parcel, int32_t(mKeyValueStore.size()))); // Writes out the key-value pairs one by one. for (const auto& it : mKeyValueStore) { // Writes out the key. - RETURN_STATUS_IF_ERROR(parcel->writeCString(it.first.c_str())); + RETURN_STATUS_IF_ERROR(AParcel_writeString(parcel, it.first.c_str(), + static_cast<int32_t>(it.first.size()))); // Writes out the data type. const ECODataValueType& value = it.second; - RETURN_STATUS_IF_ERROR(parcel->writeInt32(static_cast<int32_t>(value.index()))); + RETURN_STATUS_IF_ERROR(AParcel_writeInt32(parcel, static_cast<int32_t>(value.index()))); switch (static_cast<ValueType>(value.index())) { case kTypeInt32: - RETURN_STATUS_IF_ERROR(parcel->writeInt32(std::get<int32_t>(it.second))); + RETURN_STATUS_IF_ERROR(AParcel_writeInt32(parcel, std::get<int32_t>(it.second))); break; case kTypeInt64: - RETURN_STATUS_IF_ERROR(parcel->writeInt64(std::get<int64_t>(it.second))); + RETURN_STATUS_IF_ERROR(AParcel_writeInt64(parcel, std::get<int64_t>(it.second))); break; case kTypeSize: - RETURN_STATUS_IF_ERROR(parcel->writeUint32(std::get<size_t>(it.second))); + RETURN_STATUS_IF_ERROR(AParcel_writeUint32(parcel, std::get<size_t>(it.second))); break; case kTypeFloat: - RETURN_STATUS_IF_ERROR(parcel->writeFloat(std::get<float>(it.second))); + RETURN_STATUS_IF_ERROR(AParcel_writeFloat(parcel, std::get<float>(it.second))); break; case kTypeDouble: - RETURN_STATUS_IF_ERROR(parcel->writeDouble(std::get<double>(it.second))); + RETURN_STATUS_IF_ERROR(AParcel_writeDouble(parcel, std::get<double>(it.second))); break; case kTypeString: - RETURN_STATUS_IF_ERROR(parcel->writeCString(std::get<std::string>(it.second).c_str())); + RETURN_STATUS_IF_ERROR(AParcel_writeString( + parcel, std::get<std::string>(it.second).c_str(), + static_cast<int32_t>(std::get<std::string>(it.second).size()))); break; case kTypeInt8: - RETURN_STATUS_IF_ERROR(parcel->writeByte(std::get<int8_t>(it.second))); + RETURN_STATUS_IF_ERROR(AParcel_writeByte(parcel, std::get<int8_t>(it.second))); break; default: @@ -423,3 +422,4 @@ } // namespace eco } // namespace media } // namespace android +} // namespace aidl
diff --git a/media/eco/ECODebug.cpp b/media/eco/ECODebug.cpp index 5ed08ab..4b82025 100644 --- a/media/eco/ECODebug.cpp +++ b/media/eco/ECODebug.cpp
@@ -16,6 +16,8 @@ #include "eco/ECODebug.h" +#include <utils/Log.h> + namespace android { namespace media { namespace eco {
diff --git a/media/eco/ECOService.cpp b/media/eco/ECOService.cpp index 434485f..557e24a 100644 --- a/media/eco/ECOService.cpp +++ b/media/eco/ECOService.cpp
@@ -42,9 +42,9 @@ updateLogLevel(); } -/*virtual*/ ::android::binder::Status ECOService::obtainSession( +/*virtual*/ ::ndk::ScopedAStatus ECOService::obtainSession( int32_t width, int32_t height, bool isCameraRecording, - ::android::sp<::android::media::eco::IECOSession>* _aidl_return) { + std::shared_ptr<::android::media::eco::IECOSession>* _aidl_return) { ECOLOGI("ECOService::obtainSession w: %d, h: %d, isCameraRecording: %d", width, height, isCameraRecording); @@ -72,18 +72,19 @@ // invalid sessions. SanitizeSession([&](MapIterType iter) { if (iter->first == newCfg) { - sp<ECOSession> session = iter->second.promote(); + std::shared_ptr<ECOSession> session = iter->second.lock(); foundSession = true; *_aidl_return = session; } }); if (foundSession) { - return binder::Status::ok(); + return ndk::ScopedAStatus::ok(); } // Create a new session and add it to the record. - sp<ECOSession> newSession = ECOSession::createECOSession(width, height, isCameraRecording); + std::shared_ptr<ECOSession> newSession = + ECOSession::createECOSession(width, height, isCameraRecording); if (newSession == nullptr) { ECOLOGE("ECOService failed to create ECOSession w: %d, h: %d, isCameraRecording: %d", width, height, isCameraRecording); @@ -94,36 +95,36 @@ mSessionConfigToSessionMap[newCfg] = newSession; ECOLOGD("session count after is %zu", mSessionConfigToSessionMap.size()); - return binder::Status::ok(); + return ndk::ScopedAStatus::ok(); } -/*virtual*/ ::android::binder::Status ECOService::getNumOfSessions(int32_t* _aidl_return) { +/*virtual*/ ::ndk::ScopedAStatus ECOService::getNumOfSessions(int32_t* _aidl_return) { Mutex::Autolock lock(mServiceLock); SanitizeSession(std::function<void(MapIterType it)>()); // empty callback *_aidl_return = mSessionConfigToSessionMap.size(); - return binder::Status::ok(); + return ndk::ScopedAStatus::ok(); } -/*virtual*/ ::android::binder::Status ECOService::getSessions( - ::std::vector<::android::sp<::android::IBinder>>* _aidl_return) { +/*virtual*/ ::ndk::ScopedAStatus ECOService::getSessions( + std::vector<::ndk::SpAIBinder>* _aidl_return) { // Clear all the entries in the vector. _aidl_return->clear(); Mutex::Autolock lock(mServiceLock); SanitizeSession([&](MapIterType iter) { - sp<ECOSession> session = iter->second.promote(); - _aidl_return->push_back(IInterface::asBinder(session)); + std::shared_ptr<ECOSession> session = iter->second.lock(); + _aidl_return->push_back(session->asBinder()); }); - return binder::Status::ok(); + return ndk::ScopedAStatus::ok(); } -inline bool isEmptySession(const android::wp<ECOSession>& entry) { - sp<ECOSession> session = entry.promote(); +inline bool isEmptySession(const std::weak_ptr<ECOSession>& entry) { + std::shared_ptr<ECOSession> session = entry.lock(); return session == nullptr; } void ECOService::SanitizeSession( - const std::function<void(std::unordered_map<SessionConfig, wp<ECOSession>, + const std::function<void(std::unordered_map<SessionConfig, std::weak_ptr<ECOSession>, SessionConfigHash>::iterator it)>& callback) { for (auto it = mSessionConfigToSessionMap.begin(), end = mSessionConfigToSessionMap.end(); it != end;) { @@ -138,15 +139,15 @@ } } -/*virtual*/ void ECOService::binderDied(const wp<IBinder>& /*who*/) {} +/*virtual*/ void ECOService::binderDied(const std::weak_ptr<AIBinder>& /*who*/) {} -status_t ECOService::dump(int fd, const Vector<String16>& args) { +status_t ECOService::dump(int fd, const std::vector<std::string>& args) { Mutex::Autolock lock(mServiceLock); dprintf(fd, "\n== ECO Service info: ==\n\n"); dprintf(fd, "Number of ECOServices: %zu\n", mSessionConfigToSessionMap.size()); for (auto it = mSessionConfigToSessionMap.begin(), end = mSessionConfigToSessionMap.end(); it != end; it++) { - sp<ECOSession> session = it->second.promote(); + std::shared_ptr<ECOSession> session = std::shared_ptr<ECOSession>(it->second); if (session != nullptr) { session->dump(fd, args); }
diff --git a/media/eco/ECOServiceStatsProvider.cpp b/media/eco/ECOServiceStatsProvider.cpp index 90f1a23..683b7a1 100644 --- a/media/eco/ECOServiceStatsProvider.cpp +++ b/media/eco/ECOServiceStatsProvider.cpp
@@ -16,18 +16,18 @@ //#define LOG_NDEBUG 0 #define LOG_TAG "ECOServiceStatsProvider" +#include <android/binder_manager.h> #include <eco/ECOServiceStatsProvider.h> - -#include <binder/IServiceManager.h> #include <utils/Timers.h> namespace android { namespace media { namespace eco { -ECOServiceStatsProvider::ECOServiceStatsProvider( - int32_t width, int32_t height, bool isCameraRecording, - android::sp<IECOSession>& session, const char* name) +ECOServiceStatsProvider::ECOServiceStatsProvider(int32_t width, int32_t height, + bool isCameraRecording, + std::shared_ptr<IECOSession>& session, + const char* name) : BnECOServiceStatsProvider(), mWidth(width), mHeight(height), @@ -38,32 +38,32 @@ __func__, mWidth, mHeight, isCameraRecording, name); } -Status ECOServiceStatsProvider::getType(int32_t* _aidl_return) { +ScopedAStatus ECOServiceStatsProvider::getType(int32_t* _aidl_return) { *_aidl_return = STATS_PROVIDER_TYPE_VIDEO_ENCODER; - return Status::ok(); + return ScopedAStatus::ok(); } -Status ECOServiceStatsProvider::getName(::android::String16* _aidl_return) { - *_aidl_return = String16(mProviderName); - return Status::ok(); +ScopedAStatus ECOServiceStatsProvider::getName(std::string* _aidl_return) { + *_aidl_return = std::string(mProviderName); + return ScopedAStatus::ok(); } -Status ECOServiceStatsProvider::getECOSession(android::sp<::android::IBinder>* _aidl_return) { - *_aidl_return = IInterface::asBinder(mECOSession); - return Status::ok(); +ScopedAStatus ECOServiceStatsProvider::getECOSession(::ndk::SpAIBinder* _aidl_return) { + *_aidl_return = mECOSession->asBinder(); + return ScopedAStatus::ok(); } -Status ECOServiceStatsProvider::isCameraRecording(bool* _aidl_return) { +ScopedAStatus ECOServiceStatsProvider::isCameraRecording(bool* _aidl_return) { *_aidl_return = mIsCameraRecording; - return Status::ok(); + return ScopedAStatus::ok(); } -void ECOServiceStatsProvider::binderDied(const wp<IBinder>& /* who */) {} +void ECOServiceStatsProvider::binderDied(const std::weak_ptr<AIBinder>& /* who */) {} bool ECOServiceStatsProvider::updateStats(const ECOData& data) { bool ret = false; if (mECOSession) { - Status status = mECOSession->pushNewStats(data, &ret); + ScopedAStatus status = mECOSession->pushNewStats(data, &ret); return ret; } return ret; @@ -73,7 +73,7 @@ bool ret = false; if (mECOSession) { ECOData providerConfig(ECOData::DATA_TYPE_STATS_PROVIDER_CONFIG, systemTime() / 1000); - mECOSession->addStatsProvider(this, providerConfig, &ret); + mECOSession->addStatsProvider(fromBinder(asBinder()), providerConfig, &ret); return ret; } return ret; @@ -82,28 +82,27 @@ bool ECOServiceStatsProvider::removeProvider() { bool ret = false; if (mECOSession) { - mECOSession->removeStatsProvider(this, &ret); + mECOSession->removeStatsProvider(fromBinder(asBinder()), &ret); return ret; } return ret; } -android::sp<ECOServiceStatsProvider> ECOServiceStatsProvider::create( - int32_t width, int32_t height, bool isCameraRecording, const char* name) { - - android::sp<android::IServiceManager> sm = android::defaultServiceManager(); - android::sp<android::IBinder> binder = sm->getService(String16("media.ecoservice")); - - if (binder == nullptr) { +std::shared_ptr<ECOServiceStatsProvider> ECOServiceStatsProvider::create(int32_t width, + int32_t height, + bool isCameraRecording, + const char* name) { + std::shared_ptr<IECOService> service = IECOService::fromBinder( + ndk::SpAIBinder(AServiceManager_waitForService("media.ecoservice"))); + if (service == nullptr) { ALOGE("Failed to connect to ecoservice"); return nullptr; } - android::sp<IECOService> service = android::interface_cast<IECOService>(binder); ALOGI("Connected to ecoservice"); // Obtain the ECOSession and add the listener to the service. - android::sp<IECOSession> session = nullptr; + std::shared_ptr<IECOSession> session = nullptr; service->obtainSession(width, height, isCameraRecording, &session); @@ -113,7 +112,8 @@ } ALOGI("Obtained an ECO session"); - return new ECOServiceStatsProvider(width, height, isCameraRecording, session, name); + return ndk::SharedRefBase::make<ECOServiceStatsProvider>(width, height, isCameraRecording, + session, name); } float ECOServiceStatsProvider::getFramerate(int64_t currTimestamp) {
diff --git a/media/eco/ECOSession.cpp b/media/eco/ECOSession.cpp index db85571..ca90b0c 100644 --- a/media/eco/ECOSession.cpp +++ b/media/eco/ECOSession.cpp
@@ -41,8 +41,8 @@ namespace media { namespace eco { -using android::binder::Status; -using android::sp; +using ::aidl::android::media::eco::ECODataKeyValueIterator; +using ndk::ScopedAStatus; #define RETURN_IF_ERROR(expr) \ { \ @@ -53,7 +53,8 @@ } // static -sp<ECOSession> ECOSession::createECOSession(int32_t width, int32_t height, bool isCameraRecording) { +std::shared_ptr<ECOSession> ECOSession::createECOSession(int32_t width, int32_t height, + bool isCameraRecording) { // Only support up to 1080P. // TODO: Support the same resolution as in EAF. if (width <= 0 || height <= 0 || width > 5120 || height > 5120 || @@ -62,7 +63,7 @@ height, isCameraRecording); return nullptr; } - return new ECOSession(width, height, isCameraRecording); + return ndk::SharedRefBase::make<ECOSession>(width, height, isCameraRecording); } ECOSession::ECOSession(int32_t width, int32_t height, bool isCameraRecording) @@ -124,7 +125,7 @@ // Check if there is any session info available. ECOData sessionInfo = generateLatestSessionInfoEcoData(); if (!sessionInfo.isEmpty()) { - Status status = mListener->onNewInfo(sessionInfo); + ScopedAStatus status = mListener->onNewInfo(sessionInfo); if (!status.isOk()) { ECOLOGE("%s: Failed to publish info: %s due to binder error", __FUNCTION__, sessionInfo.debugString().c_str()); @@ -237,7 +238,7 @@ } if (mListener != nullptr) { - Status status = mListener->onNewInfo(info); + ScopedAStatus status = mListener->onNewInfo(info); if (!status.isOk()) { ECOLOGE("%s: Failed to publish info: %s due to binder error", __FUNCTION__, info.debugString().c_str()); @@ -354,7 +355,7 @@ } if (needToNotifyListener && mListener != nullptr) { - Status status = mListener->onNewInfo(info); + ScopedAStatus status = mListener->onNewInfo(info); if (!status.isOk()) { ECOLOGE("%s: Failed to publish info: %s due to binder error", __FUNCTION__, info.debugString().c_str()); @@ -364,17 +365,17 @@ } } -Status ECOSession::getIsCameraRecording(bool* _aidl_return) { +ScopedAStatus ECOSession::getIsCameraRecording(bool* _aidl_return) { std::scoped_lock<std::mutex> lock(mSessionLock); *_aidl_return = mIsCameraRecording; - return binder::Status::ok(); + return ndk::ScopedAStatus::ok(); } -Status ECOSession::addStatsProvider( - const sp<::android::media::eco::IECOServiceStatsProvider>& provider, +ScopedAStatus ECOSession::addStatsProvider( + const std::shared_ptr<::android::media::eco::IECOServiceStatsProvider>& provider, const ::android::media::eco::ECOData& config, bool* status) { - ::android::String16 name; - Status result = provider->getName(&name); + std::string name; + ScopedAStatus result = provider->getName(&name); if (!result.isOk()) { // This binder transaction failure may due to permission issue. *status = false; @@ -382,7 +383,7 @@ return STATUS_ERROR(ERROR_PERMISSION_DENIED, "Failed to get provider name"); } - ECOLOGV("Try to add stats provider name: %s uid: %d pid %d", ::android::String8(name).c_str(), + ECOLOGV("Try to add stats provider name: %s uid: %d pid %d", name.c_str(), AIBinder_getCallingUid(), AIBinder_getCallingPid()); if (provider == nullptr) { @@ -394,11 +395,10 @@ std::scoped_lock<std::mutex> lock(mSessionLock); if (mProvider != nullptr) { - ::android::String16 name; + std::string name; mProvider->getName(&name); - String8 errorMsg = String8::format( - "ECOService 1.0 only supports one stats provider, current provider: %s", - ::android::String8(name).c_str()); + std::string errorMsg = + "ECOService 1.0 only supports one stats provider, current provider: " + name; ECOLOGE("%s", errorMsg.c_str()); *status = false; return STATUS_ERROR(ERROR_ALREADY_EXISTS, errorMsg.c_str()); @@ -414,14 +414,15 @@ mProvider = provider; mProviderName = name; *status = true; - return binder::Status::ok(); + return ndk::ScopedAStatus::ok(); } -Status ECOSession::removeStatsProvider( - const sp<::android::media::eco::IECOServiceStatsProvider>& provider, bool* status) { +ScopedAStatus ECOSession::removeStatsProvider( + const std::shared_ptr<::android::media::eco::IECOServiceStatsProvider>& provider, + bool* status) { std::scoped_lock<std::mutex> lock(mSessionLock); // Check if the provider is the same as current provider for the session. - if (IInterface::asBinder(provider) != IInterface::asBinder(mProvider)) { + if (provider->asBinder() != mProvider->asBinder()) { *status = false; ECOLOGE("Failed to remove provider"); return STATUS_ERROR(ERROR_ILLEGAL_ARGUMENT, "Provider does not match"); @@ -429,17 +430,17 @@ mProvider = nullptr; *status = true; - return binder::Status::ok(); + return ndk::ScopedAStatus::ok(); } -Status ECOSession::addInfoListener( - const sp<::android::media::eco::IECOServiceInfoListener>& listener, +ScopedAStatus ECOSession::addInfoListener( + const std::shared_ptr<::android::media::eco::IECOServiceInfoListener>& listener, const ::android::media::eco::ECOData& config, bool* status) { ALOGV("%s: Add listener %p", __FUNCTION__, listener.get()); std::scoped_lock<std::mutex> lock(mSessionLock); - ::android::String16 name; - Status result = listener->getName(&name); + std::string name; + ScopedAStatus result = listener->getName(&name); if (!result.isOk()) { // This binder transaction failure may due to permission issue. *status = false; @@ -483,7 +484,7 @@ return STATUS_ERROR(ERROR_ILLEGAL_ARGUMENT, "listener config is not valid"); } - ECOLOGD("Info listener name: %s uid: %d pid %d", ::android::String8(name).c_str(), + ECOLOGD("Info listener name: %s uid: %d pid %d", name.c_str(), AIBinder_getCallingUid(), AIBinder_getCallingPid()); mListener = listener; @@ -492,14 +493,15 @@ mWorkerWaitCV.notify_all(); *status = true; - return binder::Status::ok(); + return ndk::ScopedAStatus::ok(); } -Status ECOSession::removeInfoListener( - const sp<::android::media::eco::IECOServiceInfoListener>& listener, bool* _aidl_return) { +ScopedAStatus ECOSession::removeInfoListener( + const std::shared_ptr<::android::media::eco::IECOServiceInfoListener>& listener, + bool* _aidl_return) { std::scoped_lock<std::mutex> lock(mSessionLock); // Check if the listener is the same as current listener for the session. - if (IInterface::asBinder(listener) != IInterface::asBinder(mListener)) { + if (listener->asBinder() != mListener->asBinder()) { *_aidl_return = false; ECOLOGE("Failed to remove listener"); return STATUS_ERROR(ERROR_ILLEGAL_ARGUMENT, "Listener does not match"); @@ -508,47 +510,44 @@ mListener = nullptr; mNewListenerAdded = false; *_aidl_return = true; - return binder::Status::ok(); + return ndk::ScopedAStatus::ok(); } -Status ECOSession::pushNewStats(const ::android::media::eco::ECOData& stats, bool* _aidl_return) { +ScopedAStatus ECOSession::pushNewStats(const ::android::media::eco::ECOData& stats, + bool* _aidl_return) { ECOLOGV("ECOSession get new stats type: %s", stats.getDataTypeString().c_str()); std::unique_lock<std::mutex> lock(mStatsQueueLock); mStatsQueue.push_back(stats); mWorkerWaitCV.notify_all(); *_aidl_return = true; - return binder::Status::ok(); + return ndk::ScopedAStatus::ok(); } -Status ECOSession::getWidth(int32_t* _aidl_return) { +ScopedAStatus ECOSession::getWidth(int32_t* _aidl_return) { std::scoped_lock<std::mutex> lock(mSessionLock); *_aidl_return = mWidth; - return binder::Status::ok(); + return ndk::ScopedAStatus::ok(); } -Status ECOSession::getHeight(int32_t* _aidl_return) { +ScopedAStatus ECOSession::getHeight(int32_t* _aidl_return) { std::scoped_lock<std::mutex> lock(mSessionLock); *_aidl_return = mHeight; - return binder::Status::ok(); + return ndk::ScopedAStatus::ok(); } -Status ECOSession::getNumOfListeners(int32_t* _aidl_return) { +ScopedAStatus ECOSession::getNumOfListeners(int32_t* _aidl_return) { std::scoped_lock<std::mutex> lock(mSessionLock); *_aidl_return = (mListener == nullptr ? 0 : 1); - return binder::Status::ok(); + return ndk::ScopedAStatus::ok(); } -Status ECOSession::getNumOfProviders(int32_t* _aidl_return) { +ScopedAStatus ECOSession::getNumOfProviders(int32_t* _aidl_return) { std::scoped_lock<std::mutex> lock(mSessionLock); *_aidl_return = (mProvider == nullptr ? 0 : 1); - return binder::Status::ok(); + return ndk::ScopedAStatus::ok(); } -/*virtual*/ void ECOSession::binderDied(const wp<IBinder>& /*who*/) { - ECOLOGV("binderDied"); -} - -status_t ECOSession::dump(int fd, const Vector<String16>& /*args*/) { +status_t ECOSession::dump(int fd, const std::vector<std::string>& /*args*/) { std::scoped_lock<std::mutex> lock(mSessionLock); dprintf(fd, "\n== Session Info: ==\n\n"); dprintf(fd, @@ -557,10 +556,10 @@ mWidth, mHeight, mIsCameraRecording, mTargetBitrateBps, mCodecType, mCodecProfile, mCodecLevel); if (mProvider != nullptr) { - dprintf(fd, "Provider: %s \n", ::android::String8(mProviderName).c_str()); + dprintf(fd, "Provider: %s \n", mProviderName.c_str()); } if (mListener != nullptr) { - dprintf(fd, "Listener: %s \n", ::android::String8(mListenerName).c_str()); + dprintf(fd, "Listener: %s \n", mListenerName.c_str()); } dprintf(fd, "\n===================\n\n");
diff --git a/media/eco/ECOUtils.cpp b/media/eco/ECOUtils.cpp index ab82252..93372bb 100644 --- a/media/eco/ECOUtils.cpp +++ b/media/eco/ECOUtils.cpp
@@ -50,12 +50,6 @@ return data; } -bool copyKeyValue(const ECOData& src, ECOData* dst) { - if (src.isEmpty() || dst == nullptr) return false; - dst->mKeyValueStore = src.mKeyValueStore; - return true; -} - } // namespace eco } // namespace media } // namespace android \ No newline at end of file
diff --git a/media/eco/aidl/android/media/eco/ECOData.aidl b/media/eco/aidl/android/media/eco/ECOData.aidl index 162cd89..c34a57d 100644 --- a/media/eco/aidl/android/media/eco/ECOData.aidl +++ b/media/eco/aidl/android/media/eco/ECOData.aidl
@@ -17,4 +17,4 @@ package android.media.eco; /** @hide */ -parcelable ECOData cpp_header "eco/ECOData.h"; \ No newline at end of file +parcelable ECOData ndk_header "eco/ECOData.h";
diff --git a/media/eco/aidl/android/media/eco/IECOServiceInfoListener.aidl b/media/eco/aidl/android/media/eco/IECOServiceInfoListener.aidl index bf5bd88..12dc649 100644 --- a/media/eco/aidl/android/media/eco/IECOServiceInfoListener.aidl +++ b/media/eco/aidl/android/media/eco/IECOServiceInfoListener.aidl
@@ -17,7 +17,6 @@ package android.media.eco; import android.media.eco.ECOData; -import android.os.IBinder; /** * Binder interface for ECO service information listener. @@ -60,4 +59,4 @@ * Handle the new info from ECOSession. This should only be called by ECOSession. */ oneway void onNewInfo(in ECOData newInfo); -} \ No newline at end of file +}
diff --git a/media/eco/aidl/android/media/eco/IECOServiceStatsProvider.aidl b/media/eco/aidl/android/media/eco/IECOServiceStatsProvider.aidl index 6e2f9c3..32f23be 100644 --- a/media/eco/aidl/android/media/eco/IECOServiceStatsProvider.aidl +++ b/media/eco/aidl/android/media/eco/IECOServiceStatsProvider.aidl
@@ -16,7 +16,6 @@ package android.media.eco; -import android.os.IBinder; /** * An interface for providers that provides various statistics to ECO service.
diff --git a/media/eco/include/eco/ECOData.h b/media/eco/include/eco/ECOData.h index 737235a..a06f0e6 100644 --- a/media/eco/include/eco/ECOData.h +++ b/media/eco/include/eco/ECOData.h
@@ -17,13 +17,15 @@ #ifndef ANDROID_MEDIA_ECO_DATA_H_ #define ANDROID_MEDIA_ECO_DATA_H_ -#include <binder/Parcel.h> -#include <binder/Parcelable.h> +#include <android/binder_auto_utils.h> +#include <android/binder_parcel.h> +#include <android/binder_status.h> #include <string> #include <unordered_map> #include <variant> +namespace aidl { namespace android { namespace media { namespace eco { @@ -71,7 +73,7 @@ * // Set encoding bitrate. * data->setInt32("stats-encoder-target-bitrate-bps", 22000000); */ -class ECOData : public Parcelable { +class ECOData { public: using ECODataValueType = std::variant<int32_t, int64_t, size_t, float, double, std::string, int8_t>; @@ -130,8 +132,8 @@ /** * Serialization over Binder */ - status_t readFromParcel(const Parcel* parcel) override; - status_t writeToParcel(Parcel* parcel) const override; + binder_status_t readFromParcel(const AParcel* parcel); + binder_status_t writeToParcel(AParcel* parcel) const; /* Returns the type of the data. */ int32_t getDataType() const; @@ -191,6 +193,12 @@ template <typename T> ECODataStatus findValue(const std::string& key, T* out) const; + + static bool copyKeyValue(const ECOData& src, ECOData* dst) { + if (src.isEmpty() || dst == nullptr) return false; + dst->mKeyValueStore = src.mKeyValueStore; + return true; + } }; // A simple ECOData iterator that will iterate over all the key value paris in ECOData. @@ -217,5 +225,6 @@ } // namespace eco } // namespace media } // namespace android +} // namespace aidl #endif // ANDROID_MEDIA_ECO_DATA_H_
diff --git a/media/eco/include/eco/ECODataKey.h b/media/eco/include/eco/ECODataKey.h index c70c328..bcae6c9 100644 --- a/media/eco/include/eco/ECODataKey.h +++ b/media/eco/include/eco/ECODataKey.h
@@ -17,8 +17,8 @@ #define ANDROID_MEDIA_ECO_DATA_KEY_H_ #include <android-base/unique_fd.h> -#include <binder/Parcel.h> -#include <binder/Parcelable.h> +#include <android/binder_auto_utils.h> +#include <android/binder_parcel.h> #include <stdint.h> #include <sys/mman.h>
diff --git a/media/eco/include/eco/ECODebug.h b/media/eco/include/eco/ECODebug.h index ff0e8b5..520a013 100644 --- a/media/eco/include/eco/ECODebug.h +++ b/media/eco/include/eco/ECODebug.h
@@ -25,6 +25,8 @@ namespace android { namespace media { namespace eco { +using aidl::android::media::eco::ECOData; +using aidl::android::media::eco::ECODataStatus; static const char* kDisableEcoServiceProperty = "vendor.media.ecoservice.disable"; static const char* kDebugLogsLevelProperty = "vendor.media.ecoservice.log.level"; @@ -52,14 +54,10 @@ void updateLogLevel(); // Convenience methods for constructing binder::Status objects for error returns -#define STATUS_ERROR(errorCode, errorString) \ - binder::Status::fromServiceSpecificError( \ - errorCode, String8::format("%s:%d: %s", __FUNCTION__, __LINE__, errorString)) +#define STATUS_ERROR(errorCode, errorString) ndk::ScopedAStatus::fromServiceSpecificError(errorCode) #define STATUS_ERROR_FMT(errorCode, errorString, ...) \ - binder::Status::fromServiceSpecificError( \ - errorCode, \ - String8::format("%s:%d: " errorString, __FUNCTION__, __LINE__, __VA_ARGS__)) + ndk::ScopedAStatus::fromServiceSpecificError(errorCode) } // namespace eco } // namespace media
diff --git a/media/eco/include/eco/ECOService.h b/media/eco/include/eco/ECOService.h index d0d732a..f528949 100644 --- a/media/eco/include/eco/ECOService.h +++ b/media/eco/include/eco/ECOService.h
@@ -17,8 +17,10 @@ #ifndef ANDROID_MEDIA_ECO_SERVICE_H_ #define ANDROID_MEDIA_ECO_SERVICE_H_ -#include <android/media/eco/BnECOService.h> -#include <binder/IServiceManager.h> +#include <aidl/android/media/eco/BnECOService.h> +#include <android/binder_manager.h> +#include <android/binder_process.h> +#include <utils/Log.h> #include <utils/Mutex.h> #include <list> @@ -30,9 +32,11 @@ namespace media { namespace eco { -using android::sp; -using android::binder::Status; +using aidl::android::media::eco::BnECOService; +using aidl::android::media::eco::ECOData; +using aidl::android::media::eco::ECODataStatus; using android::media::eco::ECOSession; +using ndk::ScopedAStatus; /** * ECO (Encoder Camera Optimization) service. @@ -50,36 +54,36 @@ * ECOServiceStatsProvider and ECOServiceInfoListener should remove themselves from ECOSession. * Then ECOService will safely destroy the ECOSession. */ -class ECOService : public BnECOService, - public virtual IBinder::DeathRecipient { +class ECOService : public BnECOService { + using ::ndk::ICInterface::dump; public: ECOService(); virtual ~ECOService() = default; - virtual Status obtainSession(int32_t width, int32_t height, bool isCameraRecording, - sp<IECOSession>* _aidl_return); + virtual ScopedAStatus obtainSession(int32_t width, int32_t height, bool isCameraRecording, + std::shared_ptr<IECOSession>* _aidl_return); - virtual Status getNumOfSessions(int32_t* _aidl_return); + virtual ScopedAStatus getNumOfSessions(int32_t* _aidl_return); - virtual Status getSessions(::std::vector<sp<IBinder>>* _aidl_return); + virtual ScopedAStatus getSessions(std::vector<::ndk::SpAIBinder>* _aidl_return); static status_t instantiate() { - bool allowIsolated = false; - int dumpFlags = IServiceManager::DUMP_FLAG_PRIORITY_DEFAULT; - sp<IServiceManager> sm(defaultServiceManager()); - return sm->addService(String16(getServiceName()), new ECOService(), allowIsolated, - dumpFlags); + std::shared_ptr<ECOService> service = ::ndk::SharedRefBase::make<ECOService>(); + binder_status_t status = + AServiceManager_addService(service->asBinder().get(), getServiceName()); + ABinderProcess_startThreadPool(); + return (status == EX_NONE) ? STATUS_OK : STATUS_UNKNOWN_ERROR; } // Implementation of BinderService<T> static char const* getServiceName() { return "media.ecoservice"; } // IBinder::DeathRecipient implementation - virtual void binderDied(const wp<IBinder>& who); + virtual void binderDied(const std::weak_ptr<AIBinder>& who); - virtual status_t dump(int fd, const Vector<String16>& args); + virtual status_t dump(int fd, const std::vector<std::string>& args); private: // Lock guarding ECO service state @@ -114,10 +118,11 @@ }; // Map from SessionConfig to session. - std::unordered_map<SessionConfig, wp<ECOSession>, SessionConfigHash> mSessionConfigToSessionMap; + std::unordered_map<SessionConfig, std::weak_ptr<ECOSession>, SessionConfigHash> + mSessionConfigToSessionMap; - using MapIterType = - std::unordered_map<SessionConfig, wp<ECOSession>, SessionConfigHash>::iterator; + using MapIterType = std::unordered_map<SessionConfig, std::weak_ptr<ECOSession>, + SessionConfigHash>::iterator; // A helpful function to traverse the mSessionConfigToSessionMap, remove the entry that // does not exist any more and call |callback| when the entry is valid.
diff --git a/media/eco/include/eco/ECOServiceInfoListener.h b/media/eco/include/eco/ECOServiceInfoListener.h index 86d379f..448bab2 100644 --- a/media/eco/include/eco/ECOServiceInfoListener.h +++ b/media/eco/include/eco/ECOServiceInfoListener.h
@@ -17,8 +17,8 @@ #ifndef ANDROID_MEDIA_ECO_SERVICE_INFO_LISTENER_H_ #define ANDROID_MEDIA_ECO_SERVICE_INFO_LISTENER_H_ -#include <android/media/eco/BnECOServiceInfoListener.h> -#include <android/media/eco/IECOSession.h> +#include <aidl/android/media/eco/BnECOServiceInfoListener.h> +#include <aidl/android/media/eco/IECOSession.h> #include <condition_variable> #include <memory> @@ -31,27 +31,28 @@ namespace media { namespace eco { -using ::android::binder::Status; +using aidl::android::media::eco::BnECOServiceInfoListener; +using aidl::android::media::eco::ECOData; +using aidl::android::media::eco::ECODataStatus; +using ::ndk::ScopedAStatus; /** * ECOServiceInfoListener interface class. */ -class ECOServiceInfoListener : public BnECOServiceInfoListener, - public virtual IBinder::DeathRecipient { - +class ECOServiceInfoListener : public BnECOServiceInfoListener { public: // Create a ECOServiceInfoListener with specifed width, height and isCameraRecording. ECOServiceInfoListener(int32_t width, int32_t height, bool isCameraRecording); virtual ~ECOServiceInfoListener() {} - virtual Status getType(int32_t* _aidl_return) = 0; - virtual Status getName(::android::String16* _aidl_return) = 0; - virtual Status getECOSession(::android::sp<::android::IBinder>* _aidl_return) = 0; - virtual Status onNewInfo(const ::android::media::eco::ECOData& newInfo) = 0; + virtual ScopedAStatus getType(int32_t* _aidl_return) = 0; + virtual ScopedAStatus getName(std::string* _aidl_return) = 0; + virtual ScopedAStatus getECOSession(::ndk::SpAIBinder* _aidl_return) = 0; + virtual ScopedAStatus onNewInfo(const ::android::media::eco::ECOData& newInfo) = 0; // IBinder::DeathRecipient implementation. - virtual void binderDied(const wp<IBinder>& who); + virtual void binderDied(const std::weak_ptr<AIBinder>& who); private: };
diff --git a/media/eco/include/eco/ECOServiceStatsProvider.h b/media/eco/include/eco/ECOServiceStatsProvider.h index c81f0b8..b7cf4f2 100644 --- a/media/eco/include/eco/ECOServiceStatsProvider.h +++ b/media/eco/include/eco/ECOServiceStatsProvider.h
@@ -17,9 +17,10 @@ #ifndef ANDROID_MEDIA_ECO_SERVICE_STATS_PROVIDER_H_ #define ANDROID_MEDIA_ECO_SERVICE_STATS_PROVIDER_H_ -#include <android/media/eco/BnECOServiceStatsProvider.h> -#include <android/media/eco/IECOSession.h> -#include <android/media/eco/IECOService.h> +#include <aidl/android/media/eco/BnECOServiceStatsProvider.h> +#include <aidl/android/media/eco/IECOService.h> +#include <aidl/android/media/eco/IECOSession.h> +#include <utils/Log.h> #include <condition_variable> #include <memory> @@ -33,39 +34,43 @@ namespace media { namespace eco { -using ::android::binder::Status; +using aidl::android::media::eco::BnECOServiceStatsProvider; +using aidl::android::media::eco::ECOData; +using aidl::android::media::eco::ECODataStatus; +using aidl::android::media::eco::IECOService; +using aidl::android::media::eco::IECOSession; +using ::ndk::ScopedAStatus; /** * ECOServiceStatsProvider interface class. */ -class ECOServiceStatsProvider : public BnECOServiceStatsProvider, - public virtual IBinder::DeathRecipient { - +class ECOServiceStatsProvider : public BnECOServiceStatsProvider { public: + ECOServiceStatsProvider(int32_t width, int32_t height, bool isCameraRecording, + std::shared_ptr<IECOSession>& session, const char* name); virtual ~ECOServiceStatsProvider() {} - virtual Status getType(int32_t* _aidl_return); - virtual Status getName(::android::String16* _aidl_return); - virtual Status getECOSession(::android::sp<::android::IBinder>* _aidl_return); - virtual Status isCameraRecording(bool* _aidl_return); + virtual ScopedAStatus getType(int32_t* _aidl_return); + virtual ScopedAStatus getName(std::string* _aidl_return); + virtual ScopedAStatus getECOSession(::ndk::SpAIBinder* _aidl_return); + virtual ScopedAStatus isCameraRecording(bool* _aidl_return); // IBinder::DeathRecipient implementation - virtual void binderDied(const wp<IBinder>& who); + virtual void binderDied(const std::weak_ptr<AIBinder>& who); bool updateStats(const ECOData& data); bool addProvider(); bool removeProvider(); float getFramerate(int64_t currTimestamp); - static android::sp<ECOServiceStatsProvider> create( - int32_t width, int32_t height, bool isCameraRecording, const char* name); + static std::shared_ptr<ECOServiceStatsProvider> create(int32_t width, int32_t height, + bool isCameraRecording, + const char* name); private: - ECOServiceStatsProvider(int32_t width, int32_t height, bool isCameraRecording, - android::sp<IECOSession>& session, const char* name); int32_t mWidth = 0; int32_t mHeight = 0; bool mIsCameraRecording = false; - android::sp<IECOSession> mECOSession = nullptr; + std::shared_ptr<IECOSession> mECOSession = nullptr; const char* mProviderName = nullptr; int64_t mLastFrameTimestamp = 0; };
diff --git a/media/eco/include/eco/ECOSession.h b/media/eco/include/eco/ECOSession.h index 9fb0bdc..57965a7 100644 --- a/media/eco/include/eco/ECOSession.h +++ b/media/eco/include/eco/ECOSession.h
@@ -17,8 +17,9 @@ #ifndef ANDROID_MEDIA_ECO_SESSION_H_ #define ANDROID_MEDIA_ECO_SESSION_H_ -#include <android/media/eco/BnECOSession.h> -#include <android/media/eco/IECOServiceStatsProvider.h> +#include <aidl/android/media/eco/BnECOSession.h> +#include <aidl/android/media/eco/IECOServiceInfoListener.h> +#include <aidl/android/media/eco/IECOServiceStatsProvider.h> #include <condition_variable> #include <deque> @@ -36,8 +37,12 @@ namespace media { namespace eco { -using ::android::binder::Status; - +using aidl::android::media::eco::BnECOSession; +using aidl::android::media::eco::ECOData; +using aidl::android::media::eco::ECODataStatus; +using aidl::android::media::eco::IECOServiceInfoListener; +using aidl::android::media::eco::IECOServiceStatsProvider; +using ::ndk::ScopedAStatus; /** * ECO Session. * @@ -46,37 +51,40 @@ * it only supports resolution of up to 720P and only for camera recording use case. Also, it only * supports encoder as the provider and camera as listener. */ -class ECOSession : public BnECOSession, - public virtual IBinder::DeathRecipient { +class ECOSession : public BnECOSession { + using ::ndk::ICInterface::dump; public: + // Only the ECOService could create ECOSession. + ECOSession(int32_t width, int32_t height, bool isCameraRecording); + virtual ~ECOSession(); - virtual Status addStatsProvider(const sp<IECOServiceStatsProvider>& provider, - const ECOData& statsConfig, /*out*/ bool* status); + virtual ScopedAStatus addStatsProvider( + const std::shared_ptr<IECOServiceStatsProvider>& provider, const ECOData& statsConfig, + /*out*/ bool* status); - virtual Status removeStatsProvider(const sp<IECOServiceStatsProvider>&, bool*); + virtual ScopedAStatus removeStatsProvider(const std::shared_ptr<IECOServiceStatsProvider>&, + bool*); - virtual Status addInfoListener(const sp<IECOServiceInfoListener>&, - const ECOData& listenerConfig, - /*out*/ bool* status); + virtual ScopedAStatus addInfoListener(const std::shared_ptr<IECOServiceInfoListener>&, + const ECOData& listenerConfig, + /*out*/ bool* status); - virtual Status removeInfoListener(const sp<IECOServiceInfoListener>&, bool*); + virtual ScopedAStatus removeInfoListener(const std::shared_ptr<IECOServiceInfoListener>&, + bool*); - virtual Status pushNewStats(const ECOData&, bool*); + virtual ScopedAStatus pushNewStats(const ECOData&, bool*); - virtual Status getWidth(int32_t* _aidl_return); + virtual ScopedAStatus getWidth(int32_t* _aidl_return); - virtual Status getHeight(int32_t* _aidl_return); + virtual ScopedAStatus getHeight(int32_t* _aidl_return); - virtual Status getIsCameraRecording(bool*); + virtual ScopedAStatus getIsCameraRecording(bool*); - virtual Status getNumOfListeners(int32_t*); + virtual ScopedAStatus getNumOfListeners(int32_t*); - virtual Status getNumOfProviders(int32_t*); - - // IBinder::DeathRecipient implementation - virtual void binderDied(const wp<IBinder>& who); + virtual ScopedAStatus getNumOfProviders(int32_t*); // Grant permission to EcoSessionTest to run test. friend class EcoSessionTest; @@ -85,14 +93,11 @@ friend class ECOService; protected: - static android::sp<ECOSession> createECOSession(int32_t width, int32_t height, - bool isCameraRecording); + static std::shared_ptr<ECOSession> createECOSession(int32_t width, int32_t height, + bool isCameraRecording); private: - // Only the ECOService could create ECOSession. - ECOSession(int32_t width, int32_t height, bool isCameraRecording); - - virtual status_t dump(int fd, const Vector<String16>& args); + virtual status_t dump(int fd, const std::vector<std::string>& args); // Start the main thread for processing the stats and pushing info to listener. static void startThread(ECOSession* session); @@ -133,11 +138,11 @@ } QpCondition; QpCondition mListenerQpCondition; - android::sp<IECOServiceInfoListener> mListener; - String16 mListenerName; + std::shared_ptr<IECOServiceInfoListener> mListener; + std::string mListenerName; - android::sp<IECOServiceStatsProvider> mProvider; - String16 mProviderName; + std::shared_ptr<IECOServiceStatsProvider> mProvider; + std::string mProviderName; // Main thread for processing the events from provider. std::thread mThread;
diff --git a/media/eco/include/eco/ECOUtils.h b/media/eco/include/eco/ECOUtils.h index e5bbfcc..1a266c9 100644 --- a/media/eco/include/eco/ECOUtils.h +++ b/media/eco/include/eco/ECOUtils.h
@@ -28,6 +28,8 @@ namespace android { namespace media { namespace eco { +using aidl::android::media::eco::ECOData; +using aidl::android::media::eco::ECODataStatus; #define RETURN_STATUS_IF_ERROR(expr) \ { \ @@ -121,8 +123,6 @@ ECOData toEcoData(ECOData::ECODatatype dataType); }; -bool copyKeyValue(const ECOData& src, ECOData* dst); - } // namespace eco } // namespace media } // namespace android
diff --git a/media/eco/tests/Android.bp b/media/eco/tests/Android.bp index 99c93cd..54ca426 100644 --- a/media/eco/tests/Android.bp +++ b/media/eco/tests/Android.bp
@@ -10,8 +10,8 @@ "-Wall", "-Werror", ], + shared_libs: [ - "libbinder", "libbinder_ndk", "libcutils", "libutils",
diff --git a/media/eco/tests/EcoDataTest.cpp b/media/eco/tests/EcoDataTest.cpp index f93b692..835e4f7 100644 --- a/media/eco/tests/EcoDataTest.cpp +++ b/media/eco/tests/EcoDataTest.cpp
@@ -20,8 +20,8 @@ #define LOG_TAG "ECODataTest" #include <android-base/unique_fd.h> -#include <binder/Parcel.h> -#include <binder/Parcelable.h> +#include <android/binder_parcel.h> +#include <android/binder_status.h> #include <cutils/ashmem.h> #include <gtest/gtest.h> #include <math.h> @@ -35,6 +35,8 @@ namespace android { namespace media { namespace eco { +using aidl::android::media::eco::ECOData; +using aidl::android::media::eco::ECODataStatus; TEST(EcoDataTest, TestConstructor1) { std::unique_ptr<ECOData> data = std::make_unique<ECOData>(); @@ -302,16 +304,16 @@ sourceData->set(it->first, it->second); } - std::unique_ptr<Parcel> parcel = std::make_unique<Parcel>(); - EXPECT_TRUE(sourceData->writeToParcel(parcel.get()) == NO_ERROR); + AParcel* parcel = AParcel_create(); + EXPECT_TRUE(sourceData->writeToParcel(parcel) == STATUS_OK); // Rewind the data position of the parcel for this test. Otherwise, the following read will not // start from the beginning. - parcel->setDataPosition(0); + AParcel_setDataPosition(parcel, 0); // Reads the parcel back into a new ECOData std::unique_ptr<ECOData> dstData = std::make_unique<ECOData>(); - EXPECT_TRUE(dstData->readFromParcel(parcel.get()) == NO_ERROR); + EXPECT_TRUE(dstData->readFromParcel(parcel) == STATUS_OK); // Checks the data type, time and number of entries. EXPECT_EQ(sourceData->getNumOfEntries(), dstData->getNumOfEntries()); @@ -331,8 +333,7 @@ std::unique_ptr<ECOData> sourceData = std::make_unique<ECOData>(kDataType, kDataTimeUs); - std::unique_ptr<Parcel> parcel = std::make_unique<Parcel>(); - EXPECT_TRUE(sourceData->writeToParcel(nullptr) != NO_ERROR); + EXPECT_TRUE(sourceData->writeToParcel(nullptr) != STATUS_OK); } TEST(EcoDataTest, TestReadInvalidParcel) { @@ -348,20 +349,21 @@ sourceData->set(it->first, it->second); } - std::unique_ptr<Parcel> parcel = std::make_unique<Parcel>(); - EXPECT_TRUE(sourceData->writeToParcel(parcel.get()) == NO_ERROR); + AParcel* parcel = AParcel_create(); + EXPECT_TRUE(sourceData->writeToParcel(parcel) == STATUS_OK); // Corrupt the parcel by write random data to the beginning. - parcel->setDataPosition(4); - parcel->writeCString("invalid-data"); + AParcel_setDataPosition(parcel, 4); + char* invalid_string = (char*)"invalid-data"; + AParcel_writeString(parcel, invalid_string, strlen(invalid_string)); - parcel->setDataPosition(0); + AParcel_setDataPosition(parcel, 0); // Reads the parcel back into a new ECOData std::unique_ptr<ECOData> dstData = std::make_unique<ECOData>(); - EXPECT_TRUE(dstData->readFromParcel(parcel.get()) != NO_ERROR); + EXPECT_TRUE(dstData->readFromParcel(parcel) != STATUS_OK); } } // namespace eco } // namespace media -} // namespace android \ No newline at end of file +} // namespace android
diff --git a/media/eco/tests/EcoServiceTest.cpp b/media/eco/tests/EcoServiceTest.cpp index df54c53..8a8bbbf 100644 --- a/media/eco/tests/EcoServiceTest.cpp +++ b/media/eco/tests/EcoServiceTest.cpp
@@ -20,9 +20,9 @@ #define LOG_TAG "ECOServiceTest" #include <android-base/unique_fd.h> -#include <binder/Parcel.h> -#include <binder/Parcelable.h> -#include <binder/IServiceManager.h> +#include <android/binder_auto_utils.h> +#include <android/binder_manager.h> +#include <android/binder_parcel.h> #include <cutils/ashmem.h> #include <gtest/gtest.h> #include <math.h> @@ -40,9 +40,7 @@ namespace media { namespace eco { -using ::android::IBinder; -using android::sp; -using ::android::binder::Status; +using ::ndk::ScopedAStatus; namespace { @@ -58,106 +56,101 @@ public: EcoServiceTest() { ALOGD("EcoServiceTest created"); } - sp<IECOService> createService() { - android::sp<android::IServiceManager> sm = android::defaultServiceManager(); - assert(sm != 0); - android::sp<android::IBinder> binder = sm->getService(String16("media.ecoservice")); - - if (binder == 0) { + std::shared_ptr<IECOService> createService() { + mECOService = IECOService::fromBinder( + ndk::SpAIBinder(AServiceManager_waitForService("media.ecoservice"))); + if (mECOService == nullptr) { ALOGE("Failed to connect to ecoservice"); return nullptr; - } else { - ALOGD("Successfully connect to ecoservice"); } - mECOService = android::interface_cast<IECOService>(binder); return mECOService; } ~EcoServiceTest() { ALOGD("EcoServiceTest destroyed"); } private: - sp<IECOService> mECOService = nullptr; + std::shared_ptr<IECOService> mECOService = nullptr; }; TEST_F(EcoServiceTest, NormalObtainSessionWithInvalidWidth) { - sp<IECOService> service = createService(); + std::shared_ptr<IECOService> service = createService(); EXPECT_TRUE(service != nullptr); // Provider obtains the session from the service. - sp<IECOSession> session = nullptr; + std::shared_ptr<IECOSession> session = nullptr; service->obtainSession(-1 /* width */, kTestHeight, kIsCameraRecording, &session); EXPECT_FALSE(session); } TEST_F(EcoServiceTest, NormalObtainSessionWithInvalidHeight) { - sp<IECOService> service = createService(); + std::shared_ptr<IECOService> service = createService(); // Provider obtains the session from the service. - sp<IECOSession> session = nullptr; + std::shared_ptr<IECOSession> session = nullptr; service->obtainSession(kTestWidth, -1 /* height */, kIsCameraRecording, &session); EXPECT_FALSE(session); } TEST_F(EcoServiceTest, NormalObtainSessionWithCameraRecordingFalse) { - sp<IECOService> service = createService(); + std::shared_ptr<IECOService> service = createService(); // Provider obtains the session from the service. - sp<IECOSession> session = nullptr; + std::shared_ptr<IECOSession> session = nullptr; service->obtainSession(kTestWidth, kTestHeight, false /* isCameraRecording */, &session); EXPECT_TRUE(session); } TEST_F(EcoServiceTest, NormalObtainSingleSession) { - sp<IECOService> service = createService(); + std::shared_ptr<IECOService> service = createService(); EXPECT_TRUE(service != nullptr); // Provider obtains the session from the service. - sp<IECOSession> session = nullptr; + std::shared_ptr<IECOSession> session = nullptr; service->obtainSession(kTestWidth, kTestHeight, kIsCameraRecording, &session); EXPECT_TRUE(session); } TEST_F(EcoServiceTest, NormalObtainSessionTwice) { - sp<IECOService> service = createService(); + std::shared_ptr<IECOService> service = createService(); EXPECT_TRUE(service != nullptr); // Provider obtains the session from the service. - sp<IECOSession> session1 = nullptr; + std::shared_ptr<IECOSession> session1 = nullptr; service->obtainSession(kTestWidth, kTestHeight, kIsCameraRecording, &session1); EXPECT_TRUE(session1); - sp<IECOSession> session2 = nullptr; + std::shared_ptr<IECOSession> session2 = nullptr; service->obtainSession(kTestWidth, kTestHeight, kIsCameraRecording, &session2); EXPECT_TRUE(session2); // The two session instances should be the same. - EXPECT_TRUE(IInterface::asBinder(session1) == IInterface::asBinder(session2)); + EXPECT_TRUE(session1->asBinder() == session2->asBinder()); } TEST_F(EcoServiceTest, ObtainTwoSessions) { - sp<IECOService> service = createService(); + std::shared_ptr<IECOService> service = createService(); EXPECT_TRUE(service != nullptr); // Provider obtains the session from the service. - sp<IECOSession> session1 = nullptr; + std::shared_ptr<IECOSession> session1 = nullptr; service->obtainSession(kTestWidth, kTestHeight, kIsCameraRecording, &session1); EXPECT_TRUE(session1); - sp<IECOSession> session2 = nullptr; + std::shared_ptr<IECOSession> session2 = nullptr; service->obtainSession(kTestWidth - 1, kTestHeight - 1, kIsCameraRecording, &session2); EXPECT_TRUE(session2); // The two session instances must not be the same. - EXPECT_TRUE(IInterface::asBinder(session1) != IInterface::asBinder(session2)); + EXPECT_TRUE(session1->asBinder() != session2->asBinder()); // Check the session number. int32_t count = 0; @@ -165,16 +158,16 @@ EXPECT_EQ(count, 2); // Get the list of sessions from service. - std::vector<sp<IBinder>> sessionList; + std::vector<::ndk::SpAIBinder> sessionList; service->getSessions(&sessionList); bool foundFirstSession = false, foundSecondSession = false; - for (std::vector<sp<IBinder>>::iterator it = sessionList.begin(); it != sessionList.end(); + for (std::vector<::ndk::SpAIBinder>::iterator it = sessionList.begin(); it != sessionList.end(); ++it) { - if (IInterface::asBinder(session1) == it->get()) { + if (session1->asBinder() == it->get()) { foundFirstSession = true; } - if (IInterface::asBinder(session2) == it->get()) { + if (session2->asBinder() == it->get()) { foundSecondSession = true; } } @@ -185,18 +178,19 @@ } TEST_F(EcoServiceTest, TestNormalFlowWithOneListenerAndOneProvider) { - sp<IECOService> service = createService(); + std::shared_ptr<IECOService> service = createService(); EXPECT_TRUE(service != nullptr); // Provider obtains the session from the service. - sp<IECOSession> session = nullptr; + std::shared_ptr<IECOSession> session = nullptr; service->obtainSession(kTestWidth, kTestHeight, kIsCameraRecording, &session); EXPECT_TRUE(session); // Create provider and add it to the session. - sp<FakeECOServiceStatsProvider> fakeProvider = new FakeECOServiceStatsProvider( - kTestWidth, kTestHeight, kIsCameraRecording, kFrameRate); + std::shared_ptr<FakeECOServiceStatsProvider> fakeProvider = + ndk::SharedRefBase::make<FakeECOServiceStatsProvider>(kTestWidth, kTestHeight, + kIsCameraRecording, kFrameRate); fakeProvider->setECOSession(session); ECOData providerConfig(ECOData::DATA_TYPE_STATS_PROVIDER_CONFIG, @@ -205,11 +199,12 @@ providerConfig.setInt32(KEY_PROVIDER_TYPE, ECOServiceStatsProvider::STATS_PROVIDER_TYPE_VIDEO_ENCODER); bool res; - Status status = session->addStatsProvider(fakeProvider, providerConfig, &res); + ScopedAStatus status = session->addStatsProvider(fakeProvider, providerConfig, &res); // Create listener and add it to the session. - sp<FakeECOServiceInfoListener> fakeListener = - new FakeECOServiceInfoListener(kTestWidth, kTestHeight, kIsCameraRecording); + std::shared_ptr<FakeECOServiceInfoListener> fakeListener = + ndk::SharedRefBase::make<FakeECOServiceInfoListener>(kTestWidth, kTestHeight, + kIsCameraRecording); fakeListener->setECOSession(session); // Create the listener config.
diff --git a/media/eco/tests/EcoSessionTest.cpp b/media/eco/tests/EcoSessionTest.cpp index 5c8826f..4c496ea 100644 --- a/media/eco/tests/EcoSessionTest.cpp +++ b/media/eco/tests/EcoSessionTest.cpp
@@ -20,8 +20,8 @@ #define LOG_TAG "ECOSessionTest" #include <android-base/unique_fd.h> -#include <binder/Parcel.h> -#include <binder/Parcelable.h> +#include <android/binder_auto_utils.h> +#include <android/binder_parcel.h> #include <cutils/ashmem.h> #include <gtest/gtest.h> #include <math.h> @@ -39,8 +39,7 @@ namespace media { namespace eco { -using android::sp; -using ::android::binder::Status; +using ::ndk::ScopedAStatus; static constexpr uint32_t kTestWidth = 1280; static constexpr uint32_t kTestHeight = 720; @@ -54,14 +53,15 @@ public: EcoSessionTest() { ALOGD("EcoSessionTest created"); } - sp<ECOSession> createSession(int32_t width, int32_t height, bool isCameraRecording) { + std::shared_ptr<ECOSession> createSession(int32_t width, int32_t height, + bool isCameraRecording) { mSession = ECOSession::createECOSession(width, height, isCameraRecording); if (mSession == nullptr) return nullptr; return mSession; } private: - sp<ECOSession> mSession = nullptr; + std::shared_ptr<ECOSession> mSession = nullptr; }; TEST_F(EcoSessionTest, TestConstructorWithInvalidParameters) { @@ -91,106 +91,121 @@ } TEST_F(EcoSessionTest, TestAddProviderWithoutSpecifyEcoDataType) { - sp<ECOSession> ecoSession = createSession(kTestWidth, kTestHeight, kIsCameraRecording); + std::shared_ptr<ECOSession> ecoSession = + createSession(kTestWidth, kTestHeight, kIsCameraRecording); EXPECT_TRUE(ecoSession); - sp<FakeECOServiceStatsProvider> fakeProvider = new FakeECOServiceStatsProvider( - kTestWidth, kTestHeight, kIsCameraRecording, kFrameRate, ecoSession); + std::shared_ptr<FakeECOServiceStatsProvider> fakeProvider = + ndk::SharedRefBase::make<FakeECOServiceStatsProvider>( + kTestWidth, kTestHeight, kIsCameraRecording, kFrameRate, ecoSession); ECOData providerConfig; bool res; - Status status = ecoSession->addStatsProvider(fakeProvider, providerConfig, &res); + ScopedAStatus status = ecoSession->addStatsProvider(fakeProvider, providerConfig, &res); EXPECT_FALSE(status.isOk()); } TEST_F(EcoSessionTest, TestAddProviderWithWrongEcoDataType) { - sp<ECOSession> ecoSession = createSession(kTestWidth, kTestHeight, kIsCameraRecording); + std::shared_ptr<ECOSession> ecoSession = + createSession(kTestWidth, kTestHeight, kIsCameraRecording); EXPECT_TRUE(ecoSession); - sp<FakeECOServiceStatsProvider> fakeProvider = new FakeECOServiceStatsProvider( - kTestWidth, kTestHeight, kIsCameraRecording, kFrameRate, ecoSession); + std::shared_ptr<FakeECOServiceStatsProvider> fakeProvider = + ndk::SharedRefBase::make<FakeECOServiceStatsProvider>( + kTestWidth, kTestHeight, kIsCameraRecording, kFrameRate, ecoSession); ECOData providerConfig(ECOData::DATA_TYPE_INFO_LISTENER_CONFIG, systemTime(SYSTEM_TIME_BOOTTIME)); bool res; - Status status = ecoSession->addStatsProvider(fakeProvider, providerConfig, &res); + ScopedAStatus status = ecoSession->addStatsProvider(fakeProvider, providerConfig, &res); EXPECT_FALSE(status.isOk()); } TEST_F(EcoSessionTest, TestAddNormalProvider) { - sp<ECOSession> ecoSession = createSession(kTestWidth, kTestHeight, kIsCameraRecording); + std::shared_ptr<ECOSession> ecoSession = + createSession(kTestWidth, kTestHeight, kIsCameraRecording); EXPECT_TRUE(ecoSession); - sp<FakeECOServiceStatsProvider> fakeProvider = new FakeECOServiceStatsProvider( - kTestWidth, kTestHeight, kIsCameraRecording, kFrameRate, ecoSession); + std::shared_ptr<FakeECOServiceStatsProvider> fakeProvider = + ndk::SharedRefBase::make<FakeECOServiceStatsProvider>( + kTestWidth, kTestHeight, kIsCameraRecording, kFrameRate, ecoSession); ECOData providerConfig(ECOData::DATA_TYPE_STATS_PROVIDER_CONFIG, systemTime(SYSTEM_TIME_BOOTTIME)); bool res; - Status status = ecoSession->addStatsProvider(fakeProvider, providerConfig, &res); + ScopedAStatus status = ecoSession->addStatsProvider(fakeProvider, providerConfig, &res); EXPECT_TRUE(status.isOk()); } // Add two providers and expect failure as ECOService1.0 only supports one provider and one // listener. TEST_F(EcoSessionTest, TestAddTwoProvider) { - sp<ECOSession> ecoSession = createSession(kTestWidth, kTestHeight, kIsCameraRecording); + std::shared_ptr<ECOSession> ecoSession = + createSession(kTestWidth, kTestHeight, kIsCameraRecording); EXPECT_TRUE(ecoSession); - sp<FakeECOServiceStatsProvider> fakeProvider1 = new FakeECOServiceStatsProvider( - kTestWidth, kTestHeight, kIsCameraRecording, kFrameRate, ecoSession); + std::shared_ptr<FakeECOServiceStatsProvider> fakeProvider1 = + ndk::SharedRefBase::make<FakeECOServiceStatsProvider>( + kTestWidth, kTestHeight, kIsCameraRecording, kFrameRate, ecoSession); ECOData providerConfig(ECOData::DATA_TYPE_STATS_PROVIDER_CONFIG, systemTime(SYSTEM_TIME_BOOTTIME)); bool res; - Status status = ecoSession->addStatsProvider(fakeProvider1, providerConfig, &res); + ScopedAStatus status = ecoSession->addStatsProvider(fakeProvider1, providerConfig, &res); EXPECT_TRUE(status.isOk()); - sp<FakeECOServiceStatsProvider> fakeProvider2 = new FakeECOServiceStatsProvider( - kTestWidth, kTestHeight, kIsCameraRecording, kFrameRate, ecoSession); + std::shared_ptr<FakeECOServiceStatsProvider> fakeProvider2 = + ndk::SharedRefBase::make<FakeECOServiceStatsProvider>( + kTestWidth, kTestHeight, kIsCameraRecording, kFrameRate, ecoSession); status = ecoSession->addStatsProvider(fakeProvider2, providerConfig, &res); EXPECT_FALSE(status.isOk()); } TEST_F(EcoSessionTest, TestAddListenerWithDifferentHeight) { - sp<ECOSession> ecoSession = createSession(kTestWidth, kTestHeight, kIsCameraRecording); + std::shared_ptr<ECOSession> ecoSession = + createSession(kTestWidth, kTestHeight, kIsCameraRecording); EXPECT_TRUE(ecoSession); - sp<FakeECOServiceInfoListener> fakeListener = new FakeECOServiceInfoListener( - kTestWidth - 1, kTestHeight, kIsCameraRecording, ecoSession); + std::shared_ptr<FakeECOServiceInfoListener> fakeListener = + ndk::SharedRefBase::make<FakeECOServiceInfoListener>(kTestWidth - 1, kTestHeight, + kIsCameraRecording, ecoSession); ECOData ListenerConfig(ECOData::DATA_TYPE_INFO_LISTENER_CONFIG, systemTime(SYSTEM_TIME_BOOTTIME)); bool res; - Status status = ecoSession->addInfoListener(fakeListener, ListenerConfig, &res); + ScopedAStatus status = ecoSession->addInfoListener(fakeListener, ListenerConfig, &res); EXPECT_FALSE(status.isOk()); } TEST_F(EcoSessionTest, TestAddListenerWithDifferentWidth) { - sp<ECOSession> ecoSession = createSession(kTestWidth, kTestHeight, kIsCameraRecording); + std::shared_ptr<ECOSession> ecoSession = + createSession(kTestWidth, kTestHeight, kIsCameraRecording); EXPECT_TRUE(ecoSession); - sp<FakeECOServiceInfoListener> fakeListener = new FakeECOServiceInfoListener( - kTestWidth, kTestHeight - 1, kIsCameraRecording, ecoSession); + std::shared_ptr<FakeECOServiceInfoListener> fakeListener = + ndk::SharedRefBase::make<FakeECOServiceInfoListener>(kTestWidth, kTestHeight - 1, + kIsCameraRecording, ecoSession); ECOData ListenerConfig(ECOData::DATA_TYPE_INFO_LISTENER_CONFIG, systemTime(SYSTEM_TIME_BOOTTIME)); bool res; - Status status = ecoSession->addInfoListener(fakeListener, ListenerConfig, &res); + ScopedAStatus status = ecoSession->addInfoListener(fakeListener, ListenerConfig, &res); EXPECT_FALSE(status.isOk()); } TEST_F(EcoSessionTest, TestAddListenerWithCameraRecordingFalse) { - sp<ECOSession> ecoSession = createSession(kTestWidth, kTestHeight, kIsCameraRecording); + std::shared_ptr<ECOSession> ecoSession = + createSession(kTestWidth, kTestHeight, kIsCameraRecording); EXPECT_TRUE(ecoSession); - sp<FakeECOServiceInfoListener> fakeListener = new FakeECOServiceInfoListener( - kTestWidth, kTestHeight, !kIsCameraRecording, ecoSession); + std::shared_ptr<FakeECOServiceInfoListener> fakeListener = + ndk::SharedRefBase::make<FakeECOServiceInfoListener>(kTestWidth, kTestHeight, + !kIsCameraRecording, ecoSession); ECOData ListenerConfig(ECOData::DATA_TYPE_INFO_LISTENER_CONFIG, systemTime(SYSTEM_TIME_BOOTTIME)); bool res; - Status status = ecoSession->addInfoListener(fakeListener, ListenerConfig, &res); + ScopedAStatus status = ecoSession->addInfoListener(fakeListener, ListenerConfig, &res); EXPECT_FALSE(status.isOk()); } @@ -202,22 +217,25 @@ static constexpr int kServiceWaitTimeMs = 10; // Create the session. - sp<ECOSession> ecoSession = createSession(kTestWidth, kTestHeight, kIsCameraRecording); + std::shared_ptr<ECOSession> ecoSession = + createSession(kTestWidth, kTestHeight, kIsCameraRecording); // Add provider. - sp<FakeECOServiceStatsProvider> fakeProvider = new FakeECOServiceStatsProvider( - kTestWidth, kTestHeight, kIsCameraRecording, kFrameRate, ecoSession); + std::shared_ptr<FakeECOServiceStatsProvider> fakeProvider = + ndk::SharedRefBase::make<FakeECOServiceStatsProvider>( + kTestWidth, kTestHeight, kIsCameraRecording, kFrameRate, ecoSession); ECOData providerConfig(ECOData::DATA_TYPE_STATS_PROVIDER_CONFIG, systemTime(SYSTEM_TIME_BOOTTIME)); providerConfig.setString(KEY_PROVIDER_NAME, "FakeECOServiceStatsProvider"); providerConfig.setInt32(KEY_PROVIDER_TYPE, ECOServiceStatsProvider::STATS_PROVIDER_TYPE_VIDEO_ENCODER); bool res; - Status status = ecoSession->addStatsProvider(fakeProvider, providerConfig, &res); + ScopedAStatus status = ecoSession->addStatsProvider(fakeProvider, providerConfig, &res); // Create listener. - sp<FakeECOServiceInfoListener> fakeListener = - new FakeECOServiceInfoListener(kTestWidth, kTestHeight, kIsCameraRecording, ecoSession); + std::shared_ptr<FakeECOServiceInfoListener> fakeListener = + ndk::SharedRefBase::make<FakeECOServiceInfoListener>(kTestWidth, kTestHeight, + kIsCameraRecording, ecoSession); // Create the listener config. ECOData listenerConfig(ECOData::DATA_TYPE_INFO_LISTENER_CONFIG, @@ -410,16 +428,18 @@ } TEST_F(EcoSessionTest, TestRemoveMatchProvider) { - sp<ECOSession> ecoSession = createSession(kTestWidth, kTestHeight, kIsCameraRecording); + std::shared_ptr<ECOSession> ecoSession = + createSession(kTestWidth, kTestHeight, kIsCameraRecording); EXPECT_TRUE(ecoSession); - sp<FakeECOServiceStatsProvider> fakeProvider1 = new FakeECOServiceStatsProvider( - kTestWidth, kTestHeight, kIsCameraRecording, kFrameRate, ecoSession); + std::shared_ptr<FakeECOServiceStatsProvider> fakeProvider1 = + ndk::SharedRefBase::make<FakeECOServiceStatsProvider>( + kTestWidth, kTestHeight, kIsCameraRecording, kFrameRate, ecoSession); ECOData providerConfig(ECOData::DATA_TYPE_STATS_PROVIDER_CONFIG, systemTime(SYSTEM_TIME_BOOTTIME)); bool res; - Status status = ecoSession->addStatsProvider(fakeProvider1, providerConfig, &res); + ScopedAStatus status = ecoSession->addStatsProvider(fakeProvider1, providerConfig, &res); EXPECT_TRUE(res); EXPECT_TRUE(status.isOk()); @@ -429,21 +449,24 @@ } TEST_F(EcoSessionTest, TestRemoveMisMatchProvider) { - sp<ECOSession> ecoSession = createSession(kTestWidth, kTestHeight, kIsCameraRecording); + std::shared_ptr<ECOSession> ecoSession = + createSession(kTestWidth, kTestHeight, kIsCameraRecording); EXPECT_TRUE(ecoSession); - sp<FakeECOServiceStatsProvider> fakeProvider1 = new FakeECOServiceStatsProvider( - kTestWidth, kTestHeight, kIsCameraRecording, kFrameRate, ecoSession); + std::shared_ptr<FakeECOServiceStatsProvider> fakeProvider1 = + ndk::SharedRefBase::make<FakeECOServiceStatsProvider>( + kTestWidth, kTestHeight, kIsCameraRecording, kFrameRate, ecoSession); ECOData providerConfig(ECOData::DATA_TYPE_STATS_PROVIDER_CONFIG, systemTime(SYSTEM_TIME_BOOTTIME)); bool res; - Status status = ecoSession->addStatsProvider(fakeProvider1, providerConfig, &res); + ScopedAStatus status = ecoSession->addStatsProvider(fakeProvider1, providerConfig, &res); EXPECT_TRUE(res); EXPECT_TRUE(status.isOk()); - sp<FakeECOServiceStatsProvider> fakeProvider2 = new FakeECOServiceStatsProvider( - kTestWidth, kTestHeight, kIsCameraRecording, kFrameRate, ecoSession); + std::shared_ptr<FakeECOServiceStatsProvider> fakeProvider2 = + ndk::SharedRefBase::make<FakeECOServiceStatsProvider>( + kTestWidth, kTestHeight, kIsCameraRecording, kFrameRate, ecoSession); status = ecoSession->removeStatsProvider(fakeProvider2, &res); EXPECT_FALSE(res); @@ -451,12 +474,14 @@ } TEST_F(EcoSessionTest, TestRemoveMatchListener) { - sp<ECOSession> ecoSession = createSession(kTestWidth, kTestHeight, kIsCameraRecording); + std::shared_ptr<ECOSession> ecoSession = + createSession(kTestWidth, kTestHeight, kIsCameraRecording); EXPECT_TRUE(ecoSession); // Create listener. - sp<FakeECOServiceInfoListener> fakeListener = - new FakeECOServiceInfoListener(kTestWidth, kTestHeight, kIsCameraRecording, ecoSession); + std::shared_ptr<FakeECOServiceInfoListener> fakeListener = + ndk::SharedRefBase::make<FakeECOServiceInfoListener>(kTestWidth, kTestHeight, + kIsCameraRecording, ecoSession); // Create the listener config. ECOData listenerConfig(ECOData::DATA_TYPE_INFO_LISTENER_CONFIG, @@ -469,7 +494,7 @@ listenerConfig.setInt32(KEY_LISTENER_QP_CHANGE_THRESHOLD, 5); bool res; - Status status = ecoSession->addInfoListener(fakeListener, listenerConfig, &res); + ScopedAStatus status = ecoSession->addInfoListener(fakeListener, listenerConfig, &res); status = ecoSession->removeInfoListener(fakeListener, &res); EXPECT_TRUE(res); @@ -477,12 +502,14 @@ } TEST_F(EcoSessionTest, TestRemoveMisMatchListener) { - sp<ECOSession> ecoSession = createSession(kTestWidth, kTestHeight, kIsCameraRecording); + std::shared_ptr<ECOSession> ecoSession = + createSession(kTestWidth, kTestHeight, kIsCameraRecording); EXPECT_TRUE(ecoSession); // Create listener. - sp<FakeECOServiceInfoListener> fakeListener = - new FakeECOServiceInfoListener(kTestWidth, kTestHeight, kIsCameraRecording, ecoSession); + std::shared_ptr<FakeECOServiceInfoListener> fakeListener = + ndk::SharedRefBase::make<FakeECOServiceInfoListener>(kTestWidth, kTestHeight, + kIsCameraRecording, ecoSession); // Create the listener config. ECOData listenerConfig(ECOData::DATA_TYPE_INFO_LISTENER_CONFIG, @@ -495,11 +522,12 @@ listenerConfig.setInt32(KEY_LISTENER_QP_CHANGE_THRESHOLD, 5); bool res; - Status status = ecoSession->addInfoListener(fakeListener, listenerConfig, &res); + ScopedAStatus status = ecoSession->addInfoListener(fakeListener, listenerConfig, &res); // Create listener. - sp<FakeECOServiceInfoListener> fakeListener2 = - new FakeECOServiceInfoListener(kTestWidth, kTestHeight, kIsCameraRecording, ecoSession); + std::shared_ptr<FakeECOServiceInfoListener> fakeListener2 = + ndk::SharedRefBase::make<FakeECOServiceInfoListener>(kTestWidth, kTestHeight, + kIsCameraRecording, ecoSession); status = ecoSession->removeInfoListener(fakeListener2, &res); EXPECT_FALSE(res); @@ -513,18 +541,20 @@ static constexpr int kServiceWaitTimeMs = 10; // Create the session. - sp<ECOSession> ecoSession = createSession(kTestWidth, kTestHeight, kIsCameraRecording); + std::shared_ptr<ECOSession> ecoSession = + createSession(kTestWidth, kTestHeight, kIsCameraRecording); // Add provider. - sp<FakeECOServiceStatsProvider> fakeProvider = new FakeECOServiceStatsProvider( - kTestWidth, kTestHeight, kIsCameraRecording, kFrameRate, ecoSession); + std::shared_ptr<FakeECOServiceStatsProvider> fakeProvider = + ndk::SharedRefBase::make<FakeECOServiceStatsProvider>( + kTestWidth, kTestHeight, kIsCameraRecording, kFrameRate, ecoSession); ECOData providerConfig(ECOData::DATA_TYPE_STATS_PROVIDER_CONFIG, systemTime(SYSTEM_TIME_BOOTTIME)); providerConfig.setString(KEY_PROVIDER_NAME, "FakeECOServiceStatsProvider"); providerConfig.setInt32(KEY_PROVIDER_TYPE, ECOServiceStatsProvider::STATS_PROVIDER_TYPE_VIDEO_ENCODER); bool res; - Status status = ecoSession->addStatsProvider(fakeProvider, providerConfig, &res); + ScopedAStatus status = ecoSession->addStatsProvider(fakeProvider, providerConfig, &res); // Inject the session stats into the ECOSession through fakeProvider. SimpleEncoderConfig sessionEncoderConfig("google-avc", CodecTypeAVC, AVCProfileHigh, AVCLevel52, @@ -546,8 +576,9 @@ // ======================================================================================= // Create and add the listener to the ECOSession. Expect to receive the session infor right // after addInfoListener. - sp<FakeECOServiceInfoListener> fakeListener = - new FakeECOServiceInfoListener(kTestWidth, kTestHeight, kIsCameraRecording, ecoSession); + std::shared_ptr<FakeECOServiceInfoListener> fakeListener = + ndk::SharedRefBase::make<FakeECOServiceInfoListener>(kTestWidth, kTestHeight, + kIsCameraRecording, ecoSession); // Create the listener config. ECOData listenerConfig(ECOData::DATA_TYPE_INFO_LISTENER_CONFIG,
diff --git a/media/eco/tests/FakeECOServiceInfoListener.cpp b/media/eco/tests/FakeECOServiceInfoListener.cpp index 10a6851..8a58f7d 100644 --- a/media/eco/tests/FakeECOServiceInfoListener.cpp +++ b/media/eco/tests/FakeECOServiceInfoListener.cpp
@@ -20,8 +20,7 @@ #include "FakeECOServiceInfoListener.h" #include <android-base/unique_fd.h> -#include <binder/Parcel.h> -#include <binder/Parcelable.h> +#include <android/binder_parcel.h> #include <cutils/ashmem.h> #include <gtest/gtest.h> #include <math.h> @@ -35,7 +34,7 @@ FakeECOServiceInfoListener::FakeECOServiceInfoListener(int32_t width, int32_t height, bool isCameraRecording, - android::sp<IECOSession> session) + std::shared_ptr<IECOSession> session) : mWidth(width), mHeight(height), mIsCameraRecording(isCameraRecording), @@ -55,28 +54,29 @@ ALOGD("FakeECOServiceInfoListener destructor"); } -Status FakeECOServiceInfoListener::getType(int32_t* /*_aidl_return*/) { - return binder::Status::ok(); +ndk::ScopedAStatus FakeECOServiceInfoListener::getType(int32_t* /*_aidl_return*/) { + return ndk::ScopedAStatus::ok(); } -Status FakeECOServiceInfoListener::getName(::android::String16* _aidl_return) { - *_aidl_return = String16("FakeECOServiceInfoListener"); - return binder::Status::ok(); +ndk::ScopedAStatus FakeECOServiceInfoListener::getName(std::string* _aidl_return) { + *_aidl_return = std::string("FakeECOServiceInfoListener"); + return ndk::ScopedAStatus::ok(); } -Status FakeECOServiceInfoListener::getECOSession(sp<::android::IBinder>* _aidl_return) { - *_aidl_return = IInterface::asBinder(mECOSession); - return binder::Status::ok(); +ndk::ScopedAStatus FakeECOServiceInfoListener::getECOSession(::ndk::SpAIBinder* _aidl_return) { + *_aidl_return = mECOSession->asBinder(); + return ndk::ScopedAStatus::ok(); } -Status FakeECOServiceInfoListener::onNewInfo(const ::android::media::eco::ECOData& newInfo) { +ndk::ScopedAStatus FakeECOServiceInfoListener::onNewInfo( + const ::android::media::eco::ECOData& newInfo) { ALOGD("FakeECOServiceInfoListener get new info"); mInfoAvaiableCallback(newInfo); - return binder::Status::ok(); + return ndk::ScopedAStatus::ok(); } // IBinder::DeathRecipient implementation -void FakeECOServiceInfoListener::binderDied(const wp<IBinder>& /*who*/) {} +void FakeECOServiceInfoListener::binderDied(const std::weak_ptr<AIBinder>& /*who*/) {} } // namespace eco } // namespace media
diff --git a/media/eco/tests/FakeECOServiceInfoListener.h b/media/eco/tests/FakeECOServiceInfoListener.h index 7c23275..f49bd60 100644 --- a/media/eco/tests/FakeECOServiceInfoListener.h +++ b/media/eco/tests/FakeECOServiceInfoListener.h
@@ -16,11 +16,11 @@ // A fake ECOServiceInfoListener for testing ECOService and ECOSession. +#include <aidl/android/media/eco/BnECOServiceInfoListener.h> +#include <aidl/android/media/eco/IECOSession.h> #include <android-base/unique_fd.h> -#include <android/media/eco/BnECOServiceInfoListener.h> -#include <android/media/eco/IECOSession.h> -#include <binder/Parcel.h> -#include <binder/Parcelable.h> +#include <android/binder_auto_utils.h> +#include <android/binder_parcel.h> #include <cutils/ashmem.h> #include <gtest/gtest.h> #include <math.h> @@ -35,8 +35,11 @@ namespace media { namespace eco { -using ::android::sp; -using ::android::binder::Status; +using aidl::android::media::eco::BnECOServiceInfoListener; +using aidl::android::media::eco::ECOData; +using aidl::android::media::eco::ECODataStatus; +using aidl::android::media::eco::IECOSession; +using ::ndk::ScopedAStatus; /** * A fake ECOServiceInfoListener. @@ -51,18 +54,18 @@ std::function<void(const ::android::media::eco::ECOData& newInfo)>; FakeECOServiceInfoListener(int32_t width, int32_t height, bool isCameraRecording, - sp<IECOSession> session); + std::shared_ptr<IECOSession> session); FakeECOServiceInfoListener(int32_t width, int32_t height, bool isCameraRecording); - void setECOSession(android::sp<IECOSession> session) { mECOSession = session; } + void setECOSession(std::shared_ptr<IECOSession> session) { mECOSession = session; } virtual ~FakeECOServiceInfoListener(); - virtual Status getType(int32_t* _aidl_return); - virtual Status getName(::android::String16* _aidl_return); - virtual Status getECOSession(::android::sp<::android::IBinder>* _aidl_return); - virtual Status onNewInfo(const ::android::media::eco::ECOData& newInfo); + virtual ScopedAStatus getType(int32_t* _aidl_return); + virtual ScopedAStatus getName(std::string* _aidl_return); + virtual ScopedAStatus getECOSession(::ndk::SpAIBinder* _aidl_return); + virtual ScopedAStatus onNewInfo(const ::android::media::eco::ECOData& newInfo); // Helper callback to send the info to the test. void setInfoAvailableCallback(InfoAvailableCallback callback) { @@ -70,13 +73,13 @@ } // IBinder::DeathRecipient implementation - virtual void binderDied(const wp<IBinder>& who); + virtual void binderDied(const std::weak_ptr<AIBinder>& who); private: int32_t mWidth; int32_t mHeight; bool mIsCameraRecording; - android::sp<IECOSession> mECOSession; + std::shared_ptr<IECOSession> mECOSession; InfoAvailableCallback mInfoAvaiableCallback; };
diff --git a/media/eco/tests/FakeECOServiceStatsProvider.cpp b/media/eco/tests/FakeECOServiceStatsProvider.cpp index 4bf0ca4..9410889 100644 --- a/media/eco/tests/FakeECOServiceStatsProvider.cpp +++ b/media/eco/tests/FakeECOServiceStatsProvider.cpp
@@ -20,8 +20,8 @@ #include "FakeECOServiceStatsProvider.h" #include <android-base/unique_fd.h> -#include <binder/Parcel.h> -#include <binder/Parcelable.h> +#include <android/binder_auto_utils.h> +#include <android/binder_parcel.h> #include <cutils/ashmem.h> #include <gtest/gtest.h> #include <math.h> @@ -35,7 +35,7 @@ FakeECOServiceStatsProvider::FakeECOServiceStatsProvider(int32_t width, int32_t height, bool isCameraRecording, float frameRate, - android::sp<IECOSession> session) + std::shared_ptr<IECOSession> session) : mWidth(width), mHeight(height), mIsCameraRecording(isCameraRecording), @@ -63,18 +63,18 @@ ALOGD("FakeECOServiceStatsProvider destructor"); } -Status FakeECOServiceStatsProvider::getType(int32_t* /*_aidl_return*/) { - return binder::Status::ok(); +ndk::ScopedAStatus FakeECOServiceStatsProvider::getType(int32_t* /*_aidl_return*/) { + return ndk::ScopedAStatus::ok(); } -Status FakeECOServiceStatsProvider::getName(::android::String16* _aidl_return) { - *_aidl_return = String16("FakeECOServiceStatsProvider"); - return binder::Status::ok(); +ndk::ScopedAStatus FakeECOServiceStatsProvider::getName(std::string* _aidl_return) { + *_aidl_return = std::string("FakeECOServiceStatsProvider"); + return ndk::ScopedAStatus::ok(); } -Status FakeECOServiceStatsProvider::getECOSession(sp<::android::IBinder>* _aidl_return) { - *_aidl_return = IInterface::asBinder(mECOSession); - return binder::Status::ok(); +ndk::ScopedAStatus FakeECOServiceStatsProvider::getECOSession(::ndk::SpAIBinder* _aidl_return) { + *_aidl_return = mECOSession->asBinder(); + return ndk::ScopedAStatus::ok(); } bool FakeECOServiceStatsProvider::injectSessionStats(const ECOData& stats) { @@ -94,7 +94,7 @@ } // IBinder::DeathRecipient implementation -void FakeECOServiceStatsProvider::binderDied(const wp<IBinder>& /*who*/) {} +void FakeECOServiceStatsProvider::binderDied(const std::weak_ptr<AIBinder>& /*who*/) {} } // namespace eco } // namespace media
diff --git a/media/eco/tests/FakeECOServiceStatsProvider.h b/media/eco/tests/FakeECOServiceStatsProvider.h index bf14a53..6dfd3a6 100644 --- a/media/eco/tests/FakeECOServiceStatsProvider.h +++ b/media/eco/tests/FakeECOServiceStatsProvider.h
@@ -16,10 +16,10 @@ // A fake ECOServiceStatsProvider for testing ECOService and ECOSession. +#include <aidl/android/media/eco/BnECOServiceStatsProvider.h> #include <android-base/unique_fd.h> -#include <android/media/eco/BnECOServiceStatsProvider.h> -#include <binder/Parcel.h> -#include <binder/Parcelable.h> +#include <android/binder_auto_utils.h> +#include <android/binder_parcel.h> #include <cutils/ashmem.h> #include <gtest/gtest.h> #include <math.h> @@ -42,8 +42,7 @@ namespace media { namespace eco { -using ::android::sp; -using ::android::binder::Status; +using ::ndk::ScopedAStatus; /** * A fake ECOServiceStatsProvider. @@ -54,12 +53,12 @@ class FakeECOServiceStatsProvider : public BnECOServiceStatsProvider { public: FakeECOServiceStatsProvider(int32_t width, int32_t height, bool isCameraRecording, - float frameRate, android::sp<IECOSession> session); + float frameRate, std::shared_ptr<IECOSession> session); FakeECOServiceStatsProvider(int32_t width, int32_t height, bool isCameraRecording, float frameRate); - void setECOSession(android::sp<IECOSession> session) { mECOSession = session; } + void setECOSession(std::shared_ptr<IECOSession> session) { mECOSession = session; } // Helper function to inject session stats to the FakeECOServiceStatsProvider so provider // could push to the service. @@ -77,12 +76,12 @@ virtual ~FakeECOServiceStatsProvider(); - virtual Status getType(int32_t* _aidl_return); - virtual Status getName(::android::String16* _aidl_return); - virtual Status getECOSession(::android::sp<::android::IBinder>* _aidl_return); + virtual ScopedAStatus getType(int32_t* _aidl_return); + virtual ScopedAStatus getName(std::string* _aidl_return); + virtual ScopedAStatus getECOSession(::ndk::SpAIBinder* _aidl_return); // IBinder::DeathRecipient implementation - virtual void binderDied(const wp<IBinder>& who); + virtual void binderDied(const std::weak_ptr<AIBinder>& who); private: int32_t mWidth; @@ -91,7 +90,7 @@ float mFrameRate; uint32_t mFrameNumber; - android::sp<IECOSession> mECOSession; + std::shared_ptr<IECOSession> mECOSession; }; } // namespace eco