xref: /aosp_15_r20/external/armnn/delegate/opaque/src/test/DelegateTestInterpreter.cpp (revision 89c4ff92f2867872bb9e2354d150bf0c8c502810)
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