services: drop non-generic interfaces from INode 62/310862/1
authorInki Dae <inki.dae@samsung.com>
Thu, 9 May 2024 05:18:04 +0000 (14:18 +0900)
committerInki Dae <inki.dae@samsung.com>
Thu, 9 May 2024 05:18:04 +0000 (14:18 +0900)
Drop non-generic interface from INode class by moving
specific interfaces to each concrete classes, InferenceNode
and CallbackNode.

Change-Id: I58848c38584fb893e7914c01b7196fdbb56e2acf
Signed-off-by: Inki Dae <inki.dae@samsung.com>
services/task_manager/include/CallbackNode.h
services/task_manager/include/INode.h
services/task_manager/include/InferenceNode.h
services/task_manager/src/TaskManager.cpp

index 05007892b47d5c78a5b80204ecac04d43812a096..0603dd09365d35eb70aac58560f1e3cb55214e0d 100644 (file)
@@ -59,25 +59,17 @@ public:
                throw exception::InvalidOperation("Not supported.");
        }
        std::vector<std::shared_ptr<BaseDataType> > &getInputs() override;
-       void setInferenceService(std::unique_ptr<inference::IInferenceServiceInterface> &&service) override
-       {
-               throw exception::InvalidOperation("Not supported.");
-       }
-       inference::IInferenceServiceInterface *getInferenceService() override
-       {
-               throw exception::InvalidOperation("Not supported.");
-       }
-       void setCb(const NodeCb &cb, void *user_data) override;
-       NodeCb getCb() override;
-       void setUserData(void *user_data) override;
-       void *getUserData() override;
        void addDependency(std::shared_ptr<INode> node) override;
        std::vector<std::shared_ptr<INode> > &getDependencies() override;
-
        void setOutput(std::shared_ptr<BaseDataType> output) override;
        std::shared_ptr<BaseDataType> &getOutput() override;
        void wait() override;
        void wakeup() override;
+
+       void setCb(const NodeCb &cb, void *user_data);
+       NodeCb getCb();
+       void setUserData(void *user_data);
+       void *getUserData();
 };
 
 }
index 945f144452498489a1280323037e65a302e0a9d5..910d170d03f3c521b7e1b9a96dddb8a7f3704255 100644 (file)
@@ -44,12 +44,6 @@ public:
        virtual std::string &getName() = 0;
        virtual void addInput(std::shared_ptr<BaseDataType> input) = 0;
        virtual std::vector<std::shared_ptr<BaseDataType> > &getInputs() = 0;
-       virtual void setInferenceService(std::unique_ptr<inference::IInferenceServiceInterface> &&service) = 0;
-       virtual inference::IInferenceServiceInterface *getInferenceService() = 0;
-       virtual void setCb(const NodeCb &cb, void *user_data) = 0;
-       virtual NodeCb getCb() = 0;
-       virtual void setUserData(void *user_data) = 0;
-       virtual void *getUserData() = 0;
        virtual void addDependency(std::shared_ptr<INode> node) = 0;
        virtual std::vector<std::shared_ptr<INode> > &getDependencies() = 0;
        virtual void setOutput(std::shared_ptr<BaseDataType> output) = 0;
index b87a86cda8c97af9930328eb6e28718d8bdc30cd..47f3080c77698ebfcbb2b304e464777c6f598e16 100644 (file)
@@ -55,30 +55,15 @@ public:
        }
        void addInput(std::shared_ptr<BaseDataType> input) override;
        std::vector<std::shared_ptr<BaseDataType> > &getInputs() override;
-       void setInferenceService(std::unique_ptr<inference::IInferenceServiceInterface> &&service) override;
-       inference::IInferenceServiceInterface *getInferenceService() override;
-       void setCb(const NodeCb &cb, void *user_data) override
-       {
-               throw exception::InvalidOperation("Not supported.");
-       };
-       NodeCb getCb() override
-       {
-               throw exception::InvalidOperation("Not supported.");
-       };
-       void setUserData(void *user_data) override
-       {
-               throw exception::InvalidOperation("Not supported.");
-       };
-       void *getUserData() override
-       {
-               throw exception::InvalidOperation("Not supported.");
-       };
        void addDependency(std::shared_ptr<INode> node) override;
        std::vector<std::shared_ptr<INode> > &getDependencies() override;
        void setOutput(std::shared_ptr<BaseDataType> output) override;
        std::shared_ptr<BaseDataType> &getOutput() override;
        void wait() override;
        void wakeup() override;
+
+       void setInferenceService(std::unique_ptr<inference::IInferenceServiceInterface> &&service);
+       inference::IInferenceServiceInterface *getInferenceService();
 };
 
 }
index 4e8f7bd6e0fa9912ea905af8367bd92c69bac7b3..54e07fc20e0ef6e042f4abfa606cb144ee8cfd5a 100644 (file)
@@ -18,6 +18,8 @@
 #include "SingleoException.h"
 #include "SingleoLog.h"
 #include "TaskManager.h"
+#include "CallbackNode.h"
+#include "InferenceNode.h"
 
 using namespace std;
 using namespace singleo::exception;
@@ -35,8 +37,10 @@ void TaskManager::threadCb(shared_ptr<INode> &node)
 
        for (auto &n : dependencies) {
                // Add the result if dependency node is inference service not callback.
-               if (n->getType() == NodeType::INFERENCE)
-                       results.push_back(&n->getInferenceService()->result());
+               if (n->getType() == NodeType::INFERENCE) {
+                       auto inferenceNode = dynamic_pointer_cast<InferenceNode>(n);
+                       results.push_back(&inferenceNode->getInferenceService()->result());
+               }
        }
 
        if (node->getType() == NodeType::INFERENCE) {
@@ -46,6 +50,7 @@ void TaskManager::threadCb(shared_ptr<INode> &node)
                }
 
                shared_ptr<ImageDataType> input;
+               auto inferenceNode = dynamic_pointer_cast<InferenceNode>(node);
 
                // If no dependency then use input of current node as input source.
                // Ps. In case of inference node, one of both - input from task manager
@@ -55,23 +60,24 @@ void TaskManager::threadCb(shared_ptr<INode> &node)
                // inference_node_a -----
                //                      |------ Callback_node ------- inference_node_c
                // inference_node_b -----
-               if (node->getDependencies().empty())
+               if (inferenceNode->getDependencies().empty())
                        // TODO. consider for multiple inputs later.
-                       input = dynamic_pointer_cast<ImageDataType>(node->getInputs()[0]);
+                       input = dynamic_pointer_cast<ImageDataType>(inferenceNode->getInputs()[0]);
                else // Else if dependency then use output of dependency node(callback node).
-                       input = dynamic_pointer_cast<ImageDataType>(node->getDependencies()[0]->getOutput());
+                       input = dynamic_pointer_cast<ImageDataType>(inferenceNode->getDependencies()[0]->getOutput());
 
-               node->getInferenceService()->invoke(*input);
+               inferenceNode->getInferenceService()->invoke(*input);
 
                // Inference request has been completed so release input data if the data was internally allocated by callback node.
                if (input->custom)
                        delete input->ptr;
 
                // Service request to 'input' has been completed so clean up it.
-               node->getInputs().clear();
+               inferenceNode->getInputs().clear();
        } else if (node->getType() == NodeType::CB) {
-               NodeCb cb = node->getCb();
-               void *user_data = node->getUserData();
+               auto callbackNode = dynamic_pointer_cast<CallbackNode>(node);
+               NodeCb cb = callbackNode->getCb();
+               void *user_data = callbackNode->getUserData();
 
                // Call the callback function registered in this callback node.
                // In this callback, new data should be set by calling node->setOutput()
@@ -101,8 +107,9 @@ void TaskManager::addNode(std::shared_ptr<INode> node)
 
        // Initialize inference service.
        if (node->getType() == NodeType::INFERENCE) {
-               node->getInferenceService()->configure();
-               node->getInferenceService()->prepare();
+               auto inferenceNode = dynamic_pointer_cast<InferenceNode>(node);
+               inferenceNode->getInferenceService()->configure();
+               inferenceNode->getInferenceService()->prepare();
        }
 }
 
@@ -146,9 +153,17 @@ void TaskManager::run()
 
 BaseResultType &TaskManager::output()
 {
-       auto service = _nodes[_nodes.size() - 1]->getInferenceService();
+       auto lastNode = _nodes[_nodes.size() - 1];
+
+       // TODO. consider for callback node support as last node.
+       if (lastNode->getType() != NodeType::INFERENCE) {
+               SINGLEO_LOGE("Last node is not an inference node.");
+               throw InvalidOperation("Last node is not an inference node.");
+       }
+
+       auto infereneNode = dynamic_pointer_cast<InferenceNode>(lastNode);
 
-       return service->result();
+       return infereneNode->getInferenceService()->result();
 }
 
 void TaskManager::clear()