dsp Mon, 16 Nov 2009 03:10:25 +0000 Revision: http://svn.php.net/viewvc?view=revision&revision=290801
Log: Add object-create and object-destroy dtrace probe Changed paths: U php/php-src/trunk/Zend/zend_API.c U php/php-src/trunk/Zend/zend_dtrace.c U php/php-src/trunk/Zend/zend_dtrace.d U php/php-src/trunk/Zend/zend_dtrace.h U php/php-src/trunk/Zend/zend_objects.c U php/php-src/trunk/configure.in Modified: php/php-src/trunk/Zend/zend_API.c =================================================================== --- php/php-src/trunk/Zend/zend_API.c 2009-11-16 02:06:44 UTC (rev 290800) +++ php/php-src/trunk/Zend/zend_API.c 2009-11-16 03:10:25 UTC (rev 290801) @@ -27,6 +27,7 @@ #include "zend_constants.h" #include "zend_exceptions.h" #include "zend_closures.h" +#include "zend_dtrace.h" #ifdef HAVE_STDARG_H #include <stdarg.h> @@ -1351,6 +1352,23 @@ zend_error(E_ERROR, "Cannot instantiate %s %v", what, class_type->name); } +#ifdef HAVE_DTRACE + if (DTRACE_OBJECT_CREATE_ENABLED()) { + char *s_classname, *filename; + int s_classname_len, lineno; + + filename = dtrace_get_executed_filename(TSRMLS_C); + lineno = zend_get_executed_lineno(TSRMLS_C); + if (u_strlen(class_type->name.u) > 0) { + zend_unicode_to_string(ZEND_U_CONVERTER(UG(utf8_conv)), &s_classname, &s_classname_len, class_type->name.u, u_strlen(class_type->name.u) TSRMLS_CC); + } + DTRACE_OBJECT_CREATE(s_classname, filename, lineno); + if (s_classname != NULL) { + efree(s_classname); + } + } +#endif /* HAVE_DTRACE */ + zend_update_class_constants(class_type TSRMLS_CC); Z_TYPE_P(arg) = IS_OBJECT; Modified: php/php-src/trunk/Zend/zend_dtrace.c =================================================================== --- php/php-src/trunk/Zend/zend_dtrace.c 2009-11-16 02:06:44 UTC (rev 290800) +++ php/php-src/trunk/Zend/zend_dtrace.c 2009-11-16 03:10:25 UTC (rev 290801) @@ -24,7 +24,7 @@ #ifdef HAVE_DTRACE /* PHP DTrace probes {{{ */ -static inline char *dtrace_get_executed_filename(TSRMLS_D) +ZEND_API char *dtrace_get_executed_filename(TSRMLS_D) { if (EG(current_execute_data) && EG(current_execute_data)->op_array) { return EG(current_execute_data)->op_array->filename; Modified: php/php-src/trunk/Zend/zend_dtrace.d =================================================================== --- php/php-src/trunk/Zend/zend_dtrace.d 2009-11-16 02:06:44 UTC (rev 290800) +++ php/php-src/trunk/Zend/zend_dtrace.d 2009-11-16 03:10:25 UTC (rev 290801) @@ -30,6 +30,8 @@ probe execute__return(char* request_file, int lineno); probe function__entry(char* function_name, char* request_file, int lineno, char* classname, char* scope); probe function__return(char* function_name, char* request_file, int lineno, char* classname, char* scope); + probe object__create(char *classname, char* request_file, int lineno); + probe object__destroy(char *classname, char* request_file, int lineno); }; #pragma D attributes Evolving/Evolving/Common provider php provider Modified: php/php-src/trunk/Zend/zend_dtrace.h =================================================================== --- php/php-src/trunk/Zend/zend_dtrace.h 2009-11-16 02:06:44 UTC (rev 290800) +++ php/php-src/trunk/Zend/zend_dtrace.h 2009-11-16 03:10:25 UTC (rev 290801) @@ -37,6 +37,7 @@ ZEND_API zend_op_array *dtrace_compile_file(zend_file_handle *file_handle, int type TSRMLS_DC); ZEND_API void dtrace_execute(zend_op_array *op_array TSRMLS_DC); ZEND_API void dtrace_execute_internal(zend_execute_data *execute_data_ptr, int return_value_used TSRMLS_DC); +ZEND_API char *dtrace_get_executed_filename(TSRMLS_D); #include <zend_dtrace_gen.h> #endif /* HAVE_DTRACE */ Modified: php/php-src/trunk/Zend/zend_objects.c =================================================================== --- php/php-src/trunk/Zend/zend_objects.c 2009-11-16 02:06:44 UTC (rev 290800) +++ php/php-src/trunk/Zend/zend_objects.c 2009-11-16 03:10:25 UTC (rev 290801) @@ -25,6 +25,7 @@ #include "zend_API.h" #include "zend_interfaces.h" #include "zend_exceptions.h" +#include "zend_dtrace.h" ZEND_API void zend_object_std_init(zend_object *object, zend_class_entry *ce TSRMLS_DC) /* {{{ */ { @@ -53,6 +54,22 @@ { zend_function *destructor = object ? object->ce->destructor : NULL; +#ifdef HAVE_DTRACE + if (DTRACE_OBJECT_DESTROY_ENABLED()) { + char *s_classname, *filename; + int s_classname_len, lineno; + + filename = dtrace_get_executed_filename(TSRMLS_C); + lineno = zend_get_executed_lineno(TSRMLS_C); + if (u_strlen(object->ce->name.u) > 0) { + zend_unicode_to_string(ZEND_U_CONVERTER(UG(utf8_conv)), &s_classname, &s_classname_len, object->ce->name.u, u_strlen(object->ce->name.u) TSRMLS_CC); + } + DTRACE_OBJECT_DESTROY(s_classname, filename, lineno); + if (s_classname != NULL) { + efree(s_classname); + } + } +#endif /* HAVE_DTRACE */ if (destructor) { zval *obj; zend_object_store_bucket *obj_bucket; Modified: php/php-src/trunk/configure.in =================================================================== --- php/php-src/trunk/configure.in 2009-11-16 02:06:44 UTC (rev 290800) +++ php/php-src/trunk/configure.in 2009-11-16 03:10:25 UTC (rev 290801) @@ -896,7 +896,7 @@ if test "$PHP_DTRACE" = "yes"; then AC_CHECK_HEADERS([sys/sdt.h], [PHP_ADD_DTRACE([Zend/zend_dtrace.d], [main/main.c, Zend/zend_API.c \ - Zend/zend_execute.c Zend/zend_exceptions.c \ + Zend/zend_execute.c Zend/zend_exceptions.c Zend/zend_objects.c \ Zend/zend_dtrace.c Zend/zend.c]) PHP_INIT_DTRACE([Zend/zend_dtrace.d], [Zend/zend_dtrace_gen.h]) AC_DEFINE(HAVE_DTRACE, 1, [Whether to enable DTrace support])],
-- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php