Files
phabricator/src/applications/console/plugin/DarkConsoleStartupPlugin.php
epriestley 4b1815d6cc Add a "Startup" to DarkConsole
Summary: Ref T8588. It looks like something slow is happening //before// we start DarkConsole. Add some crude reporting to try to narrow it down.

Test Plan: {F743050}

Reviewers: chad

Reviewed By: chad

Maniphest Tasks: T8588

Differential Revision: https://secure.phabricator.com/D13956
2015-08-21 14:53:29 -07:00

85 lines
1.8 KiB
PHP

<?php
final class DarkConsoleStartupPlugin extends DarkConsolePlugin {
public function getName() {
return pht('Startup');
}
public function getDescription() {
return pht('Timing information about the startup sequence.');
}
/**
* @phutil-external-symbol class PhabricatorStartup
*/
public function generateData() {
return PhabricatorStartup::getPhases();
}
public function renderPanel() {
$data = $this->getData();
// Compute the time offset and duration of each startup phase.
$prev_key = null;
$init = null;
$phases = array();
foreach ($data as $key => $value) {
if ($init === null) {
$init = $value;
}
$offset = (int)floor(1000 * ($value - $init));
$phases[$key] = array(
'time' => $value,
'offset' => $value - $init,
);
if ($prev_key !== null) {
$phases[$prev_key]['duration'] = $value - $phases[$prev_key]['time'];
}
$prev_key = $key;
}
// Render the phases.
$rows = array();
foreach ($phases as $key => $phase) {
$offset_ms = (int)floor(1000 * $phase['offset']);
if (isset($phase['duration'])) {
$duration_us = (int)floor(1000000 * $phase['duration']);
} else {
$duration_us = null;
}
$rows[] = array(
$key,
pht('+%s ms', new PhutilNumber($offset_ms)),
($duration_us === null)
? pht('-')
: pht('%s us', new PhutilNumber($duration_us)),
null,
);
}
return id(new AphrontTableView($rows))
->setHeaders(
array(
pht('Phase'),
pht('Offset'),
pht('Duration'),
null,
))
->setColumnClasses(
array(
'',
'n right',
'n right',
'wide',
));
}
}