diff --git a/neuralnetworks/1.0/utils/include/nnapi/hal/1.0/Callbacks.h b/neuralnetworks/1.0/utils/include/nnapi/hal/1.0/Callbacks.h index 3b32e1dbf9..1ab9dcb90a 100644 --- a/neuralnetworks/1.0/utils/include/nnapi/hal/1.0/Callbacks.h +++ b/neuralnetworks/1.0/utils/include/nnapi/hal/1.0/Callbacks.h @@ -24,9 +24,10 @@ #include #include #include -#include #include +#include "nnapi/hal/1.0/ProtectCallback.h" + // See hardware/interfaces/neuralnetworks/utils/README.md for more information on HIDL interface // lifetimes across processes and for protecting asynchronous calls across HIDL. diff --git a/neuralnetworks/1.0/utils/include/nnapi/hal/1.0/Device.h b/neuralnetworks/1.0/utils/include/nnapi/hal/1.0/Device.h index db3b2ad44f..0a6ca3edce 100644 --- a/neuralnetworks/1.0/utils/include/nnapi/hal/1.0/Device.h +++ b/neuralnetworks/1.0/utils/include/nnapi/hal/1.0/Device.h @@ -24,7 +24,8 @@ #include #include #include -#include + +#include "nnapi/hal/1.0/ProtectCallback.h" #include #include diff --git a/neuralnetworks/1.0/utils/include/nnapi/hal/1.0/Execution.h b/neuralnetworks/1.0/utils/include/nnapi/hal/1.0/Execution.h index e201e25a13..66497c200b 100644 --- a/neuralnetworks/1.0/utils/include/nnapi/hal/1.0/Execution.h +++ b/neuralnetworks/1.0/utils/include/nnapi/hal/1.0/Execution.h @@ -22,9 +22,9 @@ #include #include #include -#include #include "PreparedModel.h" +#include "nnapi/hal/1.0/ProtectCallback.h" #include #include diff --git a/neuralnetworks/1.0/utils/include/nnapi/hal/1.0/PreparedModel.h b/neuralnetworks/1.0/utils/include/nnapi/hal/1.0/PreparedModel.h index 48be595d41..bdb5b54281 100644 --- a/neuralnetworks/1.0/utils/include/nnapi/hal/1.0/PreparedModel.h +++ b/neuralnetworks/1.0/utils/include/nnapi/hal/1.0/PreparedModel.h @@ -22,7 +22,8 @@ #include #include #include -#include + +#include "nnapi/hal/1.0/ProtectCallback.h" #include #include diff --git a/neuralnetworks/utils/common/include/nnapi/hal/ProtectCallback.h b/neuralnetworks/1.0/utils/include/nnapi/hal/1.0/ProtectCallback.h similarity index 93% rename from neuralnetworks/utils/common/include/nnapi/hal/ProtectCallback.h rename to neuralnetworks/1.0/utils/include/nnapi/hal/1.0/ProtectCallback.h index 05110bc364..7418cfad1c 100644 --- a/neuralnetworks/utils/common/include/nnapi/hal/ProtectCallback.h +++ b/neuralnetworks/1.0/utils/include/nnapi/hal/1.0/ProtectCallback.h @@ -14,8 +14,8 @@ * limitations under the License. */ -#ifndef ANDROID_HARDWARE_INTERFACES_NEURALNETWORKS_UTILS_COMMON_PROTECT_CALLBACK_H -#define ANDROID_HARDWARE_INTERFACES_NEURALNETWORKS_UTILS_COMMON_PROTECT_CALLBACK_H +#ifndef ANDROID_HARDWARE_INTERFACES_NEURALNETWORKS_1_0_UTILS_PROTECT_CALLBACK_H +#define ANDROID_HARDWARE_INTERFACES_NEURALNETWORKS_1_0_UTILS_PROTECT_CALLBACK_H #include #include @@ -98,4 +98,4 @@ class DeathHandler final { } // namespace android::hardware::neuralnetworks::utils -#endif // ANDROID_HARDWARE_INTERFACES_NEURALNETWORKS_UTILS_COMMON_PROTECT_CALLBACK_H +#endif // ANDROID_HARDWARE_INTERFACES_NEURALNETWORKS_1_0_UTILS_PROTECT_CALLBACK_H diff --git a/neuralnetworks/1.0/utils/src/Callbacks.cpp b/neuralnetworks/1.0/utils/src/Callbacks.cpp index ea3ea56de6..5fb9e928a1 100644 --- a/neuralnetworks/1.0/utils/src/Callbacks.cpp +++ b/neuralnetworks/1.0/utils/src/Callbacks.cpp @@ -18,6 +18,7 @@ #include "Conversions.h" #include "PreparedModel.h" +#include "ProtectCallback.h" #include "Utils.h" #include @@ -28,7 +29,6 @@ #include #include #include -#include #include #include diff --git a/neuralnetworks/1.0/utils/src/Device.cpp b/neuralnetworks/1.0/utils/src/Device.cpp index 93bd81a19c..404a92fcbb 100644 --- a/neuralnetworks/1.0/utils/src/Device.cpp +++ b/neuralnetworks/1.0/utils/src/Device.cpp @@ -18,6 +18,7 @@ #include "Callbacks.h" #include "Conversions.h" +#include "ProtectCallback.h" #include "Utils.h" #include @@ -30,7 +31,6 @@ #include #include #include -#include #include #include diff --git a/neuralnetworks/1.0/utils/src/Execution.cpp b/neuralnetworks/1.0/utils/src/Execution.cpp index 7a3216b5db..056b0414ca 100644 --- a/neuralnetworks/1.0/utils/src/Execution.cpp +++ b/neuralnetworks/1.0/utils/src/Execution.cpp @@ -18,6 +18,7 @@ #include "Callbacks.h" #include "Conversions.h" +#include "ProtectCallback.h" #include "Utils.h" #include @@ -28,7 +29,6 @@ #include #include #include -#include #include #include diff --git a/neuralnetworks/1.0/utils/src/PreparedModel.cpp b/neuralnetworks/1.0/utils/src/PreparedModel.cpp index 3060c652da..b332182700 100644 --- a/neuralnetworks/1.0/utils/src/PreparedModel.cpp +++ b/neuralnetworks/1.0/utils/src/PreparedModel.cpp @@ -20,6 +20,7 @@ #include "Callbacks.h" #include "Conversions.h" #include "Execution.h" +#include "ProtectCallback.h" #include "Utils.h" #include @@ -29,7 +30,6 @@ #include #include #include -#include #include #include diff --git a/neuralnetworks/utils/common/src/ProtectCallback.cpp b/neuralnetworks/1.0/utils/src/ProtectCallback.cpp similarity index 100% rename from neuralnetworks/utils/common/src/ProtectCallback.cpp rename to neuralnetworks/1.0/utils/src/ProtectCallback.cpp diff --git a/neuralnetworks/1.1/utils/include/nnapi/hal/1.1/Device.h b/neuralnetworks/1.1/utils/include/nnapi/hal/1.1/Device.h index 5e224b5018..d6bd36a7fe 100644 --- a/neuralnetworks/1.1/utils/include/nnapi/hal/1.1/Device.h +++ b/neuralnetworks/1.1/utils/include/nnapi/hal/1.1/Device.h @@ -23,8 +23,8 @@ #include #include #include +#include #include -#include #include #include diff --git a/neuralnetworks/1.1/utils/src/Device.cpp b/neuralnetworks/1.1/utils/src/Device.cpp index 3197ef4ac3..0e239cbe82 100644 --- a/neuralnetworks/1.1/utils/src/Device.cpp +++ b/neuralnetworks/1.1/utils/src/Device.cpp @@ -29,9 +29,9 @@ #include #include #include +#include #include #include -#include #include #include diff --git a/neuralnetworks/1.2/utils/include/nnapi/hal/1.2/Callbacks.h b/neuralnetworks/1.2/utils/include/nnapi/hal/1.2/Callbacks.h index ba3c1ba1db..6dd8138f64 100644 --- a/neuralnetworks/1.2/utils/include/nnapi/hal/1.2/Callbacks.h +++ b/neuralnetworks/1.2/utils/include/nnapi/hal/1.2/Callbacks.h @@ -27,8 +27,8 @@ #include #include #include +#include #include -#include #include // See hardware/interfaces/neuralnetworks/utils/README.md for more information on HIDL interface diff --git a/neuralnetworks/1.2/utils/include/nnapi/hal/1.2/Device.h b/neuralnetworks/1.2/utils/include/nnapi/hal/1.2/Device.h index b4bef5ee0a..e7ac172211 100644 --- a/neuralnetworks/1.2/utils/include/nnapi/hal/1.2/Device.h +++ b/neuralnetworks/1.2/utils/include/nnapi/hal/1.2/Device.h @@ -23,8 +23,8 @@ #include #include #include +#include #include -#include #include #include diff --git a/neuralnetworks/1.2/utils/include/nnapi/hal/1.2/Execution.h b/neuralnetworks/1.2/utils/include/nnapi/hal/1.2/Execution.h index 9c66446a2a..867f181bda 100644 --- a/neuralnetworks/1.2/utils/include/nnapi/hal/1.2/Execution.h +++ b/neuralnetworks/1.2/utils/include/nnapi/hal/1.2/Execution.h @@ -21,8 +21,8 @@ #include #include #include +#include #include -#include #include "PreparedModel.h" diff --git a/neuralnetworks/1.2/utils/include/nnapi/hal/1.2/ExecutionBurstController.h b/neuralnetworks/1.2/utils/include/nnapi/hal/1.2/ExecutionBurstController.h index dae1ff36c5..8078693aa5 100644 --- a/neuralnetworks/1.2/utils/include/nnapi/hal/1.2/ExecutionBurstController.h +++ b/neuralnetworks/1.2/utils/include/nnapi/hal/1.2/ExecutionBurstController.h @@ -32,8 +32,8 @@ #include #include #include +#include #include -#include #include #include diff --git a/neuralnetworks/1.2/utils/include/nnapi/hal/1.2/ExecutionBurstServer.h b/neuralnetworks/1.2/utils/include/nnapi/hal/1.2/ExecutionBurstServer.h index f7926f5835..500aa0cfd0 100644 --- a/neuralnetworks/1.2/utils/include/nnapi/hal/1.2/ExecutionBurstServer.h +++ b/neuralnetworks/1.2/utils/include/nnapi/hal/1.2/ExecutionBurstServer.h @@ -29,7 +29,7 @@ #include #include #include -#include +#include #include #include diff --git a/neuralnetworks/1.2/utils/include/nnapi/hal/1.2/ExecutionBurstUtils.h b/neuralnetworks/1.2/utils/include/nnapi/hal/1.2/ExecutionBurstUtils.h index c662bc3eed..c081305a86 100644 --- a/neuralnetworks/1.2/utils/include/nnapi/hal/1.2/ExecutionBurstUtils.h +++ b/neuralnetworks/1.2/utils/include/nnapi/hal/1.2/ExecutionBurstUtils.h @@ -23,7 +23,7 @@ #include #include #include -#include +#include #include #include diff --git a/neuralnetworks/1.2/utils/include/nnapi/hal/1.2/PreparedModel.h b/neuralnetworks/1.2/utils/include/nnapi/hal/1.2/PreparedModel.h index 35abd7947b..1150e5e79b 100644 --- a/neuralnetworks/1.2/utils/include/nnapi/hal/1.2/PreparedModel.h +++ b/neuralnetworks/1.2/utils/include/nnapi/hal/1.2/PreparedModel.h @@ -22,8 +22,8 @@ #include #include #include +#include #include -#include #include #include diff --git a/neuralnetworks/1.2/utils/src/Callbacks.cpp b/neuralnetworks/1.2/utils/src/Callbacks.cpp index 01b5e12387..c855b172e9 100644 --- a/neuralnetworks/1.2/utils/src/Callbacks.cpp +++ b/neuralnetworks/1.2/utils/src/Callbacks.cpp @@ -30,9 +30,9 @@ #include #include #include +#include #include #include -#include #include #include diff --git a/neuralnetworks/1.2/utils/src/Device.cpp b/neuralnetworks/1.2/utils/src/Device.cpp index 9fe0de25b3..42c2a61fab 100644 --- a/neuralnetworks/1.2/utils/src/Device.cpp +++ b/neuralnetworks/1.2/utils/src/Device.cpp @@ -30,10 +30,10 @@ #include #include #include +#include #include #include #include -#include #include #include diff --git a/neuralnetworks/1.2/utils/src/ExecutionBurstController.cpp b/neuralnetworks/1.2/utils/src/ExecutionBurstController.cpp index 2746965da8..98a75fa785 100644 --- a/neuralnetworks/1.2/utils/src/ExecutionBurstController.cpp +++ b/neuralnetworks/1.2/utils/src/ExecutionBurstController.cpp @@ -28,9 +28,9 @@ #include #include #include +#include #include #include -#include #include #include diff --git a/neuralnetworks/1.2/utils/src/ExecutionBurstServer.cpp b/neuralnetworks/1.2/utils/src/ExecutionBurstServer.cpp index 65ec7f5532..52cabd8b96 100644 --- a/neuralnetworks/1.2/utils/src/ExecutionBurstServer.cpp +++ b/neuralnetworks/1.2/utils/src/ExecutionBurstServer.cpp @@ -27,8 +27,8 @@ #include #include #include +#include #include -#include #include #include diff --git a/neuralnetworks/1.2/utils/src/ExecutionBurstUtils.cpp b/neuralnetworks/1.2/utils/src/ExecutionBurstUtils.cpp index 1bdde1e71a..e0d029aa59 100644 --- a/neuralnetworks/1.2/utils/src/ExecutionBurstUtils.cpp +++ b/neuralnetworks/1.2/utils/src/ExecutionBurstUtils.cpp @@ -27,7 +27,7 @@ #include #include #include -#include +#include #include #include diff --git a/neuralnetworks/1.2/utils/src/PreparedModel.cpp b/neuralnetworks/1.2/utils/src/PreparedModel.cpp index c26118410d..d11cdc2d2a 100644 --- a/neuralnetworks/1.2/utils/src/PreparedModel.cpp +++ b/neuralnetworks/1.2/utils/src/PreparedModel.cpp @@ -31,9 +31,9 @@ #include #include #include +#include #include #include -#include #include #include diff --git a/neuralnetworks/1.3/utils/include/nnapi/hal/1.3/Callbacks.h b/neuralnetworks/1.3/utils/include/nnapi/hal/1.3/Callbacks.h index 643172e192..4b8ddc1885 100644 --- a/neuralnetworks/1.3/utils/include/nnapi/hal/1.3/Callbacks.h +++ b/neuralnetworks/1.3/utils/include/nnapi/hal/1.3/Callbacks.h @@ -30,8 +30,8 @@ #include #include #include +#include #include -#include #include // See hardware/interfaces/neuralnetworks/utils/README.md for more information on HIDL interface diff --git a/neuralnetworks/1.3/utils/include/nnapi/hal/1.3/Device.h b/neuralnetworks/1.3/utils/include/nnapi/hal/1.3/Device.h index 84f606a357..c3c6fc4eb8 100644 --- a/neuralnetworks/1.3/utils/include/nnapi/hal/1.3/Device.h +++ b/neuralnetworks/1.3/utils/include/nnapi/hal/1.3/Device.h @@ -23,8 +23,8 @@ #include #include #include +#include #include -#include #include #include diff --git a/neuralnetworks/1.3/utils/include/nnapi/hal/1.3/PreparedModel.h b/neuralnetworks/1.3/utils/include/nnapi/hal/1.3/PreparedModel.h index 5acba71826..480438d9f2 100644 --- a/neuralnetworks/1.3/utils/include/nnapi/hal/1.3/PreparedModel.h +++ b/neuralnetworks/1.3/utils/include/nnapi/hal/1.3/PreparedModel.h @@ -21,8 +21,8 @@ #include #include #include +#include #include -#include #include #include diff --git a/neuralnetworks/1.3/utils/src/Callbacks.cpp b/neuralnetworks/1.3/utils/src/Callbacks.cpp index 156216f594..b4fe487422 100644 --- a/neuralnetworks/1.3/utils/src/Callbacks.cpp +++ b/neuralnetworks/1.3/utils/src/Callbacks.cpp @@ -31,12 +31,12 @@ #include #include #include +#include #include #include #include #include #include -#include #include #include diff --git a/neuralnetworks/1.3/utils/src/Device.cpp b/neuralnetworks/1.3/utils/src/Device.cpp index d710b85070..462d557e53 100644 --- a/neuralnetworks/1.3/utils/src/Device.cpp +++ b/neuralnetworks/1.3/utils/src/Device.cpp @@ -33,13 +33,13 @@ #include #include #include +#include #include #include #include #include #include #include -#include #include #include diff --git a/neuralnetworks/1.3/utils/src/PreparedModel.cpp b/neuralnetworks/1.3/utils/src/PreparedModel.cpp index c9771e3643..792665ed1e 100644 --- a/neuralnetworks/1.3/utils/src/PreparedModel.cpp +++ b/neuralnetworks/1.3/utils/src/PreparedModel.cpp @@ -30,12 +30,12 @@ #include #include #include +#include #include #include #include #include #include -#include #include #include diff --git a/neuralnetworks/aidl/utils/include/nnapi/hal/aidl/Callbacks.h b/neuralnetworks/aidl/utils/include/nnapi/hal/aidl/Callbacks.h index 8651912cb8..168264babf 100644 --- a/neuralnetworks/aidl/utils/include/nnapi/hal/aidl/Callbacks.h +++ b/neuralnetworks/aidl/utils/include/nnapi/hal/aidl/Callbacks.h @@ -32,8 +32,7 @@ namespace aidl::android::hardware::neuralnetworks::utils { // An AIDL callback class to receive the results of IDevice::prepareModel* asynchronously. -class PreparedModelCallback final : public BnPreparedModelCallback, - public hal::utils::IProtectedCallback { +class PreparedModelCallback final : public BnPreparedModelCallback, public IProtectedCallback { public: using Data = nn::GeneralResult; diff --git a/neuralnetworks/aidl/utils/include/nnapi/hal/aidl/ProtectCallback.h b/neuralnetworks/aidl/utils/include/nnapi/hal/aidl/ProtectCallback.h index ab1108c182..92ed1cda5d 100644 --- a/neuralnetworks/aidl/utils/include/nnapi/hal/aidl/ProtectCallback.h +++ b/neuralnetworks/aidl/utils/include/nnapi/hal/aidl/ProtectCallback.h @@ -23,7 +23,6 @@ #include #include #include -#include #include #include @@ -34,19 +33,39 @@ namespace aidl::android::hardware::neuralnetworks::utils { +class IProtectedCallback { + public: + /** + * Marks this object as a dead object. + */ + virtual void notifyAsDeadObject() = 0; + + // Public virtual destructor to allow objects to be stored (and destroyed) as smart pointers. + // E.g., std::unique_ptr. + virtual ~IProtectedCallback() = default; + + protected: + // Protect the non-destructor special member functions to prevent object slicing. + IProtectedCallback() = default; + IProtectedCallback(const IProtectedCallback&) = default; + IProtectedCallback(IProtectedCallback&&) noexcept = default; + IProtectedCallback& operator=(const IProtectedCallback&) = default; + IProtectedCallback& operator=(IProtectedCallback&&) noexcept = default; +}; + // Thread safe class class DeathMonitor final { public: static void serviceDied(void* cookie); void serviceDied(); // Precondition: `killable` must be non-null. - void add(hal::utils::IProtectedCallback* killable) const; + void add(IProtectedCallback* killable) const; // Precondition: `killable` must be non-null. - void remove(hal::utils::IProtectedCallback* killable) const; + void remove(IProtectedCallback* killable) const; private: mutable std::mutex mMutex; - mutable std::vector mObjects GUARDED_BY(mMutex); + mutable std::vector mObjects GUARDED_BY(mMutex); }; class DeathHandler final { @@ -62,7 +81,7 @@ class DeathHandler final { using Cleanup = std::function; // Precondition: `killable` must be non-null. [[nodiscard]] ::android::base::ScopeGuard protectCallback( - hal::utils::IProtectedCallback* killable) const; + IProtectedCallback* killable) const; std::shared_ptr getDeathMonitor() const { return kDeathMonitor; } diff --git a/neuralnetworks/aidl/utils/src/ProtectCallback.cpp b/neuralnetworks/aidl/utils/src/ProtectCallback.cpp index 124641cbb8..54a673caf5 100644 --- a/neuralnetworks/aidl/utils/src/ProtectCallback.cpp +++ b/neuralnetworks/aidl/utils/src/ProtectCallback.cpp @@ -22,7 +22,6 @@ #include #include #include -#include #include #include @@ -37,7 +36,7 @@ namespace aidl::android::hardware::neuralnetworks::utils { void DeathMonitor::serviceDied() { std::lock_guard guard(mMutex); std::for_each(mObjects.begin(), mObjects.end(), - [](hal::utils::IProtectedCallback* killable) { killable->notifyAsDeadObject(); }); + [](IProtectedCallback* killable) { killable->notifyAsDeadObject(); }); } void DeathMonitor::serviceDied(void* cookie) { @@ -45,13 +44,13 @@ void DeathMonitor::serviceDied(void* cookie) { deathMonitor->serviceDied(); } -void DeathMonitor::add(hal::utils::IProtectedCallback* killable) const { +void DeathMonitor::add(IProtectedCallback* killable) const { CHECK(killable != nullptr); std::lock_guard guard(mMutex); mObjects.push_back(killable); } -void DeathMonitor::remove(hal::utils::IProtectedCallback* killable) const { +void DeathMonitor::remove(IProtectedCallback* killable) const { CHECK(killable != nullptr); std::lock_guard guard(mMutex); const auto removedIter = std::remove(mObjects.begin(), mObjects.end(), killable); @@ -102,7 +101,7 @@ DeathHandler::~DeathHandler() { } [[nodiscard]] ::android::base::ScopeGuard DeathHandler::protectCallback( - hal::utils::IProtectedCallback* killable) const { + IProtectedCallback* killable) const { CHECK(killable != nullptr); kDeathMonitor->add(killable); return ::android::base::make_scope_guard(