import {describe, expect, it} from "vitest"; import {build_dag_model} from "../../src/dag/dag_model"; import type {Gallery_Captured_Frame} from "../../src/protocol/gallery_types"; describe("DAG view model", () => { it("uses node_id for current plan and capture overlays", () => { const plan = { version: 2, nodes: [{node_id: 7, name: "paint", owner: "plot", kind: "paint"}], edges: [], renderables: [], }; const frame: Gallery_Captured_Frame = { frame_id: 1, render_plan_version: 2, render_duration_ns: 10, node_executions: [{ node_id: 7, worker_id: 3, start_offset_ns: 0, cpu_end_offset_ns: 10, external_start_offset_ns: 0, external_end_offset_ns: 0, end_offset_ns: 10, duration_ns: 10, cpu_duration_ns: 10, external_duration_ns: 0, status: "complete", attachments: [], }], analysis: { total_render_duration_ns: 10, critical_path_duration_ns: 10, total_work_duration_ns: 10, scheduler_work_duration_ns: 10, render_domain_work_duration_ns: 0, total_external_duration_ns: 0, total_render_domain_queue_wait_ns: 0, total_gpu_completion_wait_ns: 0, total_gpu_execution_duration_ns: 0, scheduler_parallel_overlap_ns: 0, scheduler_peak_parallelism: 1, average_cpu_concurrency: 1, scheduler_average_parallelism: 1, render_domain_utilization: 0, critical_path: [7], bottleneck_nodes: [7], nodes: [{ node_id: 7, duration_ns: 10, cpu_duration_ns: 10, render_domain_cpu_duration_ns: 0, total_cpu_work_duration_ns: 10, external_duration_ns: 0, render_domain_queue_wait_ns: 0, gpu_completion_wait_ns: 0, gpu_execution_duration_ns: 0, start_offset_ns: 0, end_offset_ns: 10, dependency_ready_offset_ns: 0, scheduler_wait_ns: 0, work_contribution: 1, critical_path_contribution: 1, on_critical_path: true, }], workers: [{ worker_id: 3, work_duration_ns: 10, utilization: 1, }], }, }; const model = build_dag_model(plan, frame, [], 7); expect(model.nodes[0].id).toBe("7"); expect(model.nodes[0].data).toMatchObject({ duration_ns: 10, worker_id: 3, critical: true, selected: true, }); }); });