1 /* 2 * Copyright (C) 2021 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17 #ifndef ANDROID_PACKAGES_MODULES_NEURALNETWORKS_COMMON_DEFAULT_EXECUTION_H 18 #define ANDROID_PACKAGES_MODULES_NEURALNETWORKS_COMMON_DEFAULT_EXECUTION_H 19 20 #include <android-base/macros.h> 21 #include <nnapi/IExecution.h> 22 #include <nnapi/IPreparedModel.h> 23 #include <nnapi/Result.h> 24 #include <nnapi/Types.h> 25 26 #include <memory> 27 #include <utility> 28 #include <vector> 29 30 namespace android::nn { 31 32 class DefaultExecution final : public IExecution { 33 public: DefaultExecution(SharedPreparedModel preparedModel,Request request,MeasureTiming measure,OptionalDuration loopTimeoutDuration)34 DefaultExecution(SharedPreparedModel preparedModel, Request request, MeasureTiming measure, 35 OptionalDuration loopTimeoutDuration) 36 : kPreparedModel(std::move(preparedModel)), 37 kRequest(std::move(request)), 38 kMeasure(measure), 39 kLoopTimeoutDuration(loopTimeoutDuration) { 40 CHECK(kPreparedModel != nullptr); 41 } 42 compute(const OptionalTimePoint & deadline)43 ExecutionResult<std::pair<std::vector<OutputShape>, Timing>> compute( 44 const OptionalTimePoint& deadline) const override { 45 return kPreparedModel->execute(kRequest, kMeasure, deadline, kLoopTimeoutDuration, {}, {}); 46 } 47 computeFenced(const std::vector<SyncFence> & waitFor,const OptionalTimePoint & deadline,const OptionalDuration & timeoutDurationAfterFence)48 GeneralResult<std::pair<SyncFence, ExecuteFencedInfoCallback>> computeFenced( 49 const std::vector<SyncFence>& waitFor, const OptionalTimePoint& deadline, 50 const OptionalDuration& timeoutDurationAfterFence) const override { 51 return kPreparedModel->executeFenced(kRequest, waitFor, kMeasure, deadline, 52 kLoopTimeoutDuration, timeoutDurationAfterFence, {}, 53 {}); 54 } 55 56 private: 57 const SharedPreparedModel kPreparedModel; 58 const Request kRequest; 59 const MeasureTiming kMeasure; 60 const OptionalDuration kLoopTimeoutDuration; 61 }; 62 63 } // namespace android::nn 64 65 #endif // ANDROID_PACKAGES_MODULES_NEURALNETWORKS_COMMON_DEFAULT_EXECUTION_H 66