42 lines
3.0 KiB
Python
42 lines
3.0 KiB
Python
from pathlib import Path
|
|
import os
|
|
import sys
|
|
def replace_once(path: Path, old: str, new: str) -> None:
|
|
text = path.read_text(encoding="utf-8")
|
|
count = text.count(old)
|
|
if count == 0 and not new and os.environ.get("AETHERA_TEXT_GUARDRAIL_UPGRADE") == "1":
|
|
return
|
|
if count != 1:
|
|
raise RuntimeError(f"{path}: expected one match, found {count}")
|
|
path.write_text(text.replace(old, new, 1), encoding="utf-8")
|
|
def main() -> None:
|
|
root = Path(sys.argv[1] if len(sys.argv) > 1 else ".").resolve()
|
|
runtime = root / "kernel/kernel/module/task_flow/src/Task_Runtime.cpp"
|
|
replace_once(runtime, '#include "observation/Tracy.hpp"\n', '#include "Trace_Adapter.hpp"\n')
|
|
replace_once(runtime, ' struct Frame_Task_Trace_Tags {\n std::uint64_t frame{};\n std::uint64_t generation{};\n std::string_view graph{};\n std::size_t worker{};\n std::uint64_t task{};\n };\n', '')
|
|
replace_once(runtime, ' std::array<observation::Tracy_Task_Zone, Tracy_Zone_Depth> zones{};\n', ' std::array<task_flow_trace::Task_Zone, Tracy_Zone_Depth> zones{};\n')
|
|
replace_once(runtime, ''' void name_worker(Tracy_Worker_State& state, std::size_t worker_id) noexcept {
|
|
if (state.named) return;
|
|
constexpr std::string_view Prefix{"Aethera.Taskflow."};
|
|
std::array<char, 64> name{};
|
|
std::memcpy(name.data(), Prefix.data(), Prefix.size());
|
|
const auto [end, error] = std::to_chars(name.data() + Prefix.size(), name.data() + name.size() - 1, worker_id);
|
|
if (error != std::errc{}) return;
|
|
*end = '\0';
|
|
observation::set_tracy_thread_name(name.data());
|
|
state.named = true;
|
|
}
|
|
''', ''' void name_worker(Tracy_Worker_State& state, std::size_t worker_id) noexcept {
|
|
if (state.named) return;
|
|
task_flow_trace::name_worker(worker_id);
|
|
state.named = true;
|
|
}
|
|
''')
|
|
replace_once(runtime, ' if (!observation::tracy_connected()) {\n', ' if (!task_flow_trace::capture_active()) {\n')
|
|
replace_once(runtime, ' zone = observation::begin_tracy_task_zone(name, native_id);\n', ' zone = task_flow_trace::begin_task(name, native_id);\n')
|
|
replace_once(runtime, ' observation::attach_tracy_task_tags(zone, Frame_Task_Trace_Tags{context->frame, context->generation, graph, worker.id(), native_id});\n', ' task_flow_trace::attach_frame(zone, *context);\n')
|
|
replace_once(runtime, ' observation::end_tracy_task_zone(state.zones[--state.depth]);\n', ' task_flow_trace::end_task(state.zones[--state.depth]);\n')
|
|
replace_once(runtime, ' if (trace_context && observation::tracy_connected()) observation_execution->set_trace_context(*trace_context, graph_execution->native_taskflow().name());\n', ' if (trace_context && task_flow_trace::capture_active()) observation_execution->set_trace_context(*trace_context, graph_execution->native_taskflow().name());\n')
|
|
if __name__ == "__main__":
|
|
main()
|