From bf85ac24a62566990b5a7b52d369f050402ae70b Mon Sep 17 00:00:00 2001 From: Mateusz Bencer Date: Thu, 17 Mar 2022 14:24:20 +0100 Subject: [PATCH] unified approach to handle extensions by frontends --- src/core/tests/frontend/paddle/conversion.cpp | 6 +++++- .../common/include/openvino/frontend/frontend.hpp | 3 +++ .../openvino/frontend}/plugin_loader.hpp | 0 src/frontends/common/src/frontend.cpp | 7 ++++++- src/frontends/common/src/manager.cpp | 2 +- src/frontends/common/src/plugin_loader.cpp | 2 +- src/frontends/common/src/utils.cpp | 2 +- .../ir/include/openvino/frontend/ir/frontend.hpp | 1 - src/frontends/ir/src/frontend.cpp | 12 +++++------- .../include/openvino/frontend/paddle/frontend.hpp | 4 ---- src/frontends/paddle/src/frontend.cpp | 1 - 11 files changed, 22 insertions(+), 18 deletions(-) rename src/frontends/common/{src => include/openvino/frontend}/plugin_loader.hpp (100%) diff --git a/src/core/tests/frontend/paddle/conversion.cpp b/src/core/tests/frontend/paddle/conversion.cpp index 9f422b4fbbb..0d9760efca6 100644 --- a/src/core/tests/frontend/paddle/conversion.cpp +++ b/src/core/tests/frontend/paddle/conversion.cpp @@ -5,6 +5,7 @@ #include "conversion_extension.hpp" #include "openvino/frontend/exception.hpp" #include "openvino/frontend/paddle/frontend.hpp" +#include "openvino/frontend/plugin_loader.hpp" #include "paddle_utils.hpp" #include "so_extension.hpp" @@ -31,7 +32,10 @@ class PaddleFrontendWrapper : public ov::frontend::paddle::FrontEnd { m_transformation_extensions.end()) << "DecoderTransformationExtension is not registered."; } else if (auto so_ext = std::dynamic_pointer_cast(extension)) { - EXPECT_NE(std::find(m_extensions.begin(), m_extensions.end(), so_ext), m_extensions.end()) + const auto frontend_shared_data = std::static_pointer_cast(m_shared_object); + EXPECT_TRUE(frontend_shared_data) << "Incorrect type of shared object was used"; + const auto extensions = frontend_shared_data->extensions(); + EXPECT_NE(std::find(extensions.begin(), extensions.end(), so_ext), extensions.end()) << "SOExtension is not registered."; } } diff --git a/src/frontends/common/include/openvino/frontend/frontend.hpp b/src/frontends/common/include/openvino/frontend/frontend.hpp index d2b781e441d..6900c04dd6f 100644 --- a/src/frontends/common/include/openvino/frontend/frontend.hpp +++ b/src/frontends/common/include/openvino/frontend/frontend.hpp @@ -22,7 +22,10 @@ namespace frontend { class FRONTEND_API FrontEnd { friend class FrontEndManager; +protected: std::shared_ptr m_shared_object = {}; // Library handle + +private: std::shared_ptr m_actual = {}; public: diff --git a/src/frontends/common/src/plugin_loader.hpp b/src/frontends/common/include/openvino/frontend/plugin_loader.hpp similarity index 100% rename from src/frontends/common/src/plugin_loader.hpp rename to src/frontends/common/include/openvino/frontend/plugin_loader.hpp diff --git a/src/frontends/common/src/frontend.cpp b/src/frontends/common/src/frontend.cpp index cbc650ed1f4..25f5f46c76f 100644 --- a/src/frontends/common/src/frontend.cpp +++ b/src/frontends/common/src/frontend.cpp @@ -9,7 +9,7 @@ #include "openvino/frontend/extension/op.hpp" #include "openvino/frontend/manager.hpp" #include "openvino/frontend/place.hpp" -#include "plugin_loader.hpp" +#include "openvino/frontend/plugin_loader.hpp" #include "so_extension.hpp" #include "utils.hpp" @@ -75,6 +75,11 @@ void FrontEnd::normalize(const std::shared_ptr& model) const { void FrontEnd::add_extension(const std::shared_ptr& extension) { if (m_actual) { + if (auto so_ext = std::dynamic_pointer_cast(extension)) { + if (std::dynamic_pointer_cast(so_ext->extension())) { + add_extension_to_shared_data(m_shared_object, so_ext->extension()); + } + } add_extension_to_shared_data(m_shared_object, extension); m_actual->add_extension(extension); return; diff --git a/src/frontends/common/src/manager.cpp b/src/frontends/common/src/manager.cpp index 7630500434e..3c0c77b2438 100644 --- a/src/frontends/common/src/manager.cpp +++ b/src/frontends/common/src/manager.cpp @@ -9,8 +9,8 @@ #include "ngraph/except.hpp" #include "openvino/frontend/exception.hpp" +#include "openvino/frontend/plugin_loader.hpp" #include "openvino/util/env_util.hpp" -#include "plugin_loader.hpp" #include "utils.hpp" using namespace ov; diff --git a/src/frontends/common/src/plugin_loader.cpp b/src/frontends/common/src/plugin_loader.cpp index 0d508de6a5b..c81f3e007e6 100644 --- a/src/frontends/common/src/plugin_loader.cpp +++ b/src/frontends/common/src/plugin_loader.cpp @@ -20,9 +20,9 @@ #include #include +#include "openvino/frontend/plugin_loader.hpp" #include "openvino/util/file_util.hpp" #include "openvino/util/shared_object.hpp" -#include "plugin_loader.hpp" using namespace ov; using namespace ov::frontend; diff --git a/src/frontends/common/src/utils.cpp b/src/frontends/common/src/utils.cpp index 4dc254d011c..edce142b9d5 100644 --- a/src/frontends/common/src/utils.cpp +++ b/src/frontends/common/src/utils.cpp @@ -5,8 +5,8 @@ #include "utils.hpp" #include "openvino/frontend/exception.hpp" +#include "openvino/frontend/plugin_loader.hpp" #include "openvino/util/file_util.hpp" -#include "plugin_loader.hpp" #ifndef _WIN32 # include diff --git a/src/frontends/ir/include/openvino/frontend/ir/frontend.hpp b/src/frontends/ir/include/openvino/frontend/ir/frontend.hpp index bff325879d9..8f6b5025e15 100644 --- a/src/frontends/ir/include/openvino/frontend/ir/frontend.hpp +++ b/src/frontends/ir/include/openvino/frontend/ir/frontend.hpp @@ -45,7 +45,6 @@ protected: InputModel::Ptr load_impl(const std::vector& params) const override; private: - std::vector extensions; std::shared_ptr m_telemetry; }; diff --git a/src/frontends/ir/src/frontend.cpp b/src/frontends/ir/src/frontend.cpp index b552eac08ad..a6af5585204 100644 --- a/src/frontends/ir/src/frontend.cpp +++ b/src/frontends/ir/src/frontend.cpp @@ -11,6 +11,7 @@ #include "ngraph/runtime/aligned_buffer.hpp" #include "ngraph/runtime/shared_buffer.hpp" #include "openvino/core/any.hpp" +#include "openvino/frontend/plugin_loader.hpp" #include "openvino/util/file_util.hpp" #include "so_extension.hpp" #include "xml_parse_utils.h" @@ -102,12 +103,7 @@ bool FrontEnd::supported_impl(const std::vector& variants) const { void FrontEnd::add_extension(const ov::Extension::Ptr& ext) { if (auto telemetry = std::dynamic_pointer_cast(ext)) { m_telemetry = telemetry; - } else if (auto so_ext = std::dynamic_pointer_cast(ext)) { - if (std::dynamic_pointer_cast(so_ext->extension())) { - extensions.emplace_back(so_ext->extension()); - } - } else if (std::dynamic_pointer_cast(ext)) - extensions.emplace_back(ext); + } } InputModel::Ptr FrontEnd::load_impl(const std::vector& variants) const { @@ -117,7 +113,9 @@ InputModel::Ptr FrontEnd::load_impl(const std::vector& variants) const auto create_extensions_map = [&]() -> std::unordered_map { std::unordered_map exts; - for (const auto& ext : extensions) { + const auto frontend_shared_data = std::static_pointer_cast(m_shared_object); + OPENVINO_ASSERT(frontend_shared_data, "Shared object has invalid type"); + for (auto& ext : frontend_shared_data->extensions()) { if (auto base_ext = std::dynamic_pointer_cast(ext)) exts.insert({base_ext->get_type_info(), base_ext}); } diff --git a/src/frontends/paddle/include/openvino/frontend/paddle/frontend.hpp b/src/frontends/paddle/include/openvino/frontend/paddle/frontend.hpp index b0d73094229..8b083fb8c3a 100644 --- a/src/frontends/paddle/include/openvino/frontend/paddle/frontend.hpp +++ b/src/frontends/paddle/include/openvino/frontend/paddle/frontend.hpp @@ -77,10 +77,6 @@ protected: std::function(const std::map>&, const std::shared_ptr&)> func); - // m_extensions should be the first member here, - // m_extensions can contain SO Extension (holder for other Extensions), - // so it should be released last. - std::vector m_extensions; TelemetryExtension::Ptr m_telemetry; std::vector m_transformation_extensions; std::vector m_conversion_extensions; diff --git a/src/frontends/paddle/src/frontend.cpp b/src/frontends/paddle/src/frontend.cpp index 5d1faa304c7..21d50ab3f54 100644 --- a/src/frontends/paddle/src/frontend.cpp +++ b/src/frontends/paddle/src/frontend.cpp @@ -365,7 +365,6 @@ void FrontEnd::add_extension(const std::shared_ptr& extension) { m_transformation_extensions.push_back(transformation); } else if (const auto& so_ext = std::dynamic_pointer_cast(extension)) { add_extension(so_ext->extension()); - m_extensions.push_back(so_ext); } else if (auto common_conv_ext = std::dynamic_pointer_cast(extension)) { m_conversion_extensions.push_back(common_conv_ext); m_op_translators[common_conv_ext->get_op_type()] = [=](const NodeContext& context) {