Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 20b7511a authored by Xusong Wang's avatar Xusong Wang Committed by Automerger Merge Worker
Browse files

Merge changes from topic "nnapi-reusable-execution-hal" am: 75decded am:...

Merge changes from topic "nnapi-reusable-execution-hal" am: 75decded am: a32b9717 am: 1d0b01b1

Original change: https://android-review.googlesource.com/c/platform/hardware/interfaces/+/1953130

Change-Id: Ieb8a5bda2dc0bd89d05f9db03f287aae542020f6
parents 3b2dde0a 1d0b01b1
Loading
Loading
Loading
Loading
+26 −11
Original line number Original line Diff line number Diff line
@@ -26,7 +26,14 @@ package {
cc_defaults {
cc_defaults {
    name: "neuralnetworks_utils_hal_aidl_defaults",
    name: "neuralnetworks_utils_hal_aidl_defaults",
    defaults: ["neuralnetworks_utils_defaults"],
    defaults: ["neuralnetworks_utils_defaults"],
    srcs: ["src/*"],
    srcs: [
        // AIDL utils that a driver may depend on.
        "src/BufferTracker.cpp",
        "src/Conversions.cpp",
        "src/HalUtils.cpp",
        "src/Utils.cpp",
        "src/ValidateHal.cpp",
    ],
    local_include_dirs: ["include/nnapi/hal/aidl/"],
    local_include_dirs: ["include/nnapi/hal/aidl/"],
    export_include_dirs: ["include"],
    export_include_dirs: ["include"],
    cflags: ["-Wthread-safety"],
    cflags: ["-Wthread-safety"],
@@ -47,6 +54,7 @@ cc_defaults {
    },
    },
}
}


// Deprecated. Remove once all modules depending on this are migrated away.
cc_library_static {
cc_library_static {
    name: "neuralnetworks_utils_hal_aidl_v1",
    name: "neuralnetworks_utils_hal_aidl_v1",
    defaults: ["neuralnetworks_utils_hal_aidl_defaults"],
    defaults: ["neuralnetworks_utils_hal_aidl_defaults"],
@@ -55,20 +63,26 @@ cc_library_static {
    ],
    ],
}
}


cc_library_static {
    name: "neuralnetworks_utils_hal_aidl_v2",
    defaults: ["neuralnetworks_utils_hal_aidl_defaults"],
    shared_libs: [
        "android.hardware.neuralnetworks-V2-ndk",
    ],
}

cc_library_static {
cc_library_static {
    name: "neuralnetworks_utils_hal_aidl",
    name: "neuralnetworks_utils_hal_aidl",
    defaults: ["neuralnetworks_utils_hal_aidl_defaults"],
    defaults: ["neuralnetworks_utils_hal_aidl_defaults"],
    srcs: [
        // Additional AIDL utils for the runtime.
        "src/Assertions.cpp",
        "src/Buffer.cpp",
        "src/Burst.cpp",
        "src/Callbacks.cpp",
        "src/Device.cpp",
        "src/Execution.cpp",
        "src/InvalidDevice.cpp",
        "src/PreparedModel.cpp",
        "src/ProtectCallback.cpp",
        "src/Service.cpp",
    ],
    shared_libs: [
    shared_libs: [
        "android.hardware.neuralnetworks-V3-ndk",
        "android.hardware.neuralnetworks-V4-ndk",
    ],
    ],
    cflags: ["-DNN_AIDL_V4_OR_ABOVE"],
}
}


// A cc_defaults that includes the latest non-experimental AIDL utilities and other AIDL libraries
// A cc_defaults that includes the latest non-experimental AIDL utilities and other AIDL libraries
@@ -79,9 +93,10 @@ cc_defaults {
    static_libs: [
    static_libs: [
        "android.hardware.common-V2-ndk",
        "android.hardware.common-V2-ndk",
        "android.hardware.graphics.common-V2-ndk",
        "android.hardware.graphics.common-V2-ndk",
        "android.hardware.neuralnetworks-V3-ndk",
        "android.hardware.neuralnetworks-V4-ndk",
        "neuralnetworks_utils_hal_aidl",
        "neuralnetworks_utils_hal_aidl",
    ],
    ],
    cflags: ["-DNN_AIDL_V4_OR_ABOVE"],
}
}


cc_test {
cc_test {
+3 −0
Original line number Original line Diff line number Diff line
@@ -36,6 +36,8 @@ class PreparedModelCallback final : public BnPreparedModelCallback, public IProt
  public:
  public:
    using Data = nn::GeneralResult<nn::SharedPreparedModel>;
    using Data = nn::GeneralResult<nn::SharedPreparedModel>;


    PreparedModelCallback(nn::Version featureLevel) : kFeatureLevel(featureLevel) {}

    ndk::ScopedAStatus notify(ErrorStatus status,
    ndk::ScopedAStatus notify(ErrorStatus status,
                              const std::shared_ptr<IPreparedModel>& preparedModel) override;
                              const std::shared_ptr<IPreparedModel>& preparedModel) override;


@@ -44,6 +46,7 @@ class PreparedModelCallback final : public BnPreparedModelCallback, public IProt
    Data get();
    Data get();


  private:
  private:
    const nn::Version kFeatureLevel;
    hal::utils::TransferValue<Data> mData;
    hal::utils::TransferValue<Data> mData;
};
};


+36 −5
Original line number Original line Diff line number Diff line
@@ -17,6 +17,8 @@
#ifndef ANDROID_HARDWARE_INTERFACES_NEURALNETWORKS_AIDL_UTILS_EXECUTION_H
#ifndef ANDROID_HARDWARE_INTERFACES_NEURALNETWORKS_AIDL_UTILS_EXECUTION_H
#define ANDROID_HARDWARE_INTERFACES_NEURALNETWORKS_AIDL_UTILS_EXECUTION_H
#define ANDROID_HARDWARE_INTERFACES_NEURALNETWORKS_AIDL_UTILS_EXECUTION_H


#include <aidl/android/hardware/neuralnetworks/IExecution.h>

#include <nnapi/IExecution.h>
#include <nnapi/IExecution.h>
#include <nnapi/Result.h>
#include <nnapi/Result.h>
#include <nnapi/Types.h>
#include <nnapi/Types.h>
@@ -33,16 +35,21 @@


namespace aidl::android::hardware::neuralnetworks::utils {
namespace aidl::android::hardware::neuralnetworks::utils {


class Execution final : public nn::IExecution, public std::enable_shared_from_this<Execution> {
// A reusable execution implementation with a cached Request, internally it is still passing the
// request to the driver in every computation.
class ExecutionWithCachedRequest final
    : public nn::IExecution,
      public std::enable_shared_from_this<ExecutionWithCachedRequest> {
    struct PrivateConstructorTag {};
    struct PrivateConstructorTag {};


  public:
  public:
    static nn::GeneralResult<std::shared_ptr<const Execution>> create(
    static nn::GeneralResult<std::shared_ptr<const ExecutionWithCachedRequest>> create(
            std::shared_ptr<const PreparedModel> preparedModel, Request request,
            std::shared_ptr<const PreparedModel> preparedModel, Request request,
            hal::utils::RequestRelocation relocation, bool measure, int64_t loopTimeoutDuration);
            hal::utils::RequestRelocation relocation, bool measure, int64_t loopTimeoutDuration);


    Execution(PrivateConstructorTag tag, std::shared_ptr<const PreparedModel> preparedModel,
    ExecutionWithCachedRequest(PrivateConstructorTag tag,
              Request request, hal::utils::RequestRelocation relocation, bool measure,
                               std::shared_ptr<const PreparedModel> preparedModel, Request request,
                               hal::utils::RequestRelocation relocation, bool measure,
                               int64_t loopTimeoutDuration);
                               int64_t loopTimeoutDuration);


    nn::ExecutionResult<std::pair<std::vector<nn::OutputShape>, nn::Timing>> compute(
    nn::ExecutionResult<std::pair<std::vector<nn::OutputShape>, nn::Timing>> compute(
@@ -60,6 +67,30 @@ class Execution final : public nn::IExecution, public std::enable_shared_from_th
    const int64_t kLoopTimeoutDuration;
    const int64_t kLoopTimeoutDuration;
};
};


// A reusable execution implementation that is backed by an actual AIDL IExecution object.
class Execution final : public nn::IExecution, public std::enable_shared_from_this<Execution> {
    struct PrivateConstructorTag {};

  public:
    static nn::GeneralResult<std::shared_ptr<const Execution>> create(
            std::shared_ptr<aidl_hal::IExecution> execution,
            hal::utils::RequestRelocation relocation);

    Execution(PrivateConstructorTag tag, std::shared_ptr<aidl_hal::IExecution> execution,
              hal::utils::RequestRelocation relocation);

    nn::ExecutionResult<std::pair<std::vector<nn::OutputShape>, nn::Timing>> compute(
            const nn::OptionalTimePoint& deadline) const override;

    nn::GeneralResult<std::pair<nn::SyncFence, nn::ExecuteFencedInfoCallback>> computeFenced(
            const std::vector<nn::SyncFence>& waitFor, const nn::OptionalTimePoint& deadline,
            const nn::OptionalDuration& timeoutDurationAfterFence) const override;

  private:
    const std::shared_ptr<aidl_hal::IExecution> kExecution;
    const hal::utils::RequestRelocation kRelocation;
};

}  // namespace aidl::android::hardware::neuralnetworks::utils
}  // namespace aidl::android::hardware::neuralnetworks::utils


#endif  // ANDROID_HARDWARE_INTERFACES_NEURALNETWORKS_AIDL_UTILS_EXECUTION_H
#endif  // ANDROID_HARDWARE_INTERFACES_NEURALNETWORKS_AIDL_UTILS_EXECUTION_H
+5 −0
Original line number Original line Diff line number Diff line
@@ -61,6 +61,11 @@
#include <aidl/android/hardware/neuralnetworks/SymmPerChannelQuantParams.h>
#include <aidl/android/hardware/neuralnetworks/SymmPerChannelQuantParams.h>
#include <aidl/android/hardware/neuralnetworks/Timing.h>
#include <aidl/android/hardware/neuralnetworks/Timing.h>


#ifdef NN_AIDL_V4_OR_ABOVE
#include <aidl/android/hardware/neuralnetworks/BnExecution.h>
#include <aidl/android/hardware/neuralnetworks/IExecution.h>
#endif  // NN_AIDL_V4_OR_ABOVE

namespace android::nn {
namespace android::nn {


namespace aidl_hal = ::aidl::android::hardware::neuralnetworks;
namespace aidl_hal = ::aidl::android::hardware::neuralnetworks;
+4 −2
Original line number Original line Diff line number Diff line
@@ -41,10 +41,11 @@ class PreparedModel final : public nn::IPreparedModel,


  public:
  public:
    static nn::GeneralResult<std::shared_ptr<const PreparedModel>> create(
    static nn::GeneralResult<std::shared_ptr<const PreparedModel>> create(
            std::shared_ptr<aidl_hal::IPreparedModel> preparedModel);
            std::shared_ptr<aidl_hal::IPreparedModel> preparedModel, nn::Version featureLevel);


    PreparedModel(PrivateConstructorTag tag,
    PreparedModel(PrivateConstructorTag tag,
                  std::shared_ptr<aidl_hal::IPreparedModel> preparedModel);
                  std::shared_ptr<aidl_hal::IPreparedModel> preparedModel,
                  nn::Version featureLevel);


    nn::ExecutionResult<std::pair<std::vector<nn::OutputShape>, nn::Timing>> execute(
    nn::ExecutionResult<std::pair<std::vector<nn::OutputShape>, nn::Timing>> execute(
            const nn::Request& request, nn::MeasureTiming measure,
            const nn::Request& request, nn::MeasureTiming measure,
@@ -78,6 +79,7 @@ class PreparedModel final : public nn::IPreparedModel,


  private:
  private:
    const std::shared_ptr<aidl_hal::IPreparedModel> kPreparedModel;
    const std::shared_ptr<aidl_hal::IPreparedModel> kPreparedModel;
    const nn::Version kFeatureLevel;
};
};


}  // namespace aidl::android::hardware::neuralnetworks::utils
}  // namespace aidl::android::hardware::neuralnetworks::utils
Loading