BRP Add schedule.list endpoint#23447
Conversation
|
@kfc35 Apologies I had a larger WIP branch that I split out this from, could you please have another look? |
There was a problem hiding this comment.
This looks good for an initial endpoint, and I appreciate the vision heh. I checked out the branch and it works as expected for the remote example, sample response: {"jsonrpc":"2.0","id":1,"result":["StateTransition","FixedFirst","Update","FixedMain","PreUpdate","PreStartup","Startup","Last","SpawnScene","FixedLast","First","RunFixedMainLoop","FixedPostUpdate","PostStartup","PostUpdate”]}
I wonder if people will be curious to see the schedules for the render subapp too, but that could be extended later as a request parameter or something. Don’t mind my tendency to over-engineer edit: i see your other PR has to do with render app stuff and bevy_remote, so I will just have to look at that I suppose
Co-authored-by: Kevin Chen <chen.kevin.f@gmail.com>
Indeed, and it gives this response for the render subapp
Ref: #23446 |
|
It feels strange that this is basically a special-cased endpoint for the We should at least document the caveats for what data is going to be returned here so users know what to expect. |
|
As mentioned in #23452 (comment) , {"jsonrpc":"2.0","id":1,"result":{"empty_schedule_labels":["FixedPreUpdate","FixedUpdate"],"schedule_labels":["Startup","First","RunFixedMainLoop","PostStartup","FixedFirst","StateTransition","PreUpdate","PostUpdate","Update","PreStartup","SpawnScene","Last","FixedLast","FixedPostUpdate","FixedMain"],"unavailable_schedule_labels":["Main","RemoteLast"]}} |
Co-authored-by: Kevin Chen <chen.kevin.f@gmail.com>
# Objective - Describe the graph for a given schedule ## Solution - Add endpoint `schedule.graph` ## Related: - #23447 - #23446 ## Testing - in terminal 1 run `cargo run --example server --features="bevy_remote"` - in terminal 2 run `curl -d'{"jsonrpc":"2.0","method":"schedule.graph","id":1,"params":{"schedule_name":"First"}}' -X POST -H "Accept: applcation/json" -H "Content-Type: application/json" http://127.0.0.1:15702 ` <details><summary>Response</summary> <p> ```json { "jsonrpc": "2.0", "id": 1, "result": { "systemsets": [ { "key": "SystemSetKey(1v1)", "method": "SystemTypeSet:bevy_ecs::message::update::message_update_system" }, { "key": "SystemSetKey(2v1)", "method": "MessageUpdateSystems" }, { "key": "SystemSetKey(3v1)", "method": "SystemTypeSet:bevy_time::time_system" }, { "key": "SystemSetKey(4v1)", "method": "TimeSystems" }, { "key": "SystemSetKey(5v1)", "method": "SystemTypeSet:bevy_render::view::window::screenshot::clear_screenshots" }, { "key": "SystemSetKey(6v1)", "method": "SystemTypeSet:bevy_ecs::schedule::executor::ApplyDeferred" }, { "key": "SystemSetKey(7v1)", "method": "SystemTypeSet:bevy_ui::widget::viewport::viewport_picking" }, { "key": "SystemSetKey(8v1)", "method": "PostInput" }, { "key": "SystemSetKey(9v1)", "method": "SystemTypeSet:bevy_picking::input::mouse_pick_events" }, { "key": "SystemSetKey(10v1)", "method": "Input" }, { "key": "SystemSetKey(11v1)", "method": "SystemTypeSet:bevy_picking::input::touch_pick_events" } ], "hierarchy_nodes": [ "Set(SystemSetKey(11v1))", "Set(SystemSetKey(10v1))", "System(SystemKey(6v1))", "Set(SystemSetKey(9v1))", "System(SystemKey(5v1))", "Set(SystemSetKey(8v1))", "Set(SystemSetKey(7v1))", "System(SystemKey(4v1))", "Set(SystemSetKey(6v1))", "Set(SystemSetKey(5v1))", "System(SystemKey(3v1))", "Set(SystemSetKey(4v1))", "Set(SystemSetKey(3v1))", "System(SystemKey(2v1))", "Set(SystemSetKey(2v1))", "Set(SystemSetKey(1v1))", "System(SystemKey(1v1))" ], "hierarchy_edges": [ [ "Set(SystemSetKey(1v1))", "System(SystemKey(1v1))" ], [ "Set(SystemSetKey(3v1))", "System(SystemKey(2v1))" ], [ "Set(SystemSetKey(8v1))", "System(SystemKey(4v1))" ], [ "Set(SystemSetKey(2v1))", "System(SystemKey(1v1))" ], [ "Set(SystemSetKey(7v1))", "System(SystemKey(4v1))" ], [ "Set(SystemSetKey(4v1))", "System(SystemKey(2v1))" ], [ "Set(SystemSetKey(9v1))", "System(SystemKey(5v1))" ], [ "Set(SystemSetKey(10v1))", "System(SystemKey(6v1))" ], [ "Set(SystemSetKey(5v1))", "System(SystemKey(3v1))" ], [ "Set(SystemSetKey(10v1))", "System(SystemKey(5v1))" ], [ "Set(SystemSetKey(11v1))", "System(SystemKey(6v1))" ] ], "dependency_nodes": [ "System(SystemKey(1v1))", "Set(SystemSetKey(1v1))", "Set(SystemSetKey(2v1))", "System(SystemKey(2v1))", "Set(SystemSetKey(3v1))", "Set(SystemSetKey(4v1))", "System(SystemKey(3v1))", "Set(SystemSetKey(5v1))", "Set(SystemSetKey(6v1))", "System(SystemKey(4v1))", "Set(SystemSetKey(7v1))", "Set(SystemSetKey(8v1))", "System(SystemKey(5v1))", "Set(SystemSetKey(9v1))", "Set(SystemSetKey(10v1))", "System(SystemKey(6v1))", "Set(SystemSetKey(11v1))" ], "dependency_edges": [ [ "Set(SystemSetKey(2v1))", "Set(SystemSetKey(10v1))" ], [ "Set(SystemSetKey(10v1))", "Set(SystemSetKey(8v1))" ], [ "System(SystemKey(3v1))", "Set(SystemSetKey(6v1))" ], [ "System(SystemKey(5v1))", "System(SystemKey(6v1))" ], [ "Set(SystemSetKey(4v1))", "Set(SystemSetKey(8v1))" ], [ "Set(SystemSetKey(4v1))", "Set(SystemSetKey(10v1))" ], [ "Set(SystemSetKey(2v1))", "Set(SystemSetKey(8v1))" ], [ "Set(SystemSetKey(1v1))", "System(SystemKey(3v1))" ] ] } } ``` </p> </details> From the above response, the below graph can be generated. Hierarchy edges are blue, dependency edges are red. System nodes are implied by hierarchy from Set to System. <img width="1543" height="347" alt="first" src="https://github.com/user-attachments/assets/80ac7e80-2a28-4246-80cc-29337bad4383" /> <details><summary>GraphViz Source</summary> <p> ``` digraph { "Set(SystemSetKey(1v1))" [label="message_update_system"] "Set(SystemSetKey(2v1))" [label="MessageUpdateSystems"] "Set(SystemSetKey(3v1))" [label="time_system"] "Set(SystemSetKey(4v1))" [label="TimeSystems"] "Set(SystemSetKey(5v1))" [label="clear_screenshots"] "Set(SystemSetKey(6v1))" [label="ApplyDeferred"] "Set(SystemSetKey(7v1))" [label="viewport_picking"] "Set(SystemSetKey(8v1))" [label="PostInput"] "Set(SystemSetKey(9v1))" [label="mouse_pick_events"] "Set(SystemSetKey(10v1))" [label="Input"] "Set(SystemSetKey(11v1))" [label="touch_pick_events"] // implied nodes "System(SystemKey(1v1))" [label="implied message_update_system", shape=rectangle] "System(SystemKey(2v1))" [label="implied time_system", shape=rectangle] "System(SystemKey(3v1))" [label="implied clear_screenshots", shape=rectangle] "System(SystemKey(4v1))" [label="implied viewport_picking", shape=rectangle] "System(SystemKey(5v1))" [label="implied mouse_pick_events", shape=rectangle] "System(SystemKey(6v1))" [label="implied touch_pick_events", shape=rectangle] // hierarchy "Set(SystemSetKey(1v1))" -> "System(SystemKey(1v1))" [color=blue] "Set(SystemSetKey(3v1))" -> "System(SystemKey(2v1))" [color=blue] "Set(SystemSetKey(8v1))" -> "System(SystemKey(4v1))" [color=blue] "Set(SystemSetKey(2v1))" -> "System(SystemKey(1v1))" [color=blue] "Set(SystemSetKey(7v1))" -> "System(SystemKey(4v1))" [color=blue] "Set(SystemSetKey(4v1))" -> "System(SystemKey(2v1))" [color=blue] "Set(SystemSetKey(9v1))" -> "System(SystemKey(5v1))" [color=blue] "Set(SystemSetKey(10v1))" -> "System(SystemKey(6v1))" [color=blue] "Set(SystemSetKey(5v1))" -> "System(SystemKey(3v1))" [color=blue] "Set(SystemSetKey(10v1))" -> "System(SystemKey(5v1))" [color=blue] "Set(SystemSetKey(11v1))" -> "System(SystemKey(6v1))" [color=blue] // dependencies "Set(SystemSetKey(2v1))" -> "Set(SystemSetKey(10v1))" [color=red] "Set(SystemSetKey(10v1))" -> "Set(SystemSetKey(8v1))" [color=red] "System(SystemKey(3v1))" -> "Set(SystemSetKey(6v1))" [color=red] "System(SystemKey(5v1))" -> "System(SystemKey(6v1))" [color=red] "Set(SystemSetKey(4v1))" -> "Set(SystemSetKey(8v1))" [color=red] "Set(SystemSetKey(4v1))" -> "Set(SystemSetKey(10v1))" [color=red] "Set(SystemSetKey(2v1))" -> "Set(SystemSetKey(8v1))" [color=red] "Set(SystemSetKey(1v1))" -> "System(SystemKey(3v1))" [color=red] } ``` </p> </details> --------- Co-authored-by: Kevin Chen <chen.kevin.f@gmail.com> Co-authored-by: Alice Cecile <alice.i.cecile@gmail.com>
Objective
Solution
Schedulessome tracking oftemporarily_removed(schedule removed to execute) andempty_labels(noSchedulefor that label)Related:
schedule.graphendpoint #23452Testing
cargo run --example server --features="bevy_remote"curl -d'{"jsonrpc":"2.0","method":"schedule.list","id":1,"params":{}}' -X POST -H "Accept: applcation/json" -H "Content-Type: application/json" http://127.0.0.1:15702Response
{ "jsonrpc": "2.0", "id": 1, "result": { "empty_schedule_labels": [ "FixedPreUpdate", "FixedUpdate" ], "schedule_labels": [ "Startup", "First", "RunFixedMainLoop", "PostStartup", "FixedFirst", "StateTransition", "PreUpdate", "PostUpdate", "Update", "PreStartup", "SpawnScene", "Last", "FixedLast", "FixedPostUpdate", "FixedMain" ], "unavailable_schedule_labels": [ "Main", "RemoteLast" ] } }