[dtrace] Probe for major heap area sweep.
authorMark Probst <mark.probst@gmail.com>
Sat, 22 Sep 2012 12:11:55 +0000 (14:11 +0200)
committerMark Probst <mark.probst@gmail.com>
Fri, 28 Sep 2012 21:18:17 +0000 (23:18 +0200)
data/mono.d
mono/metadata/sgen-marksweep.c

index 8479088c7329470844f26855e34a4b46c41ef5e8..7b00d5df017fddb998378e6ce87d3ebd25984a19 100644 (file)
@@ -32,6 +32,7 @@ provider mono {
        probe gc__major__obj__alloc__mature (void *addr, uintptr_t size, char *class_name);
 
        probe gc__nursery__sweeped (void *addr, uintptr_t len);
+       probe gc__major__sweeped (void *addr, uintptr_t len);
 };
 
 #pragma D attributes Evolving/Evolving/Common provider mono provider
index a3d52f7fd63752e553838684dd38ae0da52437e4..7d208d562f86c1f0a1a89085d31d9a3af0d7ce37 100644 (file)
@@ -1456,7 +1456,14 @@ ms_sweep (void)
                        } else {
                                /* an unmarked object */
                                if (MS_OBJ_ALLOCED (obj, block)) {
+                                       /*
+                                        * FIXME: Merge consecutive
+                                        * slots for lower reporting
+                                        * overhead.  Maybe memset
+                                        * will also benefit?
+                                        */
                                        binary_protocol_empty (obj, block->obj_size);
+                                       MONO_GC_MAJOR_SWEEPED (obj, block->obj_size);
                                        memset (obj, 0, block->obj_size);
                                }
                                *(void**)obj = block->free_list;