From 09d1d886157a0dc0e2c161512e40ce90a762bc34 Mon Sep 17 00:00:00 2001 From: Chunel Date: Mon, 3 Aug 2026 23:27:27 +0800 Subject: [PATCH] [feat] support lite mode --- CMakeLists.txt | 5 +++ src/GraphCtrl/GraphElement/GElement.cpp | 32 +++++++++++++++++++ .../GraphElement/GElementManager.cpp | 8 ++--- src/GraphCtrl/GraphElement/GElementManager.h | 2 +- 4 files changed, 42 insertions(+), 5 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index af0419d1..a61bec88 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -31,6 +31,11 @@ option(CGRAPH_BUILD_PERFORMANCE_TESTS "Enable build performance tests" OFF) # 副作用是GParam中的锁无法递归上锁,一般情况下可忽略影响 # add_definitions(-D_CGRAPH_GPARAM_RWLOCK_ENABLE_) +# 如果开启此宏定义,则执行过程中,仅正常执行 element 的 init/run/destroy 方法 +# 无 循环loop、切面aspect、退出cancel、暂停Suspend 等功能 +# 主要用于 简单场景 和 性能测试,一般情况不建议开启 +# add_definitions(-D_CGRAPH_LITE_MODE_ENABLE_) + # add CGraph environment info include(cmake/CGraph-env-include.cmake) diff --git a/src/GraphCtrl/GraphElement/GElement.cpp b/src/GraphCtrl/GraphElement/GElement.cpp index 58a9fa1b..e908412f 100644 --- a/src/GraphCtrl/GraphElement/GElement.cpp +++ b/src/GraphCtrl/GraphElement/GElement.cpp @@ -218,6 +218,37 @@ CStatus GElement::doAspect(const internal::GAspectType& aspectType, const CStatu } +#ifdef _CGRAPH_LITE_MODE_ENABLE_ +CStatus GElement::fatProcessor(const CFunctionType& type) { + CGRAPH_FUNCTION_BEGIN + try { + switch (type) { + case CFunctionType::RUN: { + status = run(); + CGRAPH_FUNCTION_CHECK_STATUS + break; + } + case CFunctionType::INIT: { + concerned_params_.clear(); // 仅需要记录这一轮使用到的 GParam 信息 + status = init(); + CGRAPH_FUNCTION_CHECK_STATUS + break; + } + case CFunctionType::DESTROY: { + status = destroy(); + CGRAPH_FUNCTION_CHECK_STATUS + break; + } + default: + CGRAPH_RETURN_ERROR_STATUS("get function type error") + } + } catch (const CException& ex) { + status = crashed(ex); + } + + CGRAPH_FUNCTION_END +} +#else CStatus GElement::fatProcessor(const CFunctionType& type) { CGRAPH_FUNCTION_BEGIN @@ -284,6 +315,7 @@ CStatus GElement::fatProcessor(const CFunctionType& type) { CGRAPH_FUNCTION_END } +#endif CStatus GElement::prepareRun() { diff --git a/src/GraphCtrl/GraphElement/GElementManager.cpp b/src/GraphCtrl/GraphElement/GElementManager.cpp index 71646849..d930d799 100644 --- a/src/GraphCtrl/GraphElement/GElementManager.cpp +++ b/src/GraphCtrl/GraphElement/GElementManager.cpp @@ -23,14 +23,14 @@ GElementManager::~GElementManager() { CStatus GElementManager::init() { CGRAPH_FUNCTION_BEGIN - for (auto element : manager_elements_) { + for (auto* element : manager_elements_) { CGRAPH_ASSERT_NOT_NULL(element) } status = initEngine(); CGRAPH_FUNCTION_CHECK_STATUS - for (GElementPtr element : manager_elements_) { + for (auto* element : manager_elements_) { status = element->fatProcessor(CFunctionType::INIT); CGRAPH_FUNCTION_CHECK_STATUS element->is_init_ = true; @@ -43,7 +43,7 @@ CStatus GElementManager::init() { CStatus GElementManager::destroy() { CGRAPH_FUNCTION_BEGIN - for (GElementPtr element : manager_elements_) { + for (auto* element : manager_elements_) { status = element->fatProcessor(CFunctionType::DESTROY); CGRAPH_FUNCTION_CHECK_STATUS element->is_init_ = false; @@ -136,7 +136,7 @@ CSize GElementManager::calcMaxParaSize() const { } -CBool GElementManager::checkSerializable() { +CBool GElementManager::checkSerializable() const { if (engine_type_ != GEngineType::DYNAMIC) { return false; // 目前仅支持动态引擎的执行方式 } diff --git a/src/GraphCtrl/GraphElement/GElementManager.h b/src/GraphCtrl/GraphElement/GElementManager.h index 57da8e3d..7d075d24 100644 --- a/src/GraphCtrl/GraphElement/GElementManager.h +++ b/src/GraphCtrl/GraphElement/GElementManager.h @@ -82,7 +82,7 @@ class GElementManager : public GElementObject, * 查看是否可以串行执行 * @return */ - CBool checkSerializable(); + CBool checkSerializable() const; /** * 剪裁多余的连边信息