[sgen] DTrace probe for cementing objects.
authorMark Probst <mark.probst@gmail.com>
Thu, 24 Jan 2013 22:47:06 +0000 (23:47 +0100)
committerMark Probst <mark.probst@gmail.com>
Thu, 24 Jan 2013 22:47:06 +0000 (23:47 +0100)
data/mono.d
mono/metadata/sgen-pinning.c
mono/utils/dtrace.h

index 9558067f464f1283941eb54d7788bce6f2262773..e74ff82054f1786676ee49863347175130f5d383 100644 (file)
@@ -73,6 +73,7 @@ provider mono {
        probe gc__weak__update (uintptr_t ref_addr, uintptr_t old_addr, uintptr_t new_addr, uintptr_t size, char *ns_name, char *class_name, int track);
 
        probe gc__global__remset__add (uintptr_t ref_addr, uintptr_t obj_addr, uintptr_t size, char *ns_name, char *class_name);
+       probe gc__obj__cemented (uintptr_t addr, uintptr_t size, char *ns_name, char *class_name);
 };
 
 #pragma D attributes Evolving/Evolving/Common provider mono provider
index 514e61c974a81817144958bed4a2a5ccd34056b4..cd7eeaa1e6df4bebc6f13476ec1155a90cbe02ee 100644 (file)
@@ -303,12 +303,17 @@ sgen_cement_lookup_or_register (char *obj, gboolean concurrent_cementing)
                return TRUE;
 
        ++hash [i].count;
-#ifdef SGEN_BINARY_PROTOCOL
        if (hash [i].count == SGEN_CEMENT_THRESHOLD) {
+               if (G_UNLIKELY (MONO_GC_OBJ_CEMENTED_ENABLED())) {
+                       MonoVTable *vt = (MonoVTable*)SGEN_LOAD_VTABLE (obj);
+                       MONO_GC_OBJ_CEMENTED ((mword)obj, sgen_safe_object_get_size ((MonoObject*)obj),
+                                       vt->klass->name_space, vt->klass->name);
+               }
+#ifdef SGEN_BINARY_PROTOCOL
                binary_protocol_cement (obj, (gpointer)SGEN_LOAD_VTABLE (obj),
                                sgen_safe_object_get_size ((MonoObject*)obj));
-       }
 #endif
+       }
 
        return FALSE;
 }
index 377763c9d8feb391a47c6000dc1eea776fc1e41e..feb356f870f04ef981688d562d25c9f72e14ae9d 100644 (file)
 #define MONO_GC_GLOBAL_REMSET_ADD(ref_addr,obj_addr,size,ns_name,class_name)
 #define MONO_GC_GLOBAL_REMSET_ADD_ENABLED()    (0)
 
+#define MONO_GC_OBJ_CEMENTED(addr,size,ns_name,class_name)
+#define MONO_GC_OBJ_CEMENTED_ENABLED() (0)
+
 #endif
 
 #endif