Skip to content

Phase 2: RINIT fast-path & deferred hooks — 630% → 10% overhead#4

Merged
pronskiy merged 3 commits intomainfrom
phase2-observer-migration
Mar 10, 2026
Merged

Phase 2: RINIT fast-path & deferred hooks — 630% → 10% overhead#4
pronskiy merged 3 commits intomainfrom
phase2-observer-migration

Conversation

@pronskiy
Copy link
Owner

@pronskiy pronskiy commented Mar 6, 2026

Key changes:

  • Add observer_active/statement_handler_enabled globals for fast bailout
  • RINIT trigger pre-check: disable observer when no debug session possible
  • Defer ZEND_COMPILE_EXTENDED_STMT to only when debugger will connect
  • Remove zombie ZEND_ASSIGN* opcode handlers (leftover from stripped modules)
  • Gate xdebug_debugger_compile_file behind observer_active check
  • Set observer_active=1 in xdebug_mark_debug_connection_active for mid-request

Benchmark (bench.php, loaded no client):

  • Before: ~10.8s (~630% overhead)
  • After: ~1.63s (~10% overhead)
  • Vanilla: ~1.48s

Test results: 222 pass, 23 fail, 49 skip (vs Phase 1: 225/20/49) 3 accepted regressions: bug00622 (eval source mapping), bug01101 (xdebug_break jit mode), start_ignore_yes_env (env trigger edge case). Remaining 10% overhead is Observer API floor (engine-level).

root added 3 commits March 6, 2026 12:45
Key changes:
- Add observer_active/statement_handler_enabled globals for fast bailout
- RINIT trigger pre-check: disable observer when no debug session possible
- Defer ZEND_COMPILE_EXTENDED_STMT to only when debugger will connect
- Remove zombie ZEND_ASSIGN* opcode handlers (leftover from stripped modules)
- Gate xdebug_debugger_compile_file behind observer_active check
- Set observer_active=1 in xdebug_mark_debug_connection_active for mid-request

Benchmark (bench.php, loaded no client):
- Before: ~10.8s (~630% overhead)
- After:  ~1.63s (~10% overhead)
- Vanilla: ~1.48s

Test results: 222 pass, 23 fail, 49 skip (vs Phase 1: 225/20/49)
3 accepted regressions: bug00622 (eval source mapping), bug01101
(xdebug_break jit mode), start_ignore_yes_env (env trigger edge case).
Remaining 10% overhead is Observer API floor (engine-level).
@pronskiy pronskiy merged commit 4a1f609 into main Mar 10, 2026
4 of 10 checks passed
pronskiy added a commit that referenced this pull request Mar 11, 2026
Phase 2: RINIT fast-path & deferred hooks — 630% → 10% overhead
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant