Ejemplo n.º 1
0
 /**
  * @param $symbols
  *   All profiled symbols.
  * @param $symbol
  *   Set this to show the parent-child report.
  * @param $sort
  *   Metric used to sort.
  */
 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 = array("fn", "ct", "Calls%");
     } else {
         $this->stats = array("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] . "%";
         }
     }
 }
Ejemplo n.º 2
0
 /**
  * @param \Drupal\xhprof\XHProfLib\Run $run
  * @param \Symfony\Component\HttpFoundation\Request $request
  *
  * @return string
  */
 public function runAction(Run $run, Request $request)
 {
     $length = $request->get('length', 100);
     $sort = $request->get('sort', 'wt');
     $report = $this->reportEngine->getReport(NULL, NULL, $run, NULL, NULL, $sort, NULL, NULL);
     $build['#title'] = $this->t('XHProf view report for %id', array('%id' => $run->getId()));
     $descriptions = ReportConstants::getDescriptions();
     $build['summary'] = array('title' => array('#type' => 'inline_template', '#template' => '<h3>Summary</h3>'), 'table' => array('#theme' => 'table', '#header' => array(), '#rows' => $this->getSummaryRows($report, $descriptions)));
     $build['length'] = array('#type' => 'inline_template', '#template' => $length == -1 ? '<h3>Displaying all functions, sorted by {{ sort }}.</h3>' : '<h3>Displaying top {{ length }} functions, sorted by {{ sort }}. [{{ all }}]</h3>', '#context' => array('length' => $length, 'all' => $this->l($this->t('show all'), new Url('xhprof.run', array('run' => $run->getId(), 'length' => -1))), 'sort' => Xss::filter($descriptions[$sort], array())));
     $build['table'] = array('#theme' => 'table', '#header' => $this->getRunHeader($report, $descriptions), '#rows' => $this->getRunRows($report, $length), '#attributes' => array('class' => array('responsive')), '#attached' => array('library' => array('xhprof/xhprof')));
     return $build;
 }
Ejemplo n.º 3
0
 /**
  * @param $value
  * @param $metric
  * @param $totals
  *
  * @return mixed|string
  */
 private function getPercentValue($value, $metric, $totals)
 {
     if ($totals == 0) {
         $pct = "N/A%";
     } else {
         $format_cbk = ReportConstants::getFormatCbk();
         $pct = call_user_func($format_cbk[$metric . '_perc'], $value / abs($totals));
     }
     return $pct;
 }