1*89c4ff92SAndroid Build Coastguard Worker //
2*89c4ff92SAndroid Build Coastguard Worker // Copyright © 2023 Arm Ltd and Contributors. All rights reserved.
3*89c4ff92SAndroid Build Coastguard Worker // SPDX-License-Identifier: MIT
4*89c4ff92SAndroid Build Coastguard Worker //
5*89c4ff92SAndroid Build Coastguard Worker
6*89c4ff92SAndroid Build Coastguard Worker #include <DelegateTestInterpreter.hpp>
7*89c4ff92SAndroid Build Coastguard Worker
8*89c4ff92SAndroid Build Coastguard Worker #include <armnn_delegate.hpp>
9*89c4ff92SAndroid Build Coastguard Worker
10*89c4ff92SAndroid Build Coastguard Worker #include <armnn/utility/IgnoreUnused.hpp>
11*89c4ff92SAndroid Build Coastguard Worker
12*89c4ff92SAndroid Build Coastguard Worker namespace delegateTestInterpreter
13*89c4ff92SAndroid Build Coastguard Worker {
14*89c4ff92SAndroid Build Coastguard Worker
DelegateTestInterpreter(std::vector<char> & modelBuffer,const std::vector<armnn::BackendId> & backends,const std::string & customOp,bool disableFallback)15*89c4ff92SAndroid Build Coastguard Worker DelegateTestInterpreter::DelegateTestInterpreter(std::vector<char>& modelBuffer,
16*89c4ff92SAndroid Build Coastguard Worker const std::vector<armnn::BackendId>& backends,
17*89c4ff92SAndroid Build Coastguard Worker const std::string& customOp,
18*89c4ff92SAndroid Build Coastguard Worker bool disableFallback)
19*89c4ff92SAndroid Build Coastguard Worker {
20*89c4ff92SAndroid Build Coastguard Worker armnn::IgnoreUnused(backends);
21*89c4ff92SAndroid Build Coastguard Worker armnn::IgnoreUnused(disableFallback);
22*89c4ff92SAndroid Build Coastguard Worker
23*89c4ff92SAndroid Build Coastguard Worker TfLiteModel* tfLiteModel = delegateTestInterpreter::CreateTfLiteModel(modelBuffer);
24*89c4ff92SAndroid Build Coastguard Worker
25*89c4ff92SAndroid Build Coastguard Worker TfLiteInterpreterOptions* options = delegateTestInterpreter::CreateTfLiteInterpreterOptions();
26*89c4ff92SAndroid Build Coastguard Worker if (!customOp.empty())
27*89c4ff92SAndroid Build Coastguard Worker {
28*89c4ff92SAndroid Build Coastguard Worker options->mutable_op_resolver = delegateTestInterpreter::GenerateCustomOpResolver(customOp);
29*89c4ff92SAndroid Build Coastguard Worker }
30*89c4ff92SAndroid Build Coastguard Worker
31*89c4ff92SAndroid Build Coastguard Worker // Use default settings until options have been enabled.
32*89c4ff92SAndroid Build Coastguard Worker auto armnnDelegate = armnnOpaqueDelegate::TfLiteArmnnOpaqueDelegateCreate(nullptr);
33*89c4ff92SAndroid Build Coastguard Worker TfLiteInterpreterOptionsAddDelegate(options, armnnDelegate);
34*89c4ff92SAndroid Build Coastguard Worker
35*89c4ff92SAndroid Build Coastguard Worker m_TfLiteDelegate = armnnDelegate;
36*89c4ff92SAndroid Build Coastguard Worker m_TfLiteInterpreter = TfLiteInterpreterCreate(tfLiteModel, options);
37*89c4ff92SAndroid Build Coastguard Worker
38*89c4ff92SAndroid Build Coastguard Worker // The options and model can be deleted after the interpreter is created.
39*89c4ff92SAndroid Build Coastguard Worker TfLiteInterpreterOptionsDelete(options);
40*89c4ff92SAndroid Build Coastguard Worker TfLiteModelDelete(tfLiteModel);
41*89c4ff92SAndroid Build Coastguard Worker }
42*89c4ff92SAndroid Build Coastguard Worker
DelegateTestInterpreter(std::vector<char> & modelBuffer,const armnnDelegate::DelegateOptions & delegateOptions,const std::string & customOp)43*89c4ff92SAndroid Build Coastguard Worker DelegateTestInterpreter::DelegateTestInterpreter(std::vector<char>& modelBuffer,
44*89c4ff92SAndroid Build Coastguard Worker const armnnDelegate::DelegateOptions& delegateOptions,
45*89c4ff92SAndroid Build Coastguard Worker const std::string& customOp)
46*89c4ff92SAndroid Build Coastguard Worker {
47*89c4ff92SAndroid Build Coastguard Worker armnn::IgnoreUnused(delegateOptions);
48*89c4ff92SAndroid Build Coastguard Worker
49*89c4ff92SAndroid Build Coastguard Worker TfLiteModel* tfLiteModel = delegateTestInterpreter::CreateTfLiteModel(modelBuffer);
50*89c4ff92SAndroid Build Coastguard Worker
51*89c4ff92SAndroid Build Coastguard Worker TfLiteInterpreterOptions* options = delegateTestInterpreter::CreateTfLiteInterpreterOptions();
52*89c4ff92SAndroid Build Coastguard Worker if (!customOp.empty())
53*89c4ff92SAndroid Build Coastguard Worker {
54*89c4ff92SAndroid Build Coastguard Worker options->mutable_op_resolver = delegateTestInterpreter::GenerateCustomOpResolver(customOp);
55*89c4ff92SAndroid Build Coastguard Worker }
56*89c4ff92SAndroid Build Coastguard Worker
57*89c4ff92SAndroid Build Coastguard Worker // Use default settings until options have been enabled.
58*89c4ff92SAndroid Build Coastguard Worker auto armnnDelegate = armnnOpaqueDelegate::TfLiteArmnnOpaqueDelegateCreate(nullptr);
59*89c4ff92SAndroid Build Coastguard Worker TfLiteInterpreterOptionsAddDelegate(options, armnnDelegate);
60*89c4ff92SAndroid Build Coastguard Worker
61*89c4ff92SAndroid Build Coastguard Worker m_TfLiteDelegate = armnnDelegate;
62*89c4ff92SAndroid Build Coastguard Worker m_TfLiteInterpreter = TfLiteInterpreterCreate(tfLiteModel, options);
63*89c4ff92SAndroid Build Coastguard Worker
64*89c4ff92SAndroid Build Coastguard Worker // The options and model can be deleted after the interpreter is created.
65*89c4ff92SAndroid Build Coastguard Worker TfLiteInterpreterOptionsDelete(options);
66*89c4ff92SAndroid Build Coastguard Worker TfLiteModelDelete(tfLiteModel);
67*89c4ff92SAndroid Build Coastguard Worker }
68*89c4ff92SAndroid Build Coastguard Worker
Cleanup()69*89c4ff92SAndroid Build Coastguard Worker void DelegateTestInterpreter::Cleanup()
70*89c4ff92SAndroid Build Coastguard Worker {
71*89c4ff92SAndroid Build Coastguard Worker TfLiteInterpreterDelete(m_TfLiteInterpreter);
72*89c4ff92SAndroid Build Coastguard Worker
73*89c4ff92SAndroid Build Coastguard Worker if (m_TfLiteDelegate)
74*89c4ff92SAndroid Build Coastguard Worker {
75*89c4ff92SAndroid Build Coastguard Worker armnnOpaqueDelegate::TfLiteArmnnOpaqueDelegateDelete(static_cast<TfLiteOpaqueDelegate*>(m_TfLiteDelegate));
76*89c4ff92SAndroid Build Coastguard Worker }
77*89c4ff92SAndroid Build Coastguard Worker }
78*89c4ff92SAndroid Build Coastguard Worker
79*89c4ff92SAndroid Build Coastguard Worker } // anonymous namespace