diff --git a/frameworks/native/neural_network_runtime/hdi_prepared_model_v1_0.cpp b/frameworks/native/neural_network_runtime/hdi_prepared_model_v1_0.cpp index f4b87c3c40c8acf2acc76d0eddc4340db232d8e9..15b7548fc1b69e0a6deb90fd28f51facaf457807 100644 --- a/frameworks/native/neural_network_runtime/hdi_prepared_model_v1_0.cpp +++ b/frameworks/native/neural_network_runtime/hdi_prepared_model_v1_0.cpp @@ -286,5 +286,11 @@ OH_NN_ReturnCode HDIPreparedModelV1_0::GetModelID(uint32_t& modelId) const LOGE("hdi preparedModel V1_0 not support get model ID."); return OH_NN_SUCCESS; } + +OH_NN_ReturnCode HDIPreparedModelV1_0::ReleaseBuiltModel() +{ + LOGE("hdi preparedModel V1_0 not support ReleaseBuiltModel."); + return OH_NN_SUCCESS; +} } // namespace NeuralNetworkRuntime } // OHOS \ No newline at end of file diff --git a/frameworks/native/neural_network_runtime/hdi_prepared_model_v1_0.h b/frameworks/native/neural_network_runtime/hdi_prepared_model_v1_0.h index 47da0604cb776718bbf1c37f64a72f521f305ec8..f5ad59ed78a0f2a66a3e0ac2d567d4f8631fcc1a 100644 --- a/frameworks/native/neural_network_runtime/hdi_prepared_model_v1_0.h +++ b/frameworks/native/neural_network_runtime/hdi_prepared_model_v1_0.h @@ -49,6 +49,8 @@ public: OH_NN_ReturnCode GetModelID(uint32_t& modelId) const override; + OH_NN_ReturnCode ReleaseBuiltModel() override; + private: // first: major version, second: minor version std::pair m_hdiVersion; diff --git a/frameworks/native/neural_network_runtime/hdi_prepared_model_v2_0.cpp b/frameworks/native/neural_network_runtime/hdi_prepared_model_v2_0.cpp index deb04ed3de084bb6c60eb8da05594201795042f0..e4c2d6895d7a15ce909a5f33bfdd458f1afb601d 100644 --- a/frameworks/native/neural_network_runtime/hdi_prepared_model_v2_0.cpp +++ b/frameworks/native/neural_network_runtime/hdi_prepared_model_v2_0.cpp @@ -303,5 +303,11 @@ OH_NN_ReturnCode HDIPreparedModelV2_0::GetModelID(uint32_t& modelId) const LOGE("hdi preparedModel V2_0 not support get model ID."); return OH_NN_SUCCESS; } + +OH_NN_ReturnCode HDIPreparedModelV2_0::ReleaseBuiltModel() +{ + LOGE("hdi preparedModel V2_0 not support ReleaseBuiltModel."); + return OH_NN_SUCCESS; +} } // namespace NeuralNetworkRuntime } // OHOS diff --git a/frameworks/native/neural_network_runtime/hdi_prepared_model_v2_0.h b/frameworks/native/neural_network_runtime/hdi_prepared_model_v2_0.h index 8b900a03c93dc6049da8aeb381c71d2a5edec78a..16bd7b55ab544d13969290a88e9a258d30dc5381 100644 --- a/frameworks/native/neural_network_runtime/hdi_prepared_model_v2_0.h +++ b/frameworks/native/neural_network_runtime/hdi_prepared_model_v2_0.h @@ -53,6 +53,8 @@ public: OH_NN_ReturnCode GetInputDimRanges(std::vector>& minInputDims, std::vector>& maxInputDims) override; + OH_NN_ReturnCode ReleaseBuiltModel() override; + private: // first: major version, second: minor version std::pair m_hdiVersion; diff --git a/frameworks/native/neural_network_runtime/hdi_prepared_model_v2_1.cpp b/frameworks/native/neural_network_runtime/hdi_prepared_model_v2_1.cpp index 122bce0be7eb1a84f4bb7d038dc205e2bdafff69..c5682391dd7b6fc5fd7b3bfdfd7b616d616fc7f5 100644 --- a/frameworks/native/neural_network_runtime/hdi_prepared_model_v2_1.cpp +++ b/frameworks/native/neural_network_runtime/hdi_prepared_model_v2_1.cpp @@ -303,5 +303,11 @@ OH_NN_ReturnCode HDIPreparedModelV2_1::GetModelID(uint32_t& modelId) const LOGE("hdi preparedModel V2_1 not support get model ID."); return OH_NN_SUCCESS; } + +OH_NN_ReturnCode HDIPreparedModelV2_1::ReleaseBuiltModel() +{ + LOGE("hdi preparedModel V2_1 not support ReleaseBuiltModel."); + return OH_NN_SUCCESS; +} } // namespace NeuralNetworkRuntime } // OHOS diff --git a/frameworks/native/neural_network_runtime/hdi_prepared_model_v2_1.h b/frameworks/native/neural_network_runtime/hdi_prepared_model_v2_1.h index c8f5705e6c47291884131be50c24efcd977ed40d..d68914ce3e9f71095bd83a10625b22d940c41a52 100644 --- a/frameworks/native/neural_network_runtime/hdi_prepared_model_v2_1.h +++ b/frameworks/native/neural_network_runtime/hdi_prepared_model_v2_1.h @@ -53,6 +53,8 @@ public: OH_NN_ReturnCode GetInputDimRanges(std::vector>& minInputDims, std::vector>& maxInputDims) override; + OH_NN_ReturnCode ReleaseBuiltModel() override; + private: // first: major version, second: minor version std::pair m_hdiVersion; diff --git a/frameworks/native/neural_network_runtime/nncompiler.cpp b/frameworks/native/neural_network_runtime/nncompiler.cpp index 388f8d7e83da5a9d231269517dd9b205487b58bf..6d7edd3be6b92801f5284b63efd6f05fe50eb9bc 100644 --- a/frameworks/native/neural_network_runtime/nncompiler.cpp +++ b/frameworks/native/neural_network_runtime/nncompiler.cpp @@ -575,6 +575,12 @@ OH_NN_ReturnCode NNCompiler::SaveToCacheFile() const } ReleaseBuffer(tensorBuffers); + ret = m_preparedModel->ReleaseBuiltModel(); + if (ret != OH_NN_SUCCESS) { + LOGE("[NNCompiler] ReleaseBuiltModel failed, error happened when release model cache."); + return ret; + } + LOGI("[NNCompiler] Export model cache successfully."); return OH_NN_SUCCESS; } diff --git a/frameworks/native/neural_network_runtime/prepared_model.h b/frameworks/native/neural_network_runtime/prepared_model.h index 1b1e74d879e73cb7c23194fc872e0cb4d8e1a686..490c39743516bb15963627fe21e944f77564a650 100644 --- a/frameworks/native/neural_network_runtime/prepared_model.h +++ b/frameworks/native/neural_network_runtime/prepared_model.h @@ -42,6 +42,8 @@ public: virtual OH_NN_ReturnCode GetModelID(uint32_t& modelId) const = 0; + virtual OH_NN_ReturnCode ReleaseBuiltModel() = 0; + virtual OH_NN_ReturnCode GetInputDimRanges(std::vector>& minInputDims, std::vector>& maxInputDims) { diff --git a/test/unittest/components/nn_compiler/nn_compiler_test.cpp b/test/unittest/components/nn_compiler/nn_compiler_test.cpp index 99447714efa4f99fb2d663cb85c79f93039a99a3..bec6830a3bebe2d23121b37c9ef4f2a377fa4170 100644 --- a/test/unittest/components/nn_compiler/nn_compiler_test.cpp +++ b/test/unittest/components/nn_compiler/nn_compiler_test.cpp @@ -86,6 +86,7 @@ public: MOCK_CONST_METHOD1(GetModelID, OH_NN_ReturnCode(uint32_t&)); MOCK_METHOD2(GetInputDimRanges, OH_NN_ReturnCode(std::vector>&, std::vector>&)); + MOCK_METHOD0(ReleaseBuiltModel, OH_NN_ReturnCode()); }; class MockInnerModel : public InnerModel { diff --git a/test/unittest/components/nn_executor/nn_executor_test.cpp b/test/unittest/components/nn_executor/nn_executor_test.cpp index aae188545795b2f7ca9cb504500bcb3d4cab55e2..a6178eb3a6787c3d826e2c031ba7967767107d30 100644 --- a/test/unittest/components/nn_executor/nn_executor_test.cpp +++ b/test/unittest/components/nn_executor/nn_executor_test.cpp @@ -95,6 +95,7 @@ public: MOCK_CONST_METHOD1(GetModelID, OH_NN_ReturnCode(uint32_t&)); MOCK_METHOD2(GetInputDimRanges, OH_NN_ReturnCode(std::vector>&, std::vector>&)); + MOCK_METHOD0(ReleaseBuiltModel, OH_NN_ReturnCode()); }; class MockTensorDesc : public TensorDesc { diff --git a/test/unittest/components/v1_0/neural_network_runtime_test/neural_network_runtime_test.cpp b/test/unittest/components/v1_0/neural_network_runtime_test/neural_network_runtime_test.cpp index 94b27e22ae932277cb3aeb65e684bef4defe1295..9427e6f6c4126265dc4792690875a2c7144cc2f7 100644 --- a/test/unittest/components/v1_0/neural_network_runtime_test/neural_network_runtime_test.cpp +++ b/test/unittest/components/v1_0/neural_network_runtime_test/neural_network_runtime_test.cpp @@ -260,6 +260,7 @@ public: MOCK_CONST_METHOD1(GetModelID, OH_NN_ReturnCode(uint32_t&)); MOCK_METHOD2(GetInputDimRanges, OH_NN_ReturnCode(std::vector>&, std::vector>&)); + MOCK_METHOD0(ReleaseBuiltModel, OH_NN_ReturnCode()); }; class MockIDevice : public Device { diff --git a/test/unittest/components/v2_0/hdi_device/hdi_device_test.cpp b/test/unittest/components/v2_0/hdi_device/hdi_device_test.cpp index ca73fff6c950a6f3a54dc7a9d99888b33583da60..c9fa6ff112ded85f76e1eb735e4a9291375c948d 100644 --- a/test/unittest/components/v2_0/hdi_device/hdi_device_test.cpp +++ b/test/unittest/components/v2_0/hdi_device/hdi_device_test.cpp @@ -246,6 +246,7 @@ public: MOCK_CONST_METHOD1(GetModelID, OH_NN_ReturnCode(uint32_t&)); MOCK_METHOD2(GetInputDimRanges, OH_NN_ReturnCode(std::vector>&, std::vector>&)); + MOCK_METHOD0(ReleaseBuiltModel, OH_NN_ReturnCode()); }; /* *