You are here

protected function BaseParser::initMetrics in XHProf 8

Parameters

$symbols: All profiled symbols.

$symbol: Set this to show the parent-child report.

$sort: Metric used to sort.

1 call to BaseParser::initMetrics()
BaseParser::__construct in src/XHProfLib/Parser/BaseParser.php

File

src/XHProfLib/Parser/BaseParser.php, line 67

Class

BaseParser
Class BaseReport

Namespace

Drupal\xhprof\XHProfLib\Parser

Code

protected function initMetrics($symbols, $symbol, $sort) {
  if (!empty($sort)) {
    if (array_key_exists($sort, ReportConstants::getSortableColumns())) {
      $this->sort_col = $sort;
    }
    else {
      print "Invalid Sort Key {$sort} specified in URL";
    }
  }

  // For C++ profiler runs, walltime attribute isn't present.
  // In that case, use "samples" as the default sort column.
  $wt = $this->mainSymbol
    ->getWt();
  if (!isset($wt)) {
    if ($this->sort_col == "wt") {
      $this->sort_col = "samples";
    }

    // C++ profiler data doesn't have call counts.
    // ideally we should check to see if "ct" metric
    // is present for "main()". But currently "ct"
    // metric is artificially set to 1. So, relying
    // on absence of "wt" metric instead.
    $this->display_calls = FALSE;
  }
  else {
    $this->display_calls = TRUE;
  }

  // parent/child report doesn't support exclusive times yet.
  // So, change sort hyperlinks to closest fit.
  if (!empty($symbol)) {
    $this->sort_col = str_replace("excl_", "", $this->sort_col);
  }
  if ($this->display_calls) {
    $this->stats = [
      "fn",
      "ct",
      "Calls%",
    ];
  }
  else {
    $this->stats = [
      "fn",
    ];
  }
  $this->pc_stats = $this->stats;
  $possible_metrics = $this
    ->getPossibleMetrics($symbols);
  foreach ($possible_metrics as $metric => $desc) {
    $mainMetric = $this->mainSymbol
      ->getMetric($metric);
    if (isset($mainMetric)) {
      $metrics[] = $metric;

      // flat (top-level reports): we can compute
      // exclusive metrics reports as well.
      $this->stats[] = $metric;
      $this->stats[] = "I" . $desc[0] . "%";
      $this->stats[] = "excl_" . $metric;
      $this->stats[] = "E" . $desc[0] . "%";

      // parent/child report for a function: we can
      // only breakdown inclusive times correctly.
      $this->pc_stats[] = $metric;
      $this->pc_stats[] = "I" . $desc[0] . "%";
    }
  }
}