0, 'callable' => $before('Event: ' . $name)], ['priority' => 999, 'callable' => $after('Event: ' . $name)], ]; }; return [ 'Controller.initialize' => [ ['priority' => 0, 'callable' => function () { DebugMemory::record('Controller initialization'); }], ['priority' => 0, 'callable' => $before('Event: Controller.initialize')], ['priority' => 999, 'callable' => $after('Event: Controller.initialize')], ], 'Controller.startup' => [ ['priority' => 0, 'callable' => $before('Event: Controller.startup')], ['priority' => 999, 'callable' => $after('Event: Controller.startup')], ['priority' => 999, 'callable' => function () { DebugMemory::record('Controller action start'); DebugTimer::start('Controller: action'); }], ], 'Controller.beforeRender' => [ ['priority' => 0, 'callable' => function () { DebugTimer::stop('Controller: action'); }], ['priority' => 0, 'callable' => $before('Event: Controller.beforeRender')], ['priority' => 999, 'callable' => $after('Event: Controller.beforeRender')], ['priority' => 999, 'callable' => function () { DebugMemory::record('View Render start'); DebugTimer::start('View: Render'); }], ], 'View.beforeRender' => $both('View.beforeRender'), 'View.afterRender' => $both('View.afterRender'), 'View.beforeLayout' => $both('View.beforeLayout'), 'View.afterLayout' => $both('View.afterLayout'), 'View.beforeRenderFile' => [ ['priority' => 0, 'callable' => function ($event, $filename) { DebugTimer::start('Render File: ' . $filename); }], ], 'View.afterRenderFile' => [ ['priority' => 0, 'callable' => function ($event, $filename) { DebugTimer::stop('Render File: ' . $filename); }], ], 'Controller.shutdown' => [ ['priority' => 0, 'callable' => $before('Event: Controller.shutdown')], ['priority' => 0, 'callable' => function () { DebugTimer::stop('View: Render'); DebugMemory::record('Controller shutdown'); }], ['priority' => 999, 'callable' => $after('Event: Controller.shutdown')], ], ]; } /** * Get the data for the panel. * * @return array */ public function data() { return [ 'requestTime' => DebugTimer::requestTime(), 'timers' => DebugTimer::getAll(), 'memory' => DebugMemory::getAll(), 'peakMemory' => DebugMemory::getPeak(), ]; } /** * Get the summary for the panel. * * @return string */ public function summary() { $time = Number::precision(DebugTimer::requestTime(), 2) . ' s'; $memory = Number::toReadableSize(DebugMemory::getPeak()); return "$time / $memory"; } }