[ Index ] |
PHP Cross Reference of Unnamed Project |
[Summary view] [Print] [Text view]
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 });
title
Description
Body
title
Description
Body
title
Description
Body
title
Body
Generated: Thu Aug 11 10:00:09 2016 | Cross-referenced by PHPXref 0.7.1 |