[ Index ]

PHP Cross Reference of Unnamed Project

title

Body

[close]

/lib/xhprof/xhprof_html/js/ -> xhprof_report.js (source)

   1  /*  Copyright (c) 2009 Facebook
   2   *
   3   *  Licensed under the Apache License, Version 2.0 (the "License");
   4   *  you may not use this file except in compliance with the License.
   5   *  You may obtain a copy of the License at
   6   *
   7   *      http://www.apache.org/licenses/LICENSE-2.0
   8   *
   9   *  Unless required by applicable law or agreed to in writing, software
  10   *  distributed under the License is distributed on an "AS IS" BASIS,
  11   *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  12   *  See the License for the specific language governing permissions and
  13   *  limitations under the License.
  14   */
  15  
  16  /**
  17   * Helper javascript functions for XHProf report tooltips.
  18   *
  19   * @author Kannan Muthukkaruppan
  20   */
  21  
  22  // Take a string which is actually a number in comma separated format
  23  // and return a string representing the absolute value of the number.
  24  function stringAbs(x) {
  25    return x.replace("-", "");
  26  }
  27  
  28  // Takes a number in comma-separated string format, and
  29  // returns a boolean to indicate if the number is negative
  30  // or not.
  31  function isNegative(x) {
  32  
  33    return (x.indexOf("-") == 0);
  34  
  35  }
  36  
  37  function addCommas(nStr)
  38  {
  39    nStr += '';
  40    x = nStr.split('.');
  41    x1 = x[0];
  42    x2 = x.length > 1 ? '.' + x[1] : '';
  43    var rgx = /(\d+)(\d{3})/;
  44    while (rgx.test(x1)) {
  45      x1 = x1.replace(rgx, '$1' + ',' + '$2');
  46    }
  47    return x1 + x2;
  48  }
  49  
  50  // Mouseover tips for parent rows in parent/child report..
  51  function ParentRowToolTip(cell, metric)
  52  {
  53    var metric_val;
  54    var parent_metric_val;
  55    var parent_metric_pct_val;
  56    var col_index;
  57    var diff_text;
  58  
  59    row = cell.parentNode;
  60    tds = row.getElementsByTagName("td");
  61  
  62    parent_func    = tds[0].innerHTML;  // name
  63  
  64    if (diff_mode) {
  65      diff_text = " diff ";
  66    } else {
  67      diff_text = "";
  68    }
  69  
  70    s = '<center>';
  71  
  72    if (metric == "ct") {
  73      parent_ct      = tds[1].innerHTML;  // calls
  74      parent_ct_pct  = tds[2].innerHTML;
  75  
  76      func_ct = addCommas(func_ct);
  77  
  78      if (diff_mode) {
  79        s += 'There are ' + stringAbs(parent_ct) +
  80          (isNegative(parent_ct) ? ' fewer ' : ' more ') +
  81          ' calls to ' + func_name + ' from ' + parent_func + '<br>';
  82  
  83        text = " of diff in calls ";
  84      }  else {
  85        text = " of calls ";
  86      }
  87  
  88      s += parent_ct_pct + text + '(' + parent_ct + '/' + func_ct + ') to '
  89        + func_name + ' are from ' + parent_func + '<br>';
  90    } else {
  91  
  92      // help for other metrics such as wall time, user cpu time, memory usage
  93      col_index = metrics_col[metric];
  94      parent_metric_val     = tds[col_index].innerHTML;
  95      parent_metric_pct_val = tds[col_index+1].innerHTML;
  96  
  97      metric_val = addCommas(func_metrics[metric]);
  98  
  99      s += parent_metric_pct_val + '(' + parent_metric_val + '/' + metric_val
 100        + ') of ' + metrics_desc[metric] +
 101        (diff_mode ? ((isNegative(parent_metric_val) ?
 102                      " decrease" : " increase")) : "") +
 103        ' in ' + func_name + ' is due to calls from ' + parent_func + '<br>';
 104    }
 105  
 106    s += '</center>';
 107  
 108    return s;
 109  }
 110  
 111  // Mouseover tips for child rows in parent/child report..
 112  function ChildRowToolTip(cell, metric)
 113  {
 114    var metric_val;
 115    var child_metric_val;
 116    var child_metric_pct_val;
 117    var col_index;
 118    var diff_text;
 119  
 120    row = cell.parentNode;
 121    tds = row.getElementsByTagName("td");
 122  
 123    child_func   = tds[0].innerHTML;  // name
 124  
 125    if (diff_mode) {
 126      diff_text = " diff ";
 127    } else {
 128      diff_text = "";
 129    }
 130  
 131    s = '<center>';
 132  
 133    if (metric == "ct") {
 134  
 135      child_ct     = tds[1].innerHTML;  // calls
 136      child_ct_pct = tds[2].innerHTML;
 137  
 138      s += func_name + ' called ' + child_func + ' ' + stringAbs(child_ct) +
 139        (diff_mode ? (isNegative(child_ct) ? " fewer" : " more") : "" )
 140          + ' times.<br>';
 141      s += 'This accounts for ' + child_ct_pct + ' (' + child_ct
 142          + '/' + total_child_ct
 143          + ') of function calls made by '  + func_name + '.';
 144  
 145    } else {
 146  
 147      // help for other metrics such as wall time, user cpu time, memory usage
 148      col_index = metrics_col[metric];
 149      child_metric_val     = tds[col_index].innerHTML;
 150      child_metric_pct_val = tds[col_index+1].innerHTML;
 151  
 152      metric_val = addCommas(func_metrics[metric]);
 153  
 154      if (child_func.indexOf("Exclusive Metrics") != -1) {
 155        s += 'The exclusive ' + metrics_desc[metric] + diff_text
 156          + ' for ' + func_name
 157          + ' is ' + child_metric_val + " <br>";
 158  
 159        s += "which is " + child_metric_pct_val + " of the inclusive "
 160          + metrics_desc[metric]
 161          + diff_text + " for " + func_name + " (" + metric_val + ").";
 162  
 163      } else {
 164  
 165        s += child_func + ' when called from ' + func_name
 166          + ' takes ' + stringAbs(child_metric_val)
 167          + (diff_mode ? (isNegative(child_metric_val) ? " less" : " more") : "")
 168          + " of " + metrics_desc[metric] + " <br>";
 169  
 170        s += "which is " + child_metric_pct_val + " of the inclusive "
 171          + metrics_desc[metric]
 172          + diff_text + " for " + func_name + " (" + metric_val + ").";
 173      }
 174    }
 175  
 176    s += '</center>';
 177  
 178    return s;
 179  }
 180  
 181  $(document).ready(function() {
 182    $('td[@metric]').tooltip(
 183      { bodyHandler: function() {
 184            var type = $(this).attr('type');
 185            var metric = $(this).attr('metric');
 186            if (type == 'Parent') {
 187               return ParentRowToolTip(this, metric);
 188            } else if (type == 'Child') {
 189               return ChildRowToolTip(this, metric);
 190            }
 191        },
 192        showURL : false
 193      });
 194    var cur_params = {} ;
 195    $.each(location.search.replace('?','').split('&'), function(i, x) {
 196      var y = x.split('='); cur_params[y[0]] = y[1];
 197    });
 198    $('input.function_typeahead')
 199      .autocomplete('typeahead.php', { extraParams : cur_params })
 200      .result(function(event, item) {
 201        cur_params['symbol'] = item;
 202        location.search = '?' + jQuery.param(cur_params);
 203      });
 204  });


Generated: Thu Aug 11 10:00:09 2016 Cross-referenced by PHPXref 0.7.1