Model queued PHP work as deterministic data and replay each queue step.

work queue A queue can be replayed without timers when each work item is represented by fixed data.

Work Queue Panel

extra
work_queue_panel.php
Replay: real traced execution (multi-file project)
<?php
$extra = "audit";
$queue = [
    ["name" => "read", "cost" => 1],
    ["name" => $extra, "cost" => 2],
    ["name" => "write", "cost" => 3]
];

$log = "";
$total = 0;

while (count($queue) > 0) {
    $event = array_shift($queue);
    $total = $total + $event["cost"];
    $label = "run:" . $event["name"];
    $log = $log === "" ? $label : $log . "," . $label;
}

echo "extra=" . $extra . "\n";
echo "log=" . $log . "\n";
echo "total=" . $total . "\n";
<?php
$extra = "read";
$queue = [
    ["name" => "read", "cost" => 1],
    ["name" => $extra, "cost" => 2],
    ["name" => "write", "cost" => 3]
];

$log = "";
$total = 0;

while (count($queue) > 0) {
    $event = array_shift($queue);
    $total = $total + $event["cost"];
    $label = "run:" . $event["name"];
    $log = $log === "" ? $label : $log . "," . $label;
}

echo "extra=" . $extra . "\n";
echo "log=" . $log . "\n";
echo "total=" . $total . "\n";
<?php
$extra = "render";
$queue = [
    ["name" => "read", "cost" => 1],
    ["name" => $extra, "cost" => 2],
    ["name" => "write", "cost" => 3]
];

$log = "";
$total = 0;

while (count($queue) > 0) {
    $event = array_shift($queue);
    $total = $total + $event["cost"];
    $label = "run:" . $event["name"];
    $log = $log === "" ? $label : $log . "," . $label;
}

echo "extra=" . $extra . "\n";
echo "log=" . $log . "\n";
echo "total=" . $total . "\n";
  1. $extra ← audit, $queue ← Array, $log ← (empty), $total ← 0

    1<?php2$extra→ audit = "audit"; //@extra="read", "render"3$queue→ Array = [4    ["name" => "read", "cost" => 1],5    ["name" => $extraaudit, "cost" => 2],6    ["name" => "write", "cost" => 3]7];89$log→ (empty) = "";10$total→ 0 = 0;
  2. $event ← Array, $total ← 1, $label ← run:read, $log ← run:read

    pass 1 of 3
    12while (count($queueArray) > 0) {13    $event→ Array = array_shift($queueArray);14    $total→ 1 = $total + $event["cost"]1;15    $label→ run:read = "run:" . $event["name"]read;16    $log→ run:read = $log === "" ? $label : $log . "," . $labelrun:read;17}
    All 3 passes — pass 1 is the card above
    pass$event["cost"]$event["name"]$event$total$label$log
    11readArray0 1run:read(empty) run:read
    22auditArray1 3run:auditrun:read run:read,run:audit
    33writeArray3 6run:writerun:read,run:audit run:read,run:audit,run:write
  3. echo "extra=" . $extra . " ";

    19echo "extra=" . $extraaudit . "\n";20echo "log=" . $logrun:read,run:audit,run:write . "\n";21echo "total=" . $total6 . "\n";
    outputextra=audit
    log=run:read,run:audit,run:write
    total=6
  1. $extra ← read, $queue ← Array, $log ← (empty), $total ← 0

    1<?php2$extra→ read = "read";3$queue→ Array = [4    ["name" => "read", "cost" => 1],5    ["name" => $extraread, "cost" => 2],6    ["name" => "write", "cost" => 3]7];89$log→ (empty) = "";10$total→ 0 = 0;
  2. $event ← Array, $total ← 1, $label ← run:read, $log ← run:read

    pass 1 of 3
    12while (count($queueArray) > 0) {13    $event→ Array = array_shift($queueArray);14    $total→ 1 = $total + $event["cost"]1;15    $label→ run:read = "run:" . $event["name"]read;16    $log→ run:read = $log === "" ? $label : $log . "," . $labelrun:read;17}
    All 3 passes — pass 1 is the card above
    pass$event["cost"]$event["name"]$event$total$label$log
    11readArray0 1run:read(empty) run:read
    22readArray1 3run:readrun:read run:read,run:read
    33writeArray3 6run:writerun:read,run:read run:read,run:read,run:write
  3. echo "extra=" . $extra . " ";

    19echo "extra=" . $extraread . "\n";20echo "log=" . $logrun:read,run:read,run:write . "\n";21echo "total=" . $total6 . "\n";
    outputextra=read
    log=run:read,run:read,run:write
    total=6
  1. $extra ← render, $queue ← Array, $log ← (empty), $total ← 0

    1<?php2$extra→ render = "render";3$queue→ Array = [4    ["name" => "read", "cost" => 1],5    ["name" => $extrarender, "cost" => 2],6    ["name" => "write", "cost" => 3]7];89$log→ (empty) = "";10$total→ 0 = 0;
  2. $event ← Array, $total ← 1, $label ← run:read, $log ← run:read

    pass 1 of 3
    12while (count($queueArray) > 0) {13    $event→ Array = array_shift($queueArray);14    $total→ 1 = $total + $event["cost"]1;15    $label→ run:read = "run:" . $event["name"]read;16    $log→ run:read = $log === "" ? $label : $log . "," . $labelrun:read;17}
    All 3 passes — pass 1 is the card above
    pass$event["cost"]$event["name"]$event$total$label$log
    11readArray0 1run:read(empty) run:read
    22renderArray1 3run:renderrun:read run:read,run:render
    33writeArray3 6run:writerun:read,run:render run:read,run:render,run:write
  3. echo "extra=" . $extra . " ";

    19echo "extra=" . $extrarender . "\n";20echo "log=" . $logrun:read,run:render,run:write . "\n";21echo "total=" . $total6 . "\n";
    outputextra=render
    log=run:read,run:render,run:write
    total=6