Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

upgraded xhprof to the latest version #1

Merged
merged 1 commit into from
Jun 4, 2013
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
59 changes: 52 additions & 7 deletions extension/xhprof.c
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@
#include "php_ini.h"
#include "ext/standard/info.h"
#include "php_xhprof.h"
#include "Zend/zend_extensions.h"
#include "zend_extensions.h"
#include <sys/time.h>
#include <sys/resource.h>
#include <stdlib.h>
Expand Down Expand Up @@ -233,12 +233,21 @@ typedef struct hp_global_t {
/* XHProf global state */
static hp_global_t hp_globals;

#if PHP_VERSION_ID < 50500
/* Pointer to the original execute function */
static ZEND_DLEXPORT void (*_zend_execute) (zend_op_array *ops TSRMLS_DC);

/* Pointer to the origianl execute_internal function */
static ZEND_DLEXPORT void (*_zend_execute_internal) (zend_execute_data *data,
int ret TSRMLS_DC);
#else
/* Pointer to the original execute function */
static void (*_zend_execute_ex) (zend_execute_data *execute_data TSRMLS_DC);

/* Pointer to the origianl execute_internal function */
static void (*_zend_execute_internal) (zend_execute_data *data,
struct _zend_fcall_info *fci, int ret TSRMLS_DC);
#endif

/* Pointer to the original compile function */
static zend_op_array * (*_zend_compile_file) (zend_file_handle *file_handle,
Expand Down Expand Up @@ -880,8 +889,8 @@ size_t hp_get_function_stack(hp_entry_t *entry,
* a pointer to one-level directory and basefile name
* (d/foo.php) in the same string.
*/
static char *hp_get_base_filename(char *filename) {
char *ptr;
static const char *hp_get_base_filename(const char *filename) {
const char *ptr;
int found = 0;

if (!filename)
Expand Down Expand Up @@ -909,7 +918,7 @@ static char *hp_get_base_filename(char *filename) {
*/
static char *hp_get_function_name(zend_op_array *ops TSRMLS_DC) {
zend_execute_data *data;
char *func = NULL;
const char *func = NULL;
const char *cls = NULL;
char *ret = NULL;
int len;
Expand Down Expand Up @@ -988,7 +997,7 @@ static char *hp_get_function_name(zend_op_array *ops TSRMLS_DC) {
* you'll see something like "run_init::foo.php" in your reports.
*/
if (add_filename){
char *filename;
const char *filename;
int len;
filename = hp_get_base_filename((curr_func->op_array).filename);
len = strlen("run_init") + strlen(filename) + 3;
Expand Down Expand Up @@ -1629,18 +1638,31 @@ void hp_mode_sampled_endfn_cb(hp_entry_t **entries TSRMLS_DC) {
*
* @author hzhao, kannan
*/
#if PHP_VERSION_ID < 50500
ZEND_DLEXPORT void hp_execute (zend_op_array *ops TSRMLS_DC) {
#else
ZEND_DLEXPORT void hp_execute_ex (zend_execute_data *execute_data TSRMLS_DC) {
zend_op_array *ops = execute_data->op_array;
#endif
char *func = NULL;
int hp_profile_flag = 1;

func = hp_get_function_name(ops TSRMLS_CC);
if (!func) {
#if PHP_VERSION_ID < 50500
_zend_execute(ops TSRMLS_CC);
#else
_zend_execute_ex(execute_data TSRMLS_CC);
#endif
return;
}

BEGIN_PROFILING(&hp_globals.entries, func, hp_profile_flag);
#if PHP_VERSION_ID < 50500
_zend_execute(ops TSRMLS_CC);
#else
_zend_execute_ex(execute_data TSRMLS_CC);
#endif
if (hp_globals.entries) {
END_PROFILING(&hp_globals.entries, hp_profile_flag);
}
Expand All @@ -1649,16 +1671,25 @@ ZEND_DLEXPORT void hp_execute (zend_op_array *ops TSRMLS_DC) {

#undef EX
#define EX(element) ((execute_data)->element)
#define EX_T(offset) (*(temp_variable *)((char *) EX(Ts) + offset))

/**
* Very similar to hp_execute. Proxy for zend_execute_internal().
* Applies to zend builtin functions.
*
* @author hzhao, kannan
*/

#if PHP_VERSION_ID < 50500
#define EX_T(offset) (*(temp_variable *)((char *) EX(Ts) + offset))

ZEND_DLEXPORT void hp_execute_internal(zend_execute_data *execute_data,
int ret TSRMLS_DC) {
#else
#define EX_T(offset) (*EX_TMP_VAR(execute_data, offset))

ZEND_DLEXPORT void hp_execute_internal(zend_execute_data *execute_data,
struct _zend_fcall_info *fci, int ret TSRMLS_DC) {
#endif
zend_execute_data *current_data;
char *func = NULL;
int hp_profile_flag = 1;
Expand Down Expand Up @@ -1691,7 +1722,11 @@ ZEND_DLEXPORT void hp_execute_internal(zend_execute_data *execute_data,
#endif
} else {
/* call the old override */
#if PHP_VERSION_ID < 50500
_zend_execute_internal(execute_data, ret TSRMLS_CC);
#else
_zend_execute_internal(execute_data, fci, ret TSRMLS_CC);
#endif
}

if (func) {
Expand All @@ -1711,7 +1746,7 @@ ZEND_DLEXPORT void hp_execute_internal(zend_execute_data *execute_data,
ZEND_DLEXPORT zend_op_array* hp_compile_file(zend_file_handle *file_handle,
int type TSRMLS_DC) {

char *filename;
const char *filename;
char *func;
int len;
zend_op_array *ret;
Expand Down Expand Up @@ -1783,8 +1818,13 @@ static void hp_begin(long level, long xhprof_flags TSRMLS_DC) {
zend_compile_string = hp_compile_string;

/* Replace zend_execute with our proxy */
#if PHP_VERSION_ID < 50500
_zend_execute = zend_execute;
zend_execute = hp_execute;
#else
_zend_execute_ex = zend_execute_ex;
zend_execute_ex = hp_execute_ex;
#endif

/* Replace zend_execute_internal with our proxy */
_zend_execute_internal = zend_execute_internal;
Expand Down Expand Up @@ -1855,9 +1895,14 @@ static void hp_stop(TSRMLS_D) {
}

/* Remove proxies, restore the originals */
#if PHP_VERSION_ID < 50500
zend_execute = _zend_execute;
#else
zend_execute_ex = _zend_execute_ex;
#endif
zend_execute_internal = _zend_execute_internal;
zend_compile_file = _zend_compile_file;
zend_compile_string = _zend_compile_string;

/* Resore cpu affinity. */
restore_cpu_affinity(&hp_globals.prev_mask);
Expand Down
14 changes: 14 additions & 0 deletions not_rsync_up
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
#############################
### Sync file
#############################
not_rsync_up
not_rsync_down
syncUpTest.sh
syncUp.sh
syncDownTest.sh
syncDown.sh
#############################
### File da escludere
#############################
.git
.gitignore
5 changes: 5 additions & 0 deletions syncUp.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
#/bin/sh
dir=${PWD##*/}
/usr/bin/rsync -carvut -e 'ssh' --progress --stats --exclude-from=not_rsync_up --delete \
./* \
/home/g4b0/Develop/SilverStripeModules/$dir
5 changes: 5 additions & 0 deletions syncUpTest.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
#/bin/sh
dir=${PWD##*/}
/usr/bin/rsync -ncarvut -e 'ssh' --progress --stats --exclude-from=not_rsync_up --delete \
./* \
/home/g4b0/Develop/SilverStripeModules/$dir
Loading