From 0cff11fbdf1917ab21fa1aca659b37a122164202 Mon Sep 17 00:00:00 2001 From: wyc <1104749580@qq.com> Date: Wed, 2 Sep 2026 11:51:06 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9B=B4=E6=96=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../module/frame_policy/{src => }/rely_facade.h | 11 +++++------ .../module/frame_policy/src/Frame_Policy.cpp | 6 +++--- .../frame_policy/src/Throttled_Latest_Only.hpp | 2 +- kernel/kernel/module/main.cmake | 2 +- kernel/kernel/module/renderable/rely_facade.h | 7 +++++++ .../kernel/module/renderable/src/rely_facade.h | 12 ------------ .../kernel/module/renderable/src/renderable.cpp | 4 ++-- .../kernel/module/renderable/src/renderable.hpp | 2 +- .../module/renderable/test/Renderable_Tests.cpp | 2 +- kernel/kernel/module/scene/rely_facade.h | 10 ++++++++++ kernel/kernel/module/scene/src/Scene.cpp | 4 ++-- kernel/kernel/module/scene/src/Scene.hpp | 4 ++-- kernel/kernel/module/scene/src/rely_facade.h | 12 ------------ kernel/kernel/module/task_flow/export/export.h | 7 +++++++ kernel/kernel/module/task_flow/rely_facade.h | 1 + .../module/task_flow/src/Task_Graph_Model.hpp | 1 - kernel/kernel/module/task_flow/src/rely_facade.h | 2 -- .../module/task_flow/src/task_flow_facade.cpp | 1 + .../test/Taskflow_Observation_Tests.cpp | 3 ++- kernel/kernel/module/time_thread/export/export.h | 7 +++++++ kernel/kernel/module/time_thread/rely_facade.h | 1 + .../module/time_thread/src/Timer_Service.cpp | 3 ++- .../module/time_thread/src/Timer_Service.hpp | 16 +--------------- .../time_thread/src/Timer_Service_Model.hpp | 1 - .../kernel/module/time_thread/src/rely_facade.h | 2 -- .../time_thread/test/Timer_Service_Tests.cpp | 2 ++ 26 files changed, 59 insertions(+), 66 deletions(-) rename kernel/kernel/module/frame_policy/{src => }/rely_facade.h (62%) create mode 100644 kernel/kernel/module/renderable/rely_facade.h delete mode 100644 kernel/kernel/module/renderable/src/rely_facade.h create mode 100644 kernel/kernel/module/scene/rely_facade.h delete mode 100644 kernel/kernel/module/scene/src/rely_facade.h create mode 100644 kernel/kernel/module/task_flow/rely_facade.h delete mode 100644 kernel/kernel/module/task_flow/src/rely_facade.h create mode 100644 kernel/kernel/module/time_thread/rely_facade.h delete mode 100644 kernel/kernel/module/time_thread/src/rely_facade.h diff --git a/kernel/kernel/module/frame_policy/src/rely_facade.h b/kernel/kernel/module/frame_policy/rely_facade.h similarity index 62% rename from kernel/kernel/module/frame_policy/src/rely_facade.h rename to kernel/kernel/module/frame_policy/rely_facade.h index 015258b..2083f11 100644 --- a/kernel/kernel/module/frame_policy/src/rely_facade.h +++ b/kernel/kernel/module/frame_policy/rely_facade.h @@ -1,20 +1,19 @@ #pragma once -#include "../export/export.h" +#include "export/export.h" #include "global.hpp" -#include -#include +#include "time_thread/export/export.h" #include #include #include namespace aethera::frame_policy { -using Timer_Id = std::uint64_t; -using Timer_Callback = std::function; +using Timer_Id = aethera::Timer_Id; +using Timer_Callback = aethera::Timer_Callback; struct Frame : facade_builder::build {}; using Frame_Completion = std::function&)>; using Render_Completion = std::function&, std::exception_ptr)>; struct Scene : facade_builder::add_convention<_create_frame, proxy()>::add_convention<_render, Render_Scene_Result(proxy&, Render_Completion)>::support_relocation::build {}; struct Sink : facade_builder::add_convention<_send, void(proxy&, Frame_Completion)>::support_relocation::build {}; -struct Timer_Service : facade_builder::add_convention<_schedule_every, Timer_Id(std::chrono::nanoseconds, Timer_Callback)>::add_convention<_cancel, void(Timer_Id, Timer_Callback)>::add_convention<_reschedule, void(Timer_Id, std::chrono::nanoseconds)>::support_relocation::build {}; +using Timer_Service = time_thread::Timer_Service_Frame_Facade; proxy make_timer_service(); } // namespace aethera::frame_policy diff --git a/kernel/kernel/module/frame_policy/src/Frame_Policy.cpp b/kernel/kernel/module/frame_policy/src/Frame_Policy.cpp index e63b080..23e625a 100644 --- a/kernel/kernel/module/frame_policy/src/Frame_Policy.cpp +++ b/kernel/kernel/module/frame_policy/src/Frame_Policy.cpp @@ -1,13 +1,13 @@ #include "Frame_Policy.hpp" -#include "rely_facade.h" -#include "time_thread/src/Timer_Service_Model.hpp" +#include "../rely_facade.h" +#include "time_thread/export/export.h" #include #include #include namespace aethera { -proxy frame_policy::make_timer_service() { return time_thread::make_timer_service_proxy(make_steady_timer_time_source()); } +proxy frame_policy::make_timer_service() { return time_thread::make_timer_service(); } namespace { auto capacity_fps(const Sliding_Statistics& statistics) noexcept -> std::optional { const double average = statistics.summary().average; diff --git a/kernel/kernel/module/frame_policy/src/Throttled_Latest_Only.hpp b/kernel/kernel/module/frame_policy/src/Throttled_Latest_Only.hpp index 1de6233..dc187f5 100644 --- a/kernel/kernel/module/frame_policy/src/Throttled_Latest_Only.hpp +++ b/kernel/kernel/module/frame_policy/src/Throttled_Latest_Only.hpp @@ -1,6 +1,6 @@ #pragma once #include "Frame_Policy.hpp" -#include "rely_facade.h" +#include "../rely_facade.h" #include #include #include diff --git a/kernel/kernel/module/main.cmake b/kernel/kernel/module/main.cmake index 157eafa..64db0aa 100644 --- a/kernel/kernel/module/main.cmake +++ b/kernel/kernel/module/main.cmake @@ -1,6 +1,6 @@ function(aethera_kernel_add_module target module_name) set(module_dir "${Aethera_Kernel_module_dir}/${module_name}") - append_glob_source(module_sources "${module_dir}/src" "${module_dir}/export") + append_glob_source(module_sources "${module_dir}/src" "${module_dir}/export" "${module_dir}/rely_facade.h") add_library(${target} STATIC ${module_sources}) target_include_directories(${target} PUBLIC "$") target_link_libraries(${target} PUBLIC Aethera_Kernel_Core ${ARGN}) diff --git a/kernel/kernel/module/renderable/rely_facade.h b/kernel/kernel/module/renderable/rely_facade.h new file mode 100644 index 0000000..88b0948 --- /dev/null +++ b/kernel/kernel/module/renderable/rely_facade.h @@ -0,0 +1,7 @@ +#pragma once +#include "task_flow/export/export.h" + +namespace aethera::renderable { +using Task_Graph = task_flow::Task_Graph_Build_Facade; +proxy make_task_graph(std::string name); +} // namespace aethera::renderable diff --git a/kernel/kernel/module/renderable/src/rely_facade.h b/kernel/kernel/module/renderable/src/rely_facade.h deleted file mode 100644 index 0fc8700..0000000 --- a/kernel/kernel/module/renderable/src/rely_facade.h +++ /dev/null @@ -1,12 +0,0 @@ -#pragma once -#include "global.hpp" -#include "task_flow/export/export.h" -#include -#include -#include -#include - -namespace aethera::renderable { -struct Task_Graph : facade_builder::add_convention<_add, std::expected, aethera::Add_Task_Graph_Result>(std::string, std::function)>::add_convention<_component, proxy()>::add_convention<_clear, void()>::add_convention<_empty, bool() const noexcept>::support_relocation::build {}; -proxy make_task_graph(std::string name); -} // namespace aethera::renderable diff --git a/kernel/kernel/module/renderable/src/renderable.cpp b/kernel/kernel/module/renderable/src/renderable.cpp index 07de4a7..204e295 100644 --- a/kernel/kernel/module/renderable/src/renderable.cpp +++ b/kernel/kernel/module/renderable/src/renderable.cpp @@ -1,7 +1,7 @@ #include "renderable.hpp" -#include "task_flow/src/Task_Graph_Model.hpp" +#include "task_flow/export/export.h" #include namespace aethera { -proxy renderable::make_task_graph(std::string name) { return task_flow::make_task_graph(std::move(name)); } +proxy renderable::make_task_graph(std::string name) { return task_flow::make_task_graph(std::move(name)); } } // namespace aethera diff --git a/kernel/kernel/module/renderable/src/renderable.hpp b/kernel/kernel/module/renderable/src/renderable.hpp index 2a0cfab..5c42b3d 100644 --- a/kernel/kernel/module/renderable/src/renderable.hpp +++ b/kernel/kernel/module/renderable/src/renderable.hpp @@ -1,6 +1,6 @@ #pragma once #include "model/Model.hpp" -#include "rely_facade.h" +#include "../rely_facade.h" namespace aethera { template struct Renderable : Model_Layer { using Renderable_Type = Self; diff --git a/kernel/kernel/module/renderable/test/Renderable_Tests.cpp b/kernel/kernel/module/renderable/test/Renderable_Tests.cpp index d97932d..a390a67 100644 --- a/kernel/kernel/module/renderable/test/Renderable_Tests.cpp +++ b/kernel/kernel/module/renderable/test/Renderable_Tests.cpp @@ -1,5 +1,5 @@ #include "renderable/src/renderable.hpp" -#include "scene/src/rely_facade.h" +#include "scene/rely_facade.h" #include namespace { diff --git a/kernel/kernel/module/scene/rely_facade.h b/kernel/kernel/module/scene/rely_facade.h new file mode 100644 index 0000000..3123aa6 --- /dev/null +++ b/kernel/kernel/module/scene/rely_facade.h @@ -0,0 +1,10 @@ +#pragma once +#include "global.hpp" +#include "task_flow/export/export.h" +#include + +namespace aethera::scene { +using Task_Graph = task_flow::Task_Graph_Compose_Facade; +proxy make_task_graph(std::string name); +struct Renderable : facade_builder::add_convention<_advance, void()>::add_convention<_taskflow, proxy()>::support_relocation::build {}; +} // namespace aethera::scene diff --git a/kernel/kernel/module/scene/src/Scene.cpp b/kernel/kernel/module/scene/src/Scene.cpp index 802e15a..f95d0fc 100644 --- a/kernel/kernel/module/scene/src/Scene.cpp +++ b/kernel/kernel/module/scene/src/Scene.cpp @@ -1,5 +1,5 @@ #include "Scene.hpp" -#include "task_flow/src/Task_Graph_Model.hpp" +#include "task_flow/export/export.h" #include #include #include @@ -7,7 +7,7 @@ namespace aethera { namespace detail { struct Scene_Frame {}; } -proxy scene::make_task_graph(std::string name) { return task_flow::make_task_graph(std::move(name)); } +proxy scene::make_task_graph(std::string name) { return task_flow::make_task_graph(std::move(name)); } Scene::Private::Private() = default; proxy Scene::Private::create_frame() { return pro::make_proxy(); diff --git a/kernel/kernel/module/scene/src/Scene.hpp b/kernel/kernel/module/scene/src/Scene.hpp index de7d03d..9e91ea3 100644 --- a/kernel/kernel/module/scene/src/Scene.hpp +++ b/kernel/kernel/module/scene/src/Scene.hpp @@ -1,11 +1,11 @@ #pragma once #include "../export/export.h" -#include "frame_policy/src/rely_facade.h" +#include "frame_policy/rely_facade.h" #include "model/Model.hpp" #include "relation/Dag.hpp" #include #include -#include "rely_facade.h" +#include "../rely_facade.h" namespace aethera { struct Scene_Renderable_Dag {}; /* Scene 通过 Tag + Owned_Dag 在类型系统中表达其对 Renderable DAG 的唯一所有权。 */ diff --git a/kernel/kernel/module/scene/src/rely_facade.h b/kernel/kernel/module/scene/src/rely_facade.h deleted file mode 100644 index 8d426b2..0000000 --- a/kernel/kernel/module/scene/src/rely_facade.h +++ /dev/null @@ -1,12 +0,0 @@ -#pragma once -#include "global.hpp" -#include "task_flow/export/export.h" -#include -#include -#include - -namespace aethera::scene { -struct Task_Graph : facade_builder::add_convention<_component, proxy()>::add_convention<_compose, std::expected, aethera::Compose_Task_Graph_Result>(std::string, proxy&)>::add_convention<_precede, aethera::Precede_Task_Graph_Result(proxy&, proxy&)>::add_convention<_empty, bool() const noexcept>::add_convention<_run, aethera::Run_Taskflow_Result(aethera::Taskflow_Completion)>::support_relocation::build {}; -proxy make_task_graph(std::string name); -struct Renderable : facade_builder::add_convention<_advance, void()>::add_convention<_taskflow, proxy()>::support_relocation::build {}; -} // namespace aethera::scene diff --git a/kernel/kernel/module/task_flow/export/export.h b/kernel/kernel/module/task_flow/export/export.h index 778dc11..8ddda4b 100644 --- a/kernel/kernel/module/task_flow/export/export.h +++ b/kernel/kernel/module/task_flow/export/export.h @@ -2,8 +2,10 @@ #include "global.hpp" #include #include +#include #include #include +#include namespace aethera { enum struct Add_Task_Graph_Result : std::uint8_t { work_missing }; @@ -21,5 +23,10 @@ using Taskflow_Exception_Boundary = std::function; namespace task_flow { struct Task_Node : facade_builder::add_skill::build {}; struct Task_Graph_Component : facade_builder::add_skill::build {}; +struct Task_Graph_Common_Facade : facade_builder::add_convention<_component, proxy()>::add_convention<_empty, bool() const noexcept>::support_relocation::build {}; +struct Task_Graph_Build_Facade : facade_builder::add_facade_with_substitution::add_convention<_add, std::expected, Add_Task_Graph_Result>(std::string, std::function)>::add_convention<_clear, void()>::build {}; +struct Task_Graph_Compose_Facade : facade_builder::add_facade_with_substitution::add_convention<_compose, std::expected, Compose_Task_Graph_Result>(std::string, proxy&)>::add_convention<_precede, Precede_Task_Graph_Result(proxy&, proxy&)>::add_convention<_run, Run_Taskflow_Result(Taskflow_Completion)>::build {}; +struct Task_Graph_Facade : facade_builder::add_facade_with_substitution::add_facade_with_substitution::build {}; +proxy make_task_graph(std::string name); } // namespace task_flow } // namespace aethera diff --git a/kernel/kernel/module/task_flow/rely_facade.h b/kernel/kernel/module/task_flow/rely_facade.h new file mode 100644 index 0000000..6f70f09 --- /dev/null +++ b/kernel/kernel/module/task_flow/rely_facade.h @@ -0,0 +1 @@ +#pragma once diff --git a/kernel/kernel/module/task_flow/src/Task_Graph_Model.hpp b/kernel/kernel/module/task_flow/src/Task_Graph_Model.hpp index 49d0b9c..888a2ba 100644 --- a/kernel/kernel/module/task_flow/src/Task_Graph_Model.hpp +++ b/kernel/kernel/module/task_flow/src/Task_Graph_Model.hpp @@ -26,5 +26,4 @@ private: std::shared_ptr graph; /* 所有消费 facade 共享的唯一权威任务图。 */ }; -template proxy make_task_graph(std::string name) { return make_model_proxy(std::make_shared(std::move(name))); } } // namespace aethera::task_flow diff --git a/kernel/kernel/module/task_flow/src/rely_facade.h b/kernel/kernel/module/task_flow/src/rely_facade.h deleted file mode 100644 index 3f89b95..0000000 --- a/kernel/kernel/module/task_flow/src/rely_facade.h +++ /dev/null @@ -1,2 +0,0 @@ -#pragma once -namespace aethera::task_flow {} diff --git a/kernel/kernel/module/task_flow/src/task_flow_facade.cpp b/kernel/kernel/module/task_flow/src/task_flow_facade.cpp index fa8a60f..7e8b027 100644 --- a/kernel/kernel/module/task_flow/src/task_flow_facade.cpp +++ b/kernel/kernel/module/task_flow/src/task_flow_facade.cpp @@ -34,4 +34,5 @@ Precede_Task_Graph_Result Task_Graph_Model::Private::precede(proxy& b void Task_Graph_Model::Private::clear() { graph->clear(); } bool Task_Graph_Model::Private::empty() const noexcept { return graph->empty(); } Run_Taskflow_Result Task_Graph_Model::Private::run(Taskflow_Completion completion) { return run_taskflow(*graph, std::move(completion)); } +proxy make_task_graph(std::string name) { return make_model_proxy(std::make_shared(std::move(name))); } } // namespace aethera::task_flow diff --git a/kernel/kernel/module/task_flow/test/Taskflow_Observation_Tests.cpp b/kernel/kernel/module/task_flow/test/Taskflow_Observation_Tests.cpp index a1d9a44..370fd2a 100644 --- a/kernel/kernel/module/task_flow/test/Taskflow_Observation_Tests.cpp +++ b/kernel/kernel/module/task_flow/test/Taskflow_Observation_Tests.cpp @@ -1,6 +1,5 @@ #include "task_flow/src/Task_Runtime.hpp" #include "../src/detail/Taskflow_Execution.ipp" - #include #include @@ -15,6 +14,8 @@ #include namespace { +static_assert(std::is_convertible_v&&, aethera::proxy>); +static_assert(std::is_convertible_v&&, aethera::proxy>); using Run_Without_Observation = aethera::Run_Taskflow_Result(*)( aethera::Task_Graph&, diff --git a/kernel/kernel/module/time_thread/export/export.h b/kernel/kernel/module/time_thread/export/export.h index cfe4f71..3a9f6f3 100644 --- a/kernel/kernel/module/time_thread/export/export.h +++ b/kernel/kernel/module/time_thread/export/export.h @@ -1,11 +1,18 @@ #pragma once +#include "global.hpp" #include #include #include +#include namespace aethera { using Timer_Id = std::uint64_t; using Timer_Callback = std::function; using Timer_Time_Point = std::chrono::steady_clock::time_point; enum struct Make_Timer_Service_Result : std::uint8_t { time_source_unavailable }; +namespace time_thread { +struct Timer_Service_Frame_Facade : facade_builder::add_convention<_schedule_every, Timer_Id(std::chrono::nanoseconds, Timer_Callback)>::add_convention<_cancel, void(Timer_Id, Timer_Callback)>::add_convention<_reschedule, void(Timer_Id, std::chrono::nanoseconds)>::support_relocation::build {}; +struct Timer_Service_Facade : facade_builder::add_facade_with_substitution::add_convention<_schedule_after, Timer_Id(std::chrono::nanoseconds, Timer_Callback)>::build {}; +proxy make_timer_service(); +} // namespace time_thread } // namespace aethera diff --git a/kernel/kernel/module/time_thread/rely_facade.h b/kernel/kernel/module/time_thread/rely_facade.h new file mode 100644 index 0000000..6f70f09 --- /dev/null +++ b/kernel/kernel/module/time_thread/rely_facade.h @@ -0,0 +1 @@ +#pragma once diff --git a/kernel/kernel/module/time_thread/src/Timer_Service.cpp b/kernel/kernel/module/time_thread/src/Timer_Service.cpp index cbce0e6..890bb37 100644 --- a/kernel/kernel/module/time_thread/src/Timer_Service.cpp +++ b/kernel/kernel/module/time_thread/src/Timer_Service.cpp @@ -200,6 +200,7 @@ void time_thread::Timer_Service_Model::Private::cancel(Timer_Id id, Timer_Callba std::shared_ptr time_thread::make_timer_service_state(proxy time_source) { return std::make_shared(std::move(time_source)); } proxy make_steady_timer_time_source() { return make_model_proxy(); } +proxy time_thread::make_timer_service() { return make_model_proxy_shared(make_timer_service_state(make_steady_timer_time_source())); } std::expected, Make_Timer_Service_Result> make_timer_service(proxy time_source) { @@ -207,6 +208,6 @@ make_timer_service(proxy time_source) { return std::unexpected( Make_Timer_Service_Result::time_source_unavailable); } - return time_thread::make_timer_service_proxy(std::move(time_source)); + return make_model_proxy_shared(time_thread::make_timer_service_state(std::move(time_source))); } } diff --git a/kernel/kernel/module/time_thread/src/Timer_Service.hpp b/kernel/kernel/module/time_thread/src/Timer_Service.hpp index e8ee61c..9127f73 100644 --- a/kernel/kernel/module/time_thread/src/Timer_Service.hpp +++ b/kernel/kernel/module/time_thread/src/Timer_Service.hpp @@ -10,21 +10,7 @@ #include namespace aethera { -struct Timer_Service : facade_builder - ::add_convention< - _schedule_every, - Timer_Id(std::chrono::nanoseconds, Timer_Callback)> - ::add_convention< - _cancel, - void(Timer_Id, Timer_Callback)> - ::add_convention< - _schedule_after, - Timer_Id(std::chrono::nanoseconds, Timer_Callback)> - ::add_convention< - _reschedule, - void(Timer_Id, std::chrono::nanoseconds)> - ::support_relocation - ::build {}; +using Timer_Service = time_thread::Timer_Service_Facade; [[nodiscard]] std::expected, Make_Timer_Service_Result> make_timer_service(proxy time_source); diff --git a/kernel/kernel/module/time_thread/src/Timer_Service_Model.hpp b/kernel/kernel/module/time_thread/src/Timer_Service_Model.hpp index 39d00fc..4ccbc22 100644 --- a/kernel/kernel/module/time_thread/src/Timer_Service_Model.hpp +++ b/kernel/kernel/module/time_thread/src/Timer_Service_Model.hpp @@ -23,5 +23,4 @@ private: }; std::shared_ptr make_timer_service_state(proxy time_source); -template proxy make_timer_service_proxy(proxy time_source) { return make_model_proxy_shared(make_timer_service_state(std::move(time_source))); } } // namespace aethera::time_thread diff --git a/kernel/kernel/module/time_thread/src/rely_facade.h b/kernel/kernel/module/time_thread/src/rely_facade.h deleted file mode 100644 index e029746..0000000 --- a/kernel/kernel/module/time_thread/src/rely_facade.h +++ /dev/null @@ -1,2 +0,0 @@ -#pragma once -namespace aethera::time_thread {} diff --git a/kernel/kernel/module/time_thread/test/Timer_Service_Tests.cpp b/kernel/kernel/module/time_thread/test/Timer_Service_Tests.cpp index 5949248..9b5a6f2 100644 --- a/kernel/kernel/module/time_thread/test/Timer_Service_Tests.cpp +++ b/kernel/kernel/module/time_thread/test/Timer_Service_Tests.cpp @@ -1,6 +1,7 @@ #include "time_thread/src/Timer_Service.hpp" #include "time_thread/src/Timer_Time_Source.hpp" #include "../src/detail/Timer_Scheduler.hpp" +#include #include "model/Model.hpp" #include @@ -11,6 +12,7 @@ #include namespace { +static_assert(std::is_convertible_v&&, aethera::proxy>); using namespace std::chrono_literals; template