Phorge has an external copy of a file called `xhprof_lib.php` in https://we.phorge.it/source/phorge/browse/master/externals/xhprof/ which has not seen updates since February 2011.
I assume that its upstream was https://github.com/phacility/xhprof/blob/master/xhprof_lib/utils/xhprof_lib.php which saw its last update in February 2015.
Per https://pecl.php.net/package/xhprof , the canonical upstream nowadays seems to be the fork located at https://github.com/longxinH/xhprof/blob/master/xhprof_lib/utils/xhprof_lib.php
Calls seem to take place in three core files:
```
./src/applications/xhprof/view/PhabricatorXHProfProfileTopLevelView.php: * @phutil-external-symbol function xhprof_compute_flat_info
./src/applications/xhprof/view/PhabricatorXHProfProfileTopLevelView.php: $flat = xhprof_compute_flat_info($this->profileData, $totals);
./src/applications/xhprof/view/PhabricatorXHProfProfileSymbolView.php: * @phutil-external-symbol function xhprof_compute_flat_info
./src/applications/xhprof/view/PhabricatorXHProfProfileSymbolView.php: $flat = xhprof_compute_flat_info($data, $totals);
./src/applications/console/plugin/xhprof/DarkConsoleXHProfPluginAPI.php: * @phutil-external-symbol function xhprof_enable
./src/applications/console/plugin/xhprof/DarkConsoleXHProfPluginAPI.php: * @phutil-external-symbol function xhprof_disable
./src/applications/console/plugin/xhprof/DarkConsoleXHProfPluginAPI.php: require_once $root.'/externals/xhprof/xhprof_lib.php';
./src/applications/console/plugin/xhprof/DarkConsoleXHProfPluginAPI.php: xhprof_enable();
./src/applications/console/plugin/xhprof/DarkConsoleXHProfPluginAPI.php: $data = xhprof_disable();
```
Related documentation can be found in
* `./src/docs/book/phorge.book`
* `./src/docs/user/field/xhprof.diviner`
* `./src/docs/user/field/performance.diviner`
Apart from three lines difference, the version currently copied into Phorge resembles `58f6d12cdea501b96ea26172e363eb3a5aa2433a` in https://github.com/longxinH/xhprof/commits/master/xhprof_lib/utils/xhprof_lib.php :
```
[acko@fedora phorge-tmp-xhprof-upstream ((58f6d12...))]$ diff -pu xhprof_lib/utils/xhprof_lib.php /var/www/html/phorge/phorge/externals/xhprof/xhprof_lib.php
--- xhprof_lib/utils/xhprof_lib.php 2024-10-21 10:17:22.846280385 +0200
+++ /var/www/html/phorge/phorge/externals/xhprof/xhprof_lib.php 2024-08-23 14:19:53.124306783 +0200
@@ -261,7 +261,7 @@ function xhprof_aggregate_runs($xhprof_r
$bad_runs = array();
foreach($runs as $idx => $run_id) {
- $raw_data = $xhprof_runs_impl->get_run($run_id, $source, $description);
+ $raw_data = $xhprof_runs_impl->get_run($run_id, $source, '?');
// use the first run to derive what metrics to aggregate on.
if ($idx == 0) {
@@ -283,7 +283,7 @@ function xhprof_aggregate_runs($xhprof_r
}
if ($use_script_name) {
- $page = $description;
+ $page = '?';
// create a fake function '__script::$page', and have and edge from
// main() to '__script::$page'. We will also need edges to transfer
@@ -589,7 +589,7 @@ function xhprof_prune_run($raw_data, $pr
$prune_threshold = (($main_info[$prune_metric] * $prune_percent) / 100.0);
- init_metrics($raw_data, null, null, false);
+// init_metrics($raw_data, null, null, false);
$flat_info = xhprof_compute_inclusive_times($raw_data);
foreach ($raw_data as $parent_child => $info) {
```