forked from preinheimer/xhprof
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge branch 'master' of git://github.com/preinheimer/xhprof
- Loading branch information
Showing
11 changed files
with
2,246 additions
and
1,790 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,13 +1,13 @@ | ||
<?php | ||
if (extension_loaded('xhprof') && $_xhprof['doprofile'] === true) { | ||
$profiler_namespace = $_xhprof['namespace']; // namespace for your application | ||
$xhprof_data = xhprof_disable(); | ||
$xhprof_runs = new XHProfRuns_Default(); | ||
$run_id = $xhprof_runs->save_run($xhprof_data, $profiler_namespace, null, $_xhprof); | ||
if ($_xhprof['display'] === true) | ||
{ | ||
// url to the XHProf UI libraries (change the host name and path) | ||
$profiler_url = sprintf($_xhprof['url'].'/index.php?run=%s&source=%s', $run_id, $profiler_namespace); | ||
echo '<a href="'. $profiler_url .'" target="_blank">Profiler output</a>'; | ||
} | ||
} | ||
<?php | ||
if (extension_loaded('xhprof') && $_xhprof['doprofile'] === true) { | ||
$profiler_namespace = $_xhprof['namespace']; // namespace for your application | ||
$xhprof_data = xhprof_disable(); | ||
$xhprof_runs = new XHProfRuns_Default(); | ||
$run_id = $xhprof_runs->save_run($xhprof_data, $profiler_namespace, null, $_xhprof); | ||
if ($_xhprof['display'] === true) | ||
{ | ||
// url to the XHProf UI libraries (change the host name and path) | ||
$profiler_url = sprintf($_xhprof['url'].'/index.php?run=%s&source=%s', $run_id, $profiler_namespace); | ||
echo '<a href="'. $profiler_url .'" target="_blank">Profiler output</a>'; | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,67 +1,67 @@ | ||
<?php | ||
include(dirname(__FILE__) . '/..//xhprof_lib/config.php'); | ||
|
||
//User has control, and is attempting to modify profiling parameters | ||
if(in_array($_SERVER['REMOTE_ADDR'], $controlIPs) && isset($_GET['_profile'])) | ||
{ | ||
//Give them a cookie to hold status, and redirect back to the same page | ||
setcookie('_profile', $_GET['_profile']); | ||
$newURI = str_replace(array('_profile=1','_profile=0'), '', $_SERVER['REQUEST_URI']); | ||
header("Location: $newURI"); | ||
exit; | ||
} | ||
|
||
|
||
// Only users from authorized IP addresses may control Profiling | ||
if (in_array($_SERVER['REMOTE_ADDR'], $controlIPs) && (isset($_COOKIE['_profile']) && $_COOKIE['_profile'])) | ||
{ | ||
$_xhprof['display'] = true; | ||
$_xhprof['doprofile'] = true; | ||
$_xhprof['type'] = 1; | ||
} | ||
|
||
//Certain URLs should never have a link displayed. Think images, xml, etc. | ||
foreach($exceptionURLs as $url) | ||
{ | ||
if (stripos($_SERVER['REQUEST_URI'], $url) !== FALSE) | ||
{ | ||
$_xhprof['display'] = false; | ||
header('X-XHProf-No-Display: Trueness'); | ||
break; | ||
} | ||
} | ||
unset($exceptionURLs); | ||
|
||
//Certain urls should have their POST data omitted. Think login forms, other privlidged info | ||
$_xhprof['savepost'] = true; | ||
foreach ($exceptionPostURLs as $url) | ||
{ | ||
if (stripos($_SERVER['REQUEST_URI'], $url) !== FALSE) | ||
{ | ||
$_xhprof['savepost'] = false; | ||
break; | ||
} | ||
} | ||
unset($exceptionPostURLs); | ||
|
||
//Determine wether or not to profile this URL randomly | ||
if ($_xhprof['doprofile'] === false) | ||
{ | ||
//Profile weighting, one in one hundred requests will be profiled without being specifically requested | ||
if (rand(1, $weight) == 1) | ||
{ | ||
$_xhprof['doprofile'] = true; | ||
$_xhprof['type'] = 0; | ||
} | ||
} | ||
unset($weight); | ||
|
||
//Display warning if extension not available | ||
if (extension_loaded('xhprof') && $_xhprof['doprofile'] === true) { | ||
include_once dirname(__FILE__) . '/../xhprof_lib/utils/xhprof_lib.php'; | ||
include_once dirname(__FILE__) . '/../xhprof_lib/utils/xhprof_runs.php'; | ||
xhprof_enable(XHPROF_FLAGS_CPU + XHPROF_FLAGS_MEMORY); | ||
}elseif(!extension_loaded('xhprof') && $_xhprof['display'] === true) | ||
{ | ||
echo "Warning! Unable to profile run, xhprof extension not loaded\n"; | ||
} | ||
<?php | ||
include(dirname(__FILE__) . '/..//xhprof_lib/config.php'); | ||
|
||
//User has control, and is attempting to modify profiling parameters | ||
if(in_array($_SERVER['REMOTE_ADDR'], $controlIPs) && isset($_GET['_profile'])) | ||
{ | ||
//Give them a cookie to hold status, and redirect back to the same page | ||
setcookie('_profile', $_GET['_profile']); | ||
$newURI = str_replace(array('_profile=1','_profile=0'), '', $_SERVER['REQUEST_URI']); | ||
header("Location: $newURI"); | ||
exit; | ||
} | ||
|
||
|
||
// Only users from authorized IP addresses may control Profiling | ||
if (in_array($_SERVER['REMOTE_ADDR'], $controlIPs) && (isset($_COOKIE['_profile']) && $_COOKIE['_profile'])) | ||
{ | ||
$_xhprof['display'] = true; | ||
$_xhprof['doprofile'] = true; | ||
$_xhprof['type'] = 1; | ||
} | ||
|
||
//Certain URLs should never have a link displayed. Think images, xml, etc. | ||
foreach($exceptionURLs as $url) | ||
{ | ||
if (stripos($_SERVER['REQUEST_URI'], $url) !== FALSE) | ||
{ | ||
$_xhprof['display'] = false; | ||
header('X-XHProf-No-Display: Trueness'); | ||
break; | ||
} | ||
} | ||
unset($exceptionURLs); | ||
|
||
//Certain urls should have their POST data omitted. Think login forms, other privlidged info | ||
$_xhprof['savepost'] = true; | ||
foreach ($exceptionPostURLs as $url) | ||
{ | ||
if (stripos($_SERVER['REQUEST_URI'], $url) !== FALSE) | ||
{ | ||
$_xhprof['savepost'] = false; | ||
break; | ||
} | ||
} | ||
unset($exceptionPostURLs); | ||
|
||
//Determine wether or not to profile this URL randomly | ||
if ($_xhprof['doprofile'] === false) | ||
{ | ||
//Profile weighting, one in one hundred requests will be profiled without being specifically requested | ||
if (rand(1, $weight) == 1) | ||
{ | ||
$_xhprof['doprofile'] = true; | ||
$_xhprof['type'] = 0; | ||
} | ||
} | ||
unset($weight); | ||
|
||
//Display warning if extension not available | ||
if (extension_loaded('xhprof') && $_xhprof['doprofile'] === true) { | ||
include_once dirname(__FILE__) . '/../xhprof_lib/utils/xhprof_lib.php'; | ||
include_once dirname(__FILE__) . '/../xhprof_lib/utils/xhprof_runs.php'; | ||
xhprof_enable(XHPROF_FLAGS_CPU + XHPROF_FLAGS_MEMORY); | ||
}elseif(!extension_loaded('xhprof') && $_xhprof['display'] === true) | ||
{ | ||
echo "Warning! Unable to profile run, xhprof extension not loaded\n"; | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,97 +1,99 @@ | ||
<?php | ||
// Copyright (c) 2009 Facebook | ||
// | ||
// Licensed under the Apache License, Version 2.0 (the "License"); | ||
// you may not use this file except in compliance with the License. | ||
// You may obtain a copy of the License at | ||
// | ||
// http://www.apache.org/licenses/LICENSE-2.0 | ||
// | ||
// Unless required by applicable law or agreed to in writing, software | ||
// distributed under the License is distributed on an "AS IS" BASIS, | ||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||
// See the License for the specific language governing permissions and | ||
// limitations under the License. | ||
// | ||
|
||
/** | ||
* | ||
* A callgraph generator for XHProf. | ||
* | ||
* * This file is part of the UI/reporting component, | ||
* used for viewing results of XHProf runs from a | ||
* browser. | ||
* | ||
* Modification History: | ||
* 02/15/2008 - cjiang - The first version of callgraph visualizer | ||
* based on Graphviz's DOT tool. | ||
* | ||
* @author Changhao Jiang (cjiang@facebook.com) | ||
*/ | ||
require ("../xhprof_lib/config.php"); | ||
|
||
if (!in_array($_SERVER['REMOTE_ADDR'], $controlIPs)) | ||
{ | ||
die(); | ||
} | ||
|
||
// by default assume that xhprof_html & xhprof_lib directories | ||
// are at the same level. | ||
$GLOBALS['XHPROF_LIB_ROOT'] = dirname(__FILE__) . '/../xhprof_lib'; | ||
|
||
include_once $GLOBALS['XHPROF_LIB_ROOT'].'/display/xhprof.php'; | ||
|
||
ini_set('max_execution_time', 100); | ||
|
||
$params = array(// run id param | ||
'run' => array(XHPROF_STRING_PARAM, ''), | ||
|
||
// source/namespace/type of run | ||
'source' => array(XHPROF_STRING_PARAM, 'xhprof'), | ||
|
||
// the focus function, if it is set, only directly | ||
// parents/children functions of it will be shown. | ||
'func' => array(XHPROF_STRING_PARAM, ''), | ||
|
||
// image type, can be 'jpg', 'gif', 'ps', 'png' | ||
'type' => array(XHPROF_STRING_PARAM, 'png'), | ||
|
||
// only functions whose exclusive time over the total time | ||
// is larger than this threshold will be shown. | ||
// default is 0.01. | ||
'threshold' => array(XHPROF_FLOAT_PARAM, 0.01), | ||
|
||
// whether to show critical_path | ||
'critical' => array(XHPROF_BOOL_PARAM, true), | ||
|
||
// first run in diff mode. | ||
'run1' => array(XHPROF_STRING_PARAM, ''), | ||
|
||
// second run in diff mode. | ||
'run2' => array(XHPROF_STRING_PARAM, '') | ||
); | ||
|
||
// pull values of these params, and create named globals for each param | ||
xhprof_param_init($params); | ||
|
||
// if invalid value specified for threshold, then use the default | ||
if ($threshold < 0 || $threshold > 1) { | ||
$threshold = $params['threshold'][1]; | ||
} | ||
|
||
// if invalid value specified for type, use the default | ||
if (!array_key_exists($type, $xhprof_legal_image_types)) { | ||
$type = $params['type'][1]; // default image type. | ||
} | ||
|
||
$xhprof_runs_impl = new XHProfRuns_Default(); | ||
|
||
if (!empty($run)) { | ||
// single run call graph image generation | ||
xhprof_render_image($xhprof_runs_impl, $run, $type, | ||
$threshold, $func, $source, $critical); | ||
} else { | ||
// diff report call graph image generation | ||
xhprof_render_diff_image($xhprof_runs_impl, $run1, $run2, | ||
$type, $threshold, $source); | ||
} | ||
<?php | ||
// Copyright (c) 2009 Facebook | ||
// | ||
// Licensed under the Apache License, Version 2.0 (the "License"); | ||
// you may not use this file except in compliance with the License. | ||
// You may obtain a copy of the License at | ||
// | ||
// http://www.apache.org/licenses/LICENSE-2.0 | ||
// | ||
// Unless required by applicable law or agreed to in writing, software | ||
// distributed under the License is distributed on an "AS IS" BASIS, | ||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||
// See the License for the specific language governing permissions and | ||
// limitations under the License. | ||
// | ||
|
||
/** | ||
* | ||
* A callgraph generator for XHProf. | ||
* | ||
* * This file is part of the UI/reporting component, | ||
* used for viewing results of XHProf runs from a | ||
* browser. | ||
* | ||
* Modification History: | ||
* 02/15/2008 - cjiang - The first version of callgraph visualizer | ||
* based on Graphviz's DOT tool. | ||
* | ||
* @author Changhao Jiang (cjiang@facebook.com) | ||
*/ | ||
require ("../xhprof_lib/config.php"); | ||
|
||
if (!in_array($_SERVER['REMOTE_ADDR'], $controlIPs)) | ||
{ | ||
die(); | ||
} | ||
|
||
// by default assume that xhprof_html & xhprof_lib directories | ||
// are at the same level. | ||
if (!defined('XHPROF_LIB_ROOT')) { | ||
define('XHPROF_LIB_ROOT', dirname(dirname(__FILE__)) . '/xhprof_lib'; | ||
} | ||
|
||
include_once XHPROF_LIB_ROOT . '/display/xhprof.php'; | ||
|
||
ini_set('max_execution_time', 100); | ||
|
||
$params = array(// run id param | ||
'run' => array(XHPROF_STRING_PARAM, ''), | ||
|
||
// source/namespace/type of run | ||
'source' => array(XHPROF_STRING_PARAM, 'xhprof'), | ||
|
||
// the focus function, if it is set, only directly | ||
// parents/children functions of it will be shown. | ||
'func' => array(XHPROF_STRING_PARAM, ''), | ||
|
||
// image type, can be 'jpg', 'gif', 'ps', 'png' | ||
'type' => array(XHPROF_STRING_PARAM, 'png'), | ||
|
||
// only functions whose exclusive time over the total time | ||
// is larger than this threshold will be shown. | ||
// default is 0.01. | ||
'threshold' => array(XHPROF_FLOAT_PARAM, 0.01), | ||
|
||
// whether to show critical_path | ||
'critical' => array(XHPROF_BOOL_PARAM, true), | ||
|
||
// first run in diff mode. | ||
'run1' => array(XHPROF_STRING_PARAM, ''), | ||
|
||
// second run in diff mode. | ||
'run2' => array(XHPROF_STRING_PARAM, '') | ||
); | ||
|
||
// pull values of these params, and create named globals for each param | ||
xhprof_param_init($params); | ||
|
||
// if invalid value specified for threshold, then use the default | ||
if ($threshold < 0 || $threshold > 1) { | ||
$threshold = $params['threshold'][1]; | ||
} | ||
|
||
// if invalid value specified for type, use the default | ||
if (!array_key_exists($type, $xhprof_legal_image_types)) { | ||
$type = $params['type'][1]; // default image type. | ||
} | ||
|
||
$xhprof_runs_impl = new XHProfRuns_Default(); | ||
|
||
if (!empty($run)) { | ||
// single run call graph image generation | ||
xhprof_render_image($xhprof_runs_impl, $run, $type, | ||
$threshold, $func, $source, $critical); | ||
} else { | ||
// diff report call graph image generation | ||
xhprof_render_diff_image($xhprof_runs_impl, $run1, $run2, | ||
$type, $threshold, $source); | ||
} |
Oops, something went wrong.