task_manager: cleanup to NodeCb 86/311286/1
authorInki Dae <inki.dae@samsung.com>
Fri, 17 May 2024 07:54:51 +0000 (16:54 +0900)
committerInki Dae <inki.dae@samsung.com>
Fri, 17 May 2024 07:54:51 +0000 (16:54 +0900)
CLeanup to NodeCb by modifying its arguments - dropping all parameters and
add new one instead, shared_ptr<INode> &node.

user_data isn't required anymore because task manager already knows whether
current node is CallbackNode or Not.

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

index f36fe1125b84956750a76bb398c8f3f9a24cff2a..083dc3240d580f72817961021b5c2ee1ab968f7b 100644 (file)
@@ -38,7 +38,6 @@ private:
        std::shared_ptr<BaseDataType> _output;
        // _results should be updated by user callback.
        std::vector<std::shared_ptr<BaseResultType> > _results;
-       void *_user_data { nullptr };
        bool _completed { false };
        std::condition_variable _event;
        std::mutex _mutex;
@@ -65,10 +64,8 @@ public:
        void wait() override;
        void wakeup() override;
 
-       void setCb(const NodeCb &cb, void *user_data);
+       void setCb(const NodeCb &cb);
        NodeCb getCb();
-       void setUserData(void *user_data);
-       void *getUserData();
        std::vector<std::shared_ptr<BaseResultType> > &getResults();
        void addResult(std::shared_ptr<BaseResultType> result);
 };
index 4b371a5bd85e4900c6b01d041f05ce9c508fecb0..9128bc714fde9cd705a9d06f4340ca9a51d73f3d 100644 (file)
@@ -30,8 +30,6 @@ namespace services
 {
 enum class NodeType { NONE, INFERENCE, CB };
 
-using NodeCb = std::function<void(void *user_data)>;
-
 class INode
 {
 public:
@@ -50,6 +48,8 @@ public:
        virtual void wakeup() = 0;
 };
 
+using NodeCb = std::function<void(std::shared_ptr<INode> &node)>;
+
 }
 }
 
index 58a69fadf5202ba8559094746f6c0a4af9f02e79..fcf9fbc19a67d272d37859c5cfac217036f84323 100644 (file)
@@ -38,10 +38,9 @@ vector<shared_ptr<BaseDataType> > &CallbackNode::getInputs()
        return _inputs;
 }
 
-void CallbackNode::setCb(const NodeCb &cb, void *user_data)
+void CallbackNode::setCb(const NodeCb &cb)
 {
        _cb = cb;
-       _user_data = user_data;
 }
 
 NodeCb CallbackNode::getCb()
@@ -49,16 +48,6 @@ NodeCb CallbackNode::getCb()
        return _cb;
 }
 
-void CallbackNode::setUserData(void *user_data)
-{
-       _user_data = user_data;
-}
-
-void *CallbackNode::getUserData()
-{
-       return _user_data;
-}
-
 void CallbackNode::addDependency(std::shared_ptr<INode> node)
 {
        _dependencies.push_back(node);
index 7400c957683a8c74065d9cb50fdd0be1aace1775..90ac3ecf3bb518848d3995eca71367495b075ff5 100644 (file)
@@ -71,11 +71,9 @@ void TaskManager::threadCb(shared_ptr<INode> &node)
        } else if (node->getType() == NodeType::CB) {
                auto callbackNode = dynamic_pointer_cast<CallbackNode>(node);
                NodeCb cb = callbackNode->getCb();
-               void *user_data = callbackNode->getUserData();
-
-               if (!cb || !user_data) {
-                       SINGLEO_LOGE("Callback function or user data is null.");
-                       throw InvalidOperation("Callback function or user data is null.");
+               if (!cb) {
+                       SINGLEO_LOGE("Callback function is null.");
+                       throw InvalidOperation("Callback function is null.");
                }
 
                for (auto &n : node->getDependencies()) {
@@ -102,7 +100,7 @@ void TaskManager::threadCb(shared_ptr<INode> &node)
                // Call the callback function registered in this callback node.
                // In this callback, new data should be set by calling node->setOutput()
                // if new data is made. TODO. consider for multiple inputs later.
-               cb(user_data);
+               cb(node);
        }
 
        // Wake up.
index 939eabc04957339a12cc396ba7f7fcdd1855e3b7..f0a0af8342f7cfff85d9a55e27c3a0f5e895d9e7 100644 (file)
@@ -34,10 +34,10 @@ using namespace singleo;
 using namespace singleo::inference;
 using namespace singleo::services;
 
-void BridgeNodeCallback(void *user_data)
+void BridgeNodeCallback(shared_ptr<INode> &node)
 {
-       CallbackNode *node = static_cast<CallbackNode *>(user_data);
-       shared_ptr<ImageDataType> imageData = dynamic_pointer_cast<ImageDataType>(node->getInputs()[0]);
+       auto callbackNode = dynamic_pointer_cast<CallbackNode>(node);
+       shared_ptr<ImageDataType> imageData = dynamic_pointer_cast<ImageDataType>(callbackNode->getInputs()[0]);
        size_t buffer_size = imageData->width * imageData->height * imageData->byte_per_pixel;
        ImageDataType newImage;
 
@@ -50,7 +50,7 @@ void BridgeNodeCallback(void *user_data)
 
        cout << "Face detection result" << endl;
 
-       auto &results = node->getResults();
+       auto &results = callbackNode->getResults();
        for (auto r : results) {
                if (r->_type != ResultType::FACE_DETECTION) {
                        cout << "invalid result type" << endl;
@@ -63,7 +63,7 @@ void BridgeNodeCallback(void *user_data)
                        cout << rect.left << " x " << rect.top << " ~ " << rect.right << " x " << rect.bottom << endl;
        }
 
-       node->setOutput(make_shared<ImageDataType>(newImage));
+       callbackNode->setOutput(make_shared<ImageDataType>(newImage));
 }
 
 // GraphA : input ----> face_detection ----> callback ----> face_landmark_detection ----> output
@@ -99,7 +99,7 @@ TEST(SingloTaskManager, MultipleNodesBasedGraphAShouldWork)
 
                auto callback_node = make_shared<CallbackNode>();
                callback_node->setName("callback");
-               callback_node->setCb(BridgeNodeCallback, callback_node.get());
+               callback_node->setCb(BridgeNodeCallback);
                callback_node->addDependency(face_detection_node);
                taskManager->addNode(callback_node);
 
@@ -164,7 +164,7 @@ TEST(SingloTaskManager, MultipleNodesBasedGraphBShouldWork)
 
                auto callback_node = make_shared<CallbackNode>();
                callback_node->setName("callback");
-               callback_node->setCb(BridgeNodeCallback, callback_node.get());
+               callback_node->setCb(BridgeNodeCallback);
                callback_node->addDependency(face_detection_node_a);
                callback_node->addDependency(face_detection_node_b);
                taskManager->addNode(callback_node);
@@ -190,11 +190,10 @@ TEST(SingloTaskManager, MultipleNodesBasedGraphBShouldWork)
        }
 }
 
-void LastNodeCallback(void *user_data)
+void LastNodeCallback(shared_ptr<INode> &node)
 {
-       CallbackNode *node = static_cast<CallbackNode *>(user_data);
-
-       auto &results = node->getResults();
+       auto callbackNode = dynamic_pointer_cast<CallbackNode>(node);
+       auto &results = callbackNode->getResults();
 
        cout << "result count = " << results.size() << endl;
 
@@ -238,7 +237,7 @@ TEST(SingloTaskManager, MultipleNodesBasedGraphDShouldWork)
 
                auto bridge_callback_node = make_shared<CallbackNode>();
                bridge_callback_node->setName("bridge_callback");
-               bridge_callback_node->setCb(BridgeNodeCallback, bridge_callback_node.get());
+               bridge_callback_node->setCb(BridgeNodeCallback);
                bridge_callback_node->addDependency(face_detection_node);
                taskManager->addNode(bridge_callback_node);
 
@@ -250,7 +249,7 @@ TEST(SingloTaskManager, MultipleNodesBasedGraphDShouldWork)
 
                auto lase_callback_node = make_shared<CallbackNode>();
                lase_callback_node->setName("last_callback");
-               lase_callback_node->setCb(LastNodeCallback, lase_callback_node.get());
+               lase_callback_node->setCb(LastNodeCallback);
                lase_callback_node->addDependency(face_detection_node);
                lase_callback_node->addDependency(face_landmark_node);
                taskManager->addNode(lase_callback_node);