Browse files

initial version 0.9.0 from source

git-svn-id: c90b9560-bf6c-de11-be94-00142212c4b1
  • Loading branch information...
1 parent 041febb commit 58f6d12cdea501b96ea26172e363eb3a5aa2433a kannan committed Mar 17, 2009
@@ -0,0 +1,56 @@
+Modification History:
+ 03/02/2008 kannan, checkin xhprof_html/ and xhprof_lib/ directories.
+ cjiang [These contain PHP sources for the UI as well
+ as various supporting libraries to compute
+ "flat" info, diff reports, aggregate results
+ of multiple runs, typeahead support, etc.]
+ 02/20/2008 kannan add basic sanity tests for the extension
+ 02/19/2008 kannan register constants for optional profiler flags;
+ add xhprof.output_dir ini setting.
+ 01/22/2008 ps port cpu affinity functions to FreeBSD
+ 01/15/2008 kannan intercept builtins even if zend_execute_internal
+ were null to begin with
+ 01/14/2008 kannan track builtins by default;
+ fix compiler warnings with fwd decls
+ 12/22/2008 cjiang Further refactoring of the code for open sourcing:
+ (1). Remove level 1 profiling mode.
+ (2). Add xhprof_sample_enable, xhprof_sample_disable.
+ (3). Unifiy function and global variable prefix.
+ (4). Group relevant functions together.
+ (5). Migrate change history to CHANAGELOG file.
+ 12/19/2008 kannan First step refactoring for open sourcing:
+ (1). Put basic direcotry structure
+ (2). Rename extension and function names
+ (3). Add LICENCE header.
+ 06/17/2008 veeve use cycle_timer() for XHPROF_MODE_SAMPLED
+ 03/27/2008 cjiang Add a 'hash-based' filter to reduce the number
+ of expensive call-stack tranversal on recursion
+ detection.
+ 03/17/2008 kannan must not keep state on C stack to handle
+ exit (which causes _zend_bailout to longjmp
+ 02/25/2008 kannan add xhprof_flags to toggle various metric
+ collections (buitins on/off, cpu metric on/off
+ memory stats on/off)
+ 02/14/2008 cjiang Use cycle_timer based on 'rdtsc' instruction
+ on x86 machines to replace gettimeofday. rdtsc
+ is extremely cheap compared with gettimeofday
+ or getrusage.
+ 12/06/2007 veeve bump version 1.1.2,
+ added hp_global_t
+ added mode callbacks, made modes extensible
+ added sampler mode
+ 12/05/2007 veeve added doc; house cleaning
+ 11/28/2007 kannan split include accounting into load/run_init
+ 11/09/2007 kannan memory usage profiling
+ 10/27/2007 kannan handle recursive calls, "include" operations
+ 10/20/2007 kannan add hierarchical profiling; incl vs. exclusive
+ function times; browser based UI; diff and
+ aggregation support
+ 10/10/2007 hzhao creation (flat function profiles)
+ Haiping Zhao
+ Kannan Muthukkaruppan
+ Venkat Venkataramani
+ Changhao Jiang
@@ -0,0 +1,177 @@
+ Apache License
+ Version 2.0, January 2004
+ 1. Definitions.
+ "License" shall mean the terms and conditions for use, reproduction,
+ and distribution as defined by Sections 1 through 9 of this document.
+ "Licensor" shall mean the copyright owner or entity authorized by
+ the copyright owner that is granting the License.
+ "Legal Entity" shall mean the union of the acting entity and all
+ other entities that control, are controlled by, or are under common
+ control with that entity. For the purposes of this definition,
+ "control" means (i) the power, direct or indirect, to cause the
+ direction or management of such entity, whether by contract or
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
+ outstanding shares, or (iii) beneficial ownership of such entity.
+ "You" (or "Your") shall mean an individual or Legal Entity
+ exercising permissions granted by this License.
+ "Source" form shall mean the preferred form for making modifications,
+ including but not limited to software source code, documentation
+ source, and configuration files.
+ "Object" form shall mean any form resulting from mechanical
+ transformation or translation of a Source form, including but
+ not limited to compiled object code, generated documentation,
+ and conversions to other media types.
+ "Work" shall mean the work of authorship, whether in Source or
+ Object form, made available under the License, as indicated by a
+ copyright notice that is included in or attached to the work
+ (an example is provided in the Appendix below).
+ "Derivative Works" shall mean any work, whether in Source or Object
+ form, that is based on (or derived from) the Work and for which the
+ editorial revisions, annotations, elaborations, or other modifications
+ represent, as a whole, an original work of authorship. For the purposes
+ of this License, Derivative Works shall not include works that remain
+ separable from, or merely link (or bind by name) to the interfaces of,
+ the Work and Derivative Works thereof.
+ "Contribution" shall mean any work of authorship, including
+ the original version of the Work and any modifications or additions
+ to that Work or Derivative Works thereof, that is intentionally
+ submitted to Licensor for inclusion in the Work by the copyright owner
+ or by an individual or Legal Entity authorized to submit on behalf of
+ the copyright owner. For the purposes of this definition, "submitted"
+ means any form of electronic, verbal, or written communication sent
+ to the Licensor or its representatives, including but not limited to
+ communication on electronic mailing lists, source code control systems,
+ and issue tracking systems that are managed by, or on behalf of, the
+ Licensor for the purpose of discussing and improving the Work, but
+ excluding communication that is conspicuously marked or otherwise
+ designated in writing by the copyright owner as "Not a Contribution."
+ "Contributor" shall mean Licensor and any individual or Legal Entity
+ on behalf of whom a Contribution has been received by Licensor and
+ subsequently incorporated within the Work.
+ 2. Grant of Copyright License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ copyright license to reproduce, prepare Derivative Works of,
+ publicly display, publicly perform, sublicense, and distribute the
+ Work and such Derivative Works in Source or Object form.
+ 3. Grant of Patent License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ (except as stated in this section) patent license to make, have made,
+ use, offer to sell, sell, import, and otherwise transfer the Work,
+ where such license applies only to those patent claims licensable
+ by such Contributor that are necessarily infringed by their
+ Contribution(s) alone or by combination of their Contribution(s)
+ with the Work to which such Contribution(s) was submitted. If You
+ institute patent litigation against any entity (including a
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
+ or a Contribution incorporated within the Work constitutes direct
+ or contributory patent infringement, then any patent licenses
+ granted to You under this License for that Work shall terminate
+ as of the date such litigation is filed.
+ 4. Redistribution. You may reproduce and distribute copies of the
+ Work or Derivative Works thereof in any medium, with or without
+ modifications, and in Source or Object form, provided that You
+ meet the following conditions:
+ (a) You must give any other recipients of the Work or
+ Derivative Works a copy of this License; and
+ (b) You must cause any modified files to carry prominent notices
+ stating that You changed the files; and
+ (c) You must retain, in the Source form of any Derivative Works
+ that You distribute, all copyright, patent, trademark, and
+ attribution notices from the Source form of the Work,
+ excluding those notices that do not pertain to any part of
+ the Derivative Works; and
+ (d) If the Work includes a "NOTICE" text file as part of its
+ distribution, then any Derivative Works that You distribute must
+ include a readable copy of the attribution notices contained
+ within such NOTICE file, excluding those notices that do not
+ pertain to any part of the Derivative Works, in at least one
+ of the following places: within a NOTICE text file distributed
+ as part of the Derivative Works; within the Source form or
+ documentation, if provided along with the Derivative Works; or,
+ within a display generated by the Derivative Works, if and
+ wherever such third-party notices normally appear. The contents
+ of the NOTICE file are for informational purposes only and
+ do not modify the License. You may add Your own attribution
+ notices within Derivative Works that You distribute, alongside
+ or as an addendum to the NOTICE text from the Work, provided
+ that such additional attribution notices cannot be construed
+ as modifying the License.
+ You may add Your own copyright statement to Your modifications and
+ may provide additional or different license terms and conditions
+ for use, reproduction, or distribution of Your modifications, or
+ for any such Derivative Works as a whole, provided Your use,
+ reproduction, and distribution of the Work otherwise complies with
+ the conditions stated in this License.
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
+ any Contribution intentionally submitted for inclusion in the Work
+ by You to the Licensor shall be under the terms and conditions of
+ this License, without any additional terms or conditions.
+ Notwithstanding the above, nothing herein shall supersede or modify
+ the terms of any separate license agreement you may have executed
+ with Licensor regarding such Contributions.
+ 6. Trademarks. This License does not grant permission to use the trade
+ names, trademarks, service marks, or product names of the Licensor,
+ except as required for reasonable and customary use in describing the
+ origin of the Work and reproducing the content of the NOTICE file.
+ 7. Disclaimer of Warranty. Unless required by applicable law or
+ agreed to in writing, Licensor provides the Work (and each
+ Contributor provides its Contributions) on an "AS IS" BASIS,
+ implied, including, without limitation, any warranties or conditions
+ PARTICULAR PURPOSE. You are solely responsible for determining the
+ appropriateness of using or redistributing the Work and assume any
+ risks associated with Your exercise of permissions under this License.
+ 8. Limitation of Liability. In no event and under no legal theory,
+ whether in tort (including negligence), contract, or otherwise,
+ unless required by applicable law (such as deliberate and grossly
+ negligent acts) or agreed to in writing, shall any Contributor be
+ liable to You for damages, including any direct, indirect, special,
+ incidental, or consequential damages of any character arising as a
+ result of this License or out of the use or inability to use the
+ Work (including but not limited to damages for loss of goodwill,
+ work stoppage, computer failure or malfunction, or any and all
+ other commercial damages or losses), even if such Contributor
+ has been advised of the possibility of such damages.
+ 9. Accepting Warranty or Additional Liability. While redistributing
+ the Work or Derivative Works thereof, You may choose to offer,
+ and charge a fee for, acceptance of support, warranty, indemnity,
+ or other liability obligations and/or rights consistent with this
+ License. However, in accepting such obligations, You may act only
+ on Your own behalf and on Your sole responsibility, not on behalf
+ of any other Contributor, and only if You agree to indemnify,
+ defend, and hold each Contributor harmless for any liability
+ incurred by, or claims asserted against, such Contributor by reason
+ of your accepting any such warranty or additional liability.
@@ -0,0 +1,2 @@
+For installation and usage notes refer to:
+ xhprof_html/docs/index.html
@@ -0,0 +1,44 @@
+function bar($x) {
+ if ($x > 0) {
+ bar($x - 1);
+ }
+function foo() {
+ for ($idx = 0; $idx < 5; $idx++) {
+ bar($idx);
+ $x = strlen("abc");
+ }
+// start profiling
+// run program
+// stop profiler
+$xhprof_data = xhprof_disable();
+// display raw xhprof data for the profiler run
+$XHPROF_ROOT = realpath(dirname(__FILE__) .'/..');
+include_once $XHPROF_ROOT . "/xhprof_lib/utils/xhprof_lib.php";
+include_once $XHPROF_ROOT . "/xhprof_lib/utils/xhprof_runs.php";
+// save raw data for this profiler run using default
+// implementation of iXHProfRuns.
+$xhprof_runs = new XHProfRuns_Default();
+// save the run under a namespace "xhprof_foo"
+$run_id = $xhprof_runs->save_run($xhprof_data, "xhprof_foo");
+echo "---------------\n".
+ "Assuming you have set up the http based UI for \n".
+ "XHProf at some address, you can view run at \n".
+ "http://<xhprof-ui-address>/index.php?run=$run_id&source=xhprof_foo\n".
+ "---------------\n";
@@ -0,0 +1,7 @@
+PHP_ARG_ENABLE(xhprof, whether to enable xhprof support,
+[ --enable-xhprof Enable xhprof support])
+if test "$PHP_XHPROF" != "no"; then
+ PHP_NEW_EXTENSION(xhprof, xhprof.c, $ext_shared)
@@ -0,0 +1,45 @@
+ * 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
+ *
+ *
+ *
+ * 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.
+ *
+ */
+#ifndef PHP_XHPROF_H
+#define PHP_XHPROF_H
+extern zend_module_entry xhprof_module_entry;
+#define phpext_xhprof_ptr &xhprof_module_entry
+#ifdef PHP_WIN32
+#define PHP_XHPROF_API __declspec(dllexport)
+#ifdef ZTS
+#include "TSRM.h"
+#endif /* PHP_XHPROF_H */
@@ -0,0 +1,35 @@
+ * Print xhprof raw data (essentially a callgraph) in a canonical style,
+ * so that even if the ordering of things within the raw_data (which is
+ * an associative array) changes in future implementations the output
+ * remains stable.
+ *
+ * Also, suppress output of variable quantities (such as time, memory)
+ * so that reference output of tests doesn't need any additional masking.
+ *
+ * @author Kannan
+ */
+function print_canonical($xhprof_data) {
+ ksort($xhprof_data);
+ foreach($xhprof_data as $func => $metrics) {
+ echo str_pad($func, 40) . ":";
+ ksort($metrics);
+ foreach ($metrics as $name => $value) {
+ // Only call counts are stable.
+ // Wild card everything else. We still print
+ // the metric name to ensure it was collected.
+ if ($name != "ct") {
+ $value = "*";
+ } else {
+ $value = str_pad($value, 8, " ", STR_PAD_LEFT);
+ }
+ echo " {$name}={$value};";
+ }
+ echo "\n";
+ }
Oops, something went wrong.

0 comments on commit 58f6d12

Please sign in to comment.