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

Reply via email to