summaryrefslogtreecommitdiff
path: root/ext/-test-
diff options
context:
space:
mode:
authorko1 <ko1@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2013-05-27 15:40:27 +0000
committerko1 <ko1@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2013-05-27 15:40:27 +0000
commite4c58251b736ba362774b24787dff672fd3ee41b (patch)
tree76b15521dd4ced2bea3af4b5bb552a4d3d3b506e /ext/-test-
parentc5b6c189d2933a030e68cc410b4e2deb255bba1a (diff)
* include/ruby/ruby.h, gc.c: add new internal event
RUBY_INTERNAL_EVENT_GC_END. This event invokes at the end of after_sweep(). Time chart with lazy sweep is here: (1) Kick RUBY_INTERNAL_EVENT_GC_START (2) [gc_marks()] (3) [lazy_sweep()] (4) [... run Ruby program (mutator) with lazy_sweep() ...] (5) [after_sweep()] (6) Kick RUBY_INTERNAL_EVENT_GC_END (7) [... run Ruby program (mutator), and go to (1) ...] * ext/-test-/tracepoint/tracepoint.c, test/-ext-/tracepoint/test_tracepoint.rb: modify a test. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@40963 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'ext/-test-')
-rw-r--r--ext/-test-/tracepoint/tracepoint.c11
1 files changed, 10 insertions, 1 deletions
diff --git a/ext/-test-/tracepoint/tracepoint.c b/ext/-test-/tracepoint/tracepoint.c
index 8164a63..2710f51 100644
--- a/ext/-test-/tracepoint/tracepoint.c
+++ b/ext/-test-/tracepoint/tracepoint.c
@@ -4,6 +4,7 @@
static size_t newobj_count;
static size_t free_count;
static size_t gc_start_count;
+static size_t gc_end_count;
static size_t objects_count;
static VALUE objects[10];
@@ -29,6 +30,11 @@ tracepoint_track_objspace_events_i(VALUE tpval, void *data)
gc_start_count++;
break;
}
+ case RUBY_INTERNAL_EVENT_GC_END:
+ {
+ gc_end_count++;
+ break;
+ }
default:
rb_raise(rb_eRuntimeError, "unknown event");
}
@@ -37,7 +43,9 @@ tracepoint_track_objspace_events_i(VALUE tpval, void *data)
VALUE
tracepoint_track_objspace_events(VALUE self)
{
- VALUE tpval = rb_tracepoint_new(0, RUBY_INTERNAL_EVENT_NEWOBJ | RUBY_INTERNAL_EVENT_FREEOBJ | RUBY_INTERNAL_EVENT_GC_START, tracepoint_track_objspace_events_i, 0);
+ VALUE tpval = rb_tracepoint_new(0, RUBY_INTERNAL_EVENT_NEWOBJ | RUBY_INTERNAL_EVENT_FREEOBJ |
+ RUBY_INTERNAL_EVENT_GC_START | RUBY_INTERNAL_EVENT_GC_END,
+ tracepoint_track_objspace_events_i, 0);
VALUE result = rb_ary_new();
int i;
@@ -50,6 +58,7 @@ tracepoint_track_objspace_events(VALUE self)
rb_ary_push(result, SIZET2NUM(newobj_count));
rb_ary_push(result, SIZET2NUM(free_count));
rb_ary_push(result, SIZET2NUM(gc_start_count));
+ rb_ary_push(result, SIZET2NUM(gc_end_count));
for (i=0; i<objects_count; i++) {
rb_ary_push(result, objects[i]);
}