Module: AllocTrack
- Defined in:
- ext/alloc_track/alloc_track.c
Defined Under Namespace
Classes: Error, LimitExceeded
Class Method Summary
collapse
Class Method Details
.alloc ⇒ Object
123
124
125
126
127
128
|
# File 'ext/alloc_track/alloc_track.c', line 123
static VALUE
alloc()
{
validate_started();
return INT2FIX(get_collector(rb_thread_current())->current_alloc);
}
|
.delta ⇒ Object
137
138
139
140
141
142
143
144
|
# File 'ext/alloc_track/alloc_track.c', line 137
static VALUE
delta()
{
stat_collector_t *c;
validate_started();
c = get_collector(rb_thread_current());
return INT2FIX(c->current_alloc - c->current_free);
}
|
.free ⇒ Object
130
131
132
133
134
135
|
# File 'ext/alloc_track/alloc_track.c', line 130
static VALUE
_free()
{
validate_started();
return INT2FIX(get_collector(rb_thread_current())->current_free);
}
|
.limit(num_allocs) ⇒ Object
163
164
165
166
167
168
169
170
171
172
173
174
|
# File 'ext/alloc_track/alloc_track.c', line 163
static VALUE
limit(VALUE self, VALUE num_allocs)
{
if (!rb_block_given_p()) {
rb_raise(rb_eArgError, "block required");
}
if (!RB_TYPE_P(num_allocs, T_FIXNUM)) {
rb_raise(rb_eArgError, "limit() must be passed a number");
}
validate_stopped();
return rb_ensure(do_limit, num_allocs, ensure_stopped, Qnil);
}
|
.start ⇒ Object
103
104
105
106
107
108
109
110
111
112
113
|
# File 'ext/alloc_track/alloc_track.c', line 103
static VALUE
start()
{
validate_stopped();
/* TODO: support multiple running trackers */
if (root_collector) {
rb_raise(eAllocTrackError, "allocation tracker already running on another thread");
}
add_collector(rb_thread_current());
return Qnil;
}
|
.started? ⇒ Boolean
81
82
83
84
85
|
# File 'ext/alloc_track/alloc_track.c', line 81
static VALUE
started()
{
return get_collector(rb_thread_current()) ? Qtrue : Qfalse;
}
|
.stop ⇒ Object
115
116
117
118
119
120
121
|
# File 'ext/alloc_track/alloc_track.c', line 115
static VALUE
stop()
{
validate_started();
remove_collector(rb_thread_current());
return Qnil;
}
|