1 // Copyright (C) 2018 Intel Corporation
3 // SPDX-License-Identifier: Apache-2.0
6 #include "hetero_async_infer_request.h"
8 #include <ie_util_internal.hpp>
9 #include <ie_profiling.hpp>
11 using namespace HeteroPlugin;
12 using namespace InferenceEngine;
14 HeteroAsyncInferRequest::HeteroAsyncInferRequest(HeteroInferRequest::Ptr request,
15 const ITaskExecutor::Ptr &taskExecutor,
16 const TaskSynchronizer::Ptr &taskSynchronizer,
17 const ITaskExecutor::Ptr &callbackExecutor)
18 : AsyncInferRequestThreadSafeDefault(request, taskExecutor, taskSynchronizer, callbackExecutor),
19 _heteroInferRequest(request) {
20 _heteroInferRequest->setCallbackSequence();
22 std::function<void(InferRequest, StatusCode)> f =
23 [&](InferRequest /*request*/, StatusCode /*sts*/) {
24 setIsRequestBusy(false);
27 _heteroInferRequest->setCallbackForLastRequest(f);
30 void HeteroAsyncInferRequest::StartAsync() {
31 IE_PROFILING_AUTO_SCOPE(Hetero_Async)
32 if (isRequestBusy()) THROW_IE_EXCEPTION << REQUEST_BUSY_str;
33 setIsRequestBusy(true);
34 _heteroInferRequest->updateInOutIfNeeded();
35 _heteroInferRequest->startFirstAsyncRequest();
38 InferenceEngine::StatusCode HeteroAsyncInferRequest::Wait(int64_t millis_timeout) {
39 auto sts = _heteroInferRequest->waitAllRequests(millis_timeout);
40 if (sts != StatusCode::RESULT_NOT_READY && sts != StatusCode::REQUEST_BUSY) {
41 setIsRequestBusy(false);
46 void HeteroAsyncInferRequest::SetCompletionCallback(IInferRequest::CompletionCallback callback) {
47 AsyncInferRequestThreadSafeDefault::SetCompletionCallback(callback);
49 std::function<void(InferRequest, StatusCode)> f =
50 [&](InferRequest /*request*/, StatusCode sts) {
51 setIsRequestBusy(false);
52 _callbackManager.set_requestStatus(sts);
53 _callbackManager.runCallback();
56 _heteroInferRequest->setCallbackForLastRequest(f);