Module: AllocTrack

Defined in:
ext/alloc_track/alloc_track.c

Defined Under Namespace

Classes: Error, LimitExceeded

Class Method Summary collapse

Class Method Details

.allocObject



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);
}

.deltaObject



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);
}

.freeObject



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);
}

.startObject



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

Returns:

  • (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;
}

.stopObject



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;
}