static long long stat_major_blocks_lazy_swept = 0;
static long long stat_major_objects_evacuated = 0;
+static long long num_major_objects_marked = 0;
+
+#ifdef SGEN_COUNT_NUMBER_OF_MAJOR_OBJECTS_MARKED
+#define INC_NUM_MAJOR_OBJECTS_MARKED() (++num_major_objects_marked)
+#else
+#define INC_NUM_MAJOR_OBJECTS_MARKED()
+#endif
+
static void
sweep_block (MSBlockInfo *block);
MS_CALC_MARK_BIT (word, bit, obj);
MS_SET_MARK_BIT (block, word, bit);
binary_protocol_mark (obj, NULL, size);
+ INC_NUM_MAJOR_OBJECTS_MARKED ();
}
#endif
if ((block)->has_references) \
GRAY_OBJECT_ENQUEUE ((queue), (obj)); \
binary_protocol_mark ((obj), (gpointer)LOAD_VTABLE ((obj)), sgen_safe_object_get_size ((MonoObject*)(obj))); \
+ INC_NUM_MAJOR_OBJECTS_MARKED (); \
} \
} while (0)
#define MS_MARK_OBJECT_AND_ENQUEUE(obj,block,queue) do { \
if ((block)->has_references) \
GRAY_OBJECT_ENQUEUE ((queue), (obj)); \
binary_protocol_mark ((obj), (gpointer)LOAD_VTABLE ((obj)), sgen_safe_object_get_size ((MonoObject*)(obj))); \
+ INC_NUM_MAJOR_OBJECTS_MARKED (); \
} \
} while (0)
#define MS_PAR_MARK_OBJECT_AND_ENQUEUE(obj,block,queue) do { \
if ((block)->has_references) \
GRAY_OBJECT_ENQUEUE ((queue), (obj)); \
binary_protocol_mark ((obj), (gpointer)LOAD_VTABLE ((obj)), sgen_safe_object_get_size ((MonoObject*)(obj))); \
+ INC_NUM_MAJOR_OBJECTS_MARKED (); \
} \
} while (0)
sgen_los_pin_object (obj);
/* FIXME: only enqueue if object has references */
GRAY_OBJECT_ENQUEUE (queue, obj);
+ INC_NUM_MAJOR_OBJECTS_MARKED ();
}
}
}
#endif
#endif
+#ifdef SGEN_CONCURRENT_MARK
+static long long
+major_get_and_reset_num_major_objects_marked (void)
+{
+ long long num = num_major_objects_marked;
+ num_major_objects_marked = 0;
+ return num;
+}
+#endif
+
#include "sgen-major-scan-object.h"
static void
#endif
#ifdef SGEN_CONCURRENT_MARK
collector->is_concurrent = TRUE;
+ collector->get_and_reset_num_major_objects_marked = major_get_and_reset_num_major_objects_marked;
#else
collector->is_concurrent = FALSE;
#endif