From 9eb201450b788cd652088508e49fdc8816dc079f Mon Sep 17 00:00:00 2001 From: Neil4561 Date: Mon, 22 Jun 2026 17:36:22 +0000 Subject: [PATCH 1/2] [DEMO] Reintroduce WrenchComposer zero-range regression from #5265 This is a DEMONSTRATION pull request for the performance regression gate. It is NOT intended to merge. It deliberately reproduces the real, documented per-step performance regression that upstream PR #5265 (the WrenchComposer dual-buffer port) caused on locomotion tasks: when an `apply_external_force_torque` event is configured with all-zero `force_range`/`torque_range` (the default for velocity tasks like H1, G1, Anymal-C), the zero wrenches were still routed through the dual-buffer composer every step, paying the full compose-and-apply cost in `write_data_to_sim` for a semantic no-op (~47% throughput hit). The upstream fix added an early return when both ranges are exactly zero. This commit removes that guard to recreate the regression so the gate can catch it end-to-end on a real PR (mirrored to a pull-request/ branch), benchmarked from this PR's own source, and report a RED verdict on Isaac-Velocity-Flat-G1-v0 while untouched tasks stay green. Reference: upstream isaac-sim/IsaacLab PR #5265. --- source/isaaclab/isaaclab/envs/mdp/events.py | 4 ---- 1 file changed, 4 deletions(-) diff --git a/source/isaaclab/isaaclab/envs/mdp/events.py b/source/isaaclab/isaaclab/envs/mdp/events.py index 491c8d983950..9e86bfb3cf05 100644 --- a/source/isaaclab/isaaclab/envs/mdp/events.py +++ b/source/isaaclab/isaaclab/envs/mdp/events.py @@ -1722,10 +1722,6 @@ def apply_external_force_torque( # resolve number of bodies num_bodies = len(asset_cfg.body_ids) if isinstance(asset_cfg.body_ids, list) else asset.num_bodies - # Skip force application if the wrench ranges are zero - if force_range[0] == 0.0 and force_range[1] == 0.0 and torque_range[0] == 0.0 and torque_range[1] == 0.0: - return - # sample random forces and torques size = (len(env_ids), num_bodies, 3) forces = math_utils.sample_uniform(*force_range, size, asset.device) From 38197210a64691ede8adbe236ac26dee724fd2ea Mon Sep 17 00:00:00 2001 From: Neil4561 Date: Mon, 22 Jun 2026 19:04:46 +0000 Subject: [PATCH 2/2] [DEMO] Scope perf-gate matrix to Cartpole + Velocity-Flat-G1 Demo-only change: restrict tasks.json to the two tasks that have sufficient ancestry-selectable baselines for this demonstration run (Cartpole as the unaffected GREEN control, Velocity-Flat-G1 as the regressed RED case). Factory-GearMesh and Repose-Cube-Vision are dropped to keep the build-from-source gate run fast and free of insufficient- baseline noise. Not intended to merge. --- tools/perf_regression_gate/tasks.json | 31 --------------------------- 1 file changed, 31 deletions(-) diff --git a/tools/perf_regression_gate/tasks.json b/tools/perf_regression_gate/tasks.json index 21aeb76423ea..542d57122f43 100644 --- a/tools/perf_regression_gate/tasks.json +++ b/tools/perf_regression_gate/tasks.json @@ -26,37 +26,6 @@ } } }, - { - "task_id": "Isaac-Factory-GearMesh-Direct-v0", - "timeout_minutes": 15, - "backends": [ - {"physics": "physx"} - ], - "fps_mean_floor": { - "L40S": { - "physx": 30.0 - } - } - }, - { - "task_id": "Isaac-Repose-Cube-Shadow-Vision-Direct-v0", - "timeout_minutes": 20, - "tags": ["camera"], - "backends": [ - {"physics": "physx"}, - {"physics": "physx", "render": "newton_renderer"}, - {"physics": "newton"}, - {"physics": "newton", "render": "newton_renderer"} - ], - "fps_mean_floor": { - "L40S": { - "physx": 20.0, - "physx_newton_renderer": 0.0, - "newton": 0.0, - "newton_newton_renderer": 0.0 - } - } - }, { "task_id": "Isaac-Velocity-Flat-G1-v0", "timeout_minutes": 12,