skylight 0.4.3 → 0.5.0.beta1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +4 -3
- data/ext/extconf.rb +23 -2
- data/ext/libskylight.yml +4 -4
- data/ext/skylight_memprof.c +109 -0
- data/ext/skylight_native.c +74 -33
- data/ext/skylight_native.h +18 -0
- data/lib/skylight/normalizers/moped/query.rb +4 -4
- data/lib/skylight/version.rb +1 -1
- metadata +5 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: c7eb484b9fcd3852564008f81d9cdbc1da4ddf11
|
4
|
+
data.tar.gz: 37c8da551cbe8d0b460bfcf8346defe265e5a665
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 8aa90d031fe9903413d71cd4dbb1097fa9566595eadfa288326dd629d98313bd8096547fed9681e49aed8fdbe03b38b1d59621aa8b1f61411e819affebbecafb
|
7
|
+
data.tar.gz: 89722c481983864f6e1fbfec52885fa3d10a63587ed324f77356f7276c0b6c63f5da63f5862e79c7a496cf42899588bfefbddfb8cc4fe0b87da94a84fd337c3b
|
data/CHANGELOG.md
CHANGED
@@ -1,6 +1,7 @@
|
|
1
|
-
## 0.
|
2
|
-
|
3
|
-
* [BUGFIX] Fix
|
1
|
+
## 0.5.0 (unreleased)
|
2
|
+
* [FEATURE] Track object allocations per span
|
3
|
+
* [BUGFIX] Fix exit status in 1.9.2
|
4
|
+
* [IMPROVEMENT] Fix C warnings
|
4
5
|
|
5
6
|
## 0.4.2 (November 12, 2014)
|
6
7
|
|
data/ext/extconf.rb
CHANGED
@@ -135,8 +135,6 @@ def find_file(file, root = nil)
|
|
135
135
|
end
|
136
136
|
end
|
137
137
|
|
138
|
-
# Flag -std=c99 required for older build systems
|
139
|
-
$CFLAGS << " -std=c99 -pedantic" # -Wall
|
140
138
|
$VPATH << libpath
|
141
139
|
|
142
140
|
# Where the ruby binding src is
|
@@ -161,5 +159,28 @@ unless have_func('rb_thread_call_without_gvl', 'ruby/thread.h')
|
|
161
159
|
have_func('rb_thread_blocking_region') or abort "Ruby is unexpectedly missing rb_thread_blocking_region. This should not happen."
|
162
160
|
end
|
163
161
|
|
162
|
+
# Some extra checks
|
163
|
+
# -Werror is needed for the fast thread local storage
|
164
|
+
$CFLAGS << " -Werror"
|
165
|
+
|
166
|
+
checking_for 'fast thread local storage' do
|
167
|
+
if try_compile("__thread int foo;")
|
168
|
+
$defs << "-DHAVE_FAST_TLS"
|
169
|
+
true
|
170
|
+
end
|
171
|
+
end
|
172
|
+
|
173
|
+
# spec = nil
|
174
|
+
# checking_for('thread_specific', '%s') do
|
175
|
+
# spec = %w[__declspec(thread) __thread].find {|th|
|
176
|
+
# try_compile("#{th} int foo;", "", :werror => true)
|
177
|
+
# }
|
178
|
+
# spec or 'no'
|
179
|
+
# end
|
180
|
+
# $defs << "-DRB_THREAD_SPECIFIC=#{spec}" if spec
|
181
|
+
|
182
|
+
# Flag -std=c99 required for older build systems
|
183
|
+
$CFLAGS << " -std=c99 -pedantic -Wall -fno-strict-aliasing"
|
184
|
+
|
164
185
|
# TODO: Compute the relative path to the location
|
165
186
|
create_makefile 'skylight_native', File.expand_path('..', __FILE__) # or fail "could not create makefile"
|
data/ext/libskylight.yml
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
---
|
2
|
-
version: "0.
|
2
|
+
version: "0.5.0-72edddd"
|
3
3
|
checksums:
|
4
|
-
x86-linux: "
|
5
|
-
x86_64-linux: "
|
6
|
-
x86_64-darwin: "
|
4
|
+
x86-linux: "d5935c1b135e1ff63050e4997d5b09324a1fc9249dd2331480c60cca188a64da"
|
5
|
+
x86_64-linux: "10229cc6a3fe6e793089ab78c8c01f70b0c4f8d7c6298184cf86ae252b91ffe5"
|
6
|
+
x86_64-darwin: "131de21acd4ebe5ae1502a2ae73880af1bc98b78506ee604c522bb0005ef7ff2"
|
@@ -0,0 +1,109 @@
|
|
1
|
+
#include <ruby.h>
|
2
|
+
#include <skylight_native.h>
|
3
|
+
|
4
|
+
#ifdef RUBY_INTERNAL_EVENT_NEWOBJ
|
5
|
+
|
6
|
+
typedef struct {
|
7
|
+
uint64_t allocations;
|
8
|
+
} sky_allocations_t;
|
9
|
+
|
10
|
+
#ifdef HAVE_FAST_TLS
|
11
|
+
|
12
|
+
// Use the __thread directive
|
13
|
+
static __thread sky_allocations_t sky_allocations;
|
14
|
+
|
15
|
+
static inline sky_allocations_t* get_allocations() {
|
16
|
+
return &sky_allocations;
|
17
|
+
}
|
18
|
+
|
19
|
+
#else
|
20
|
+
|
21
|
+
#include <pthread.h>
|
22
|
+
|
23
|
+
// Use pthread thread locals
|
24
|
+
static pthread_key_t ALLOCATIONS_KEY;
|
25
|
+
|
26
|
+
static pthread_once_t KEY_INIT_ONCE = PTHREAD_ONCE_INIT;
|
27
|
+
|
28
|
+
static void init_allocations_key() {
|
29
|
+
pthread_key_create(&ALLOCATIONS_KEY, free);
|
30
|
+
}
|
31
|
+
|
32
|
+
static sky_allocations_t* get_allocations() {
|
33
|
+
sky_allocations_t* ret;
|
34
|
+
|
35
|
+
// Initialize the TLS key
|
36
|
+
pthread_once(&KEY_INIT_ONCE, init_allocations_key);
|
37
|
+
|
38
|
+
ret = (sky_allocations_t*) pthread_getspecific(ALLOCATIONS_KEY);
|
39
|
+
|
40
|
+
if (ret == 0) {
|
41
|
+
ret = (sky_allocations_t*) malloc(sizeof(sky_allocations_t));
|
42
|
+
pthread_setspecific(ALLOCATIONS_KEY, (void*) ret);
|
43
|
+
}
|
44
|
+
|
45
|
+
return ret;
|
46
|
+
}
|
47
|
+
|
48
|
+
#endif
|
49
|
+
|
50
|
+
static void sky_increment_allocation(rb_event_flag_t flag, VALUE data, VALUE self, ID mid, VALUE klass) {
|
51
|
+
get_allocations()->allocations++;
|
52
|
+
}
|
53
|
+
|
54
|
+
void sky_activate_memprof(void) {
|
55
|
+
rb_add_event_hook(sky_increment_allocation, RUBY_INTERNAL_EVENT_NEWOBJ, Qnil);
|
56
|
+
}
|
57
|
+
|
58
|
+
void sky_deactivate_memprof(void) {
|
59
|
+
rb_remove_event_hook(sky_increment_allocation);
|
60
|
+
}
|
61
|
+
|
62
|
+
uint64_t sky_allocation_count(void) {
|
63
|
+
return get_allocations()->allocations;
|
64
|
+
}
|
65
|
+
|
66
|
+
uint64_t sky_consume_allocations() {
|
67
|
+
uint64_t ret = get_allocations()->allocations;
|
68
|
+
sky_clear_allocation_count();
|
69
|
+
return ret;
|
70
|
+
}
|
71
|
+
|
72
|
+
void sky_clear_allocation_count(void) {
|
73
|
+
get_allocations()->allocations = 0;
|
74
|
+
}
|
75
|
+
|
76
|
+
int sky_have_memprof(void) {
|
77
|
+
return 1;
|
78
|
+
}
|
79
|
+
|
80
|
+
#else
|
81
|
+
/*
|
82
|
+
*
|
83
|
+
* ===== No memory profiling ======
|
84
|
+
*
|
85
|
+
*/
|
86
|
+
|
87
|
+
void sky_activate_memprof(void) {
|
88
|
+
}
|
89
|
+
|
90
|
+
void sky_deactivate_memprof(void) {
|
91
|
+
}
|
92
|
+
|
93
|
+
uint64_t sky_allocation_count(void) {
|
94
|
+
return 0;
|
95
|
+
}
|
96
|
+
|
97
|
+
uint64_t sky_consume_allocations() {
|
98
|
+
return 0;
|
99
|
+
}
|
100
|
+
|
101
|
+
void sky_clear_allocation_count(void) {
|
102
|
+
}
|
103
|
+
|
104
|
+
int sky_have_memprof(void) {
|
105
|
+
return 0;
|
106
|
+
}
|
107
|
+
|
108
|
+
|
109
|
+
#endif
|
data/ext/skylight_native.c
CHANGED
@@ -1,11 +1,14 @@
|
|
1
1
|
#include <dlfcn.h>
|
2
2
|
#include <ruby.h>
|
3
3
|
#include <skylight_dlopen.h>
|
4
|
+
#include <skylight_native.h>
|
4
5
|
|
5
6
|
#ifdef HAVE_RUBY_ENCODING_H
|
6
7
|
#include <ruby/encoding.h>
|
7
8
|
#endif
|
8
9
|
|
10
|
+
#define UNUSED(x) (void)(x)
|
11
|
+
|
9
12
|
#define TO_S(VAL) \
|
10
13
|
RSTRING_PTR(rb_funcall(VAL, rb_intern("to_s"), 0))
|
11
14
|
|
@@ -28,22 +31,20 @@
|
|
28
31
|
} \
|
29
32
|
} while(0) \
|
30
33
|
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
({
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
buf; \
|
46
|
-
})
|
34
|
+
static inline VALUE
|
35
|
+
BUF2STR(sky_buf_t buf) {
|
36
|
+
VALUE str = rb_str_new(buf.data, buf.len);
|
37
|
+
rb_enc_associate(str, rb_utf8_encoding());
|
38
|
+
return str;
|
39
|
+
}
|
40
|
+
|
41
|
+
static inline sky_buf_t
|
42
|
+
STR2BUF(VALUE str) {
|
43
|
+
return (sky_buf_t) {
|
44
|
+
.data = RSTRING_PTR(str),
|
45
|
+
.len = RSTRING_LEN(str),
|
46
|
+
};
|
47
|
+
}
|
47
48
|
|
48
49
|
#define CHECK_FFI(success, message) \
|
49
50
|
do { \
|
@@ -65,7 +66,6 @@
|
|
65
66
|
DATA_PTR(obj) = NULL; \
|
66
67
|
|
67
68
|
#define Get_Struct(name, obj, Type, msg) \
|
68
|
-
Type name; \
|
69
69
|
Data_Get_Struct(obj, Type, name); \
|
70
70
|
if (name == NULL) { \
|
71
71
|
rb_raise(rb_eRuntimeError, "%s", msg); \
|
@@ -115,6 +115,7 @@ static VALUE
|
|
115
115
|
load_libskylight(VALUE klass, VALUE path) {
|
116
116
|
int res;
|
117
117
|
|
118
|
+
UNUSED(klass);
|
118
119
|
CHECK_TYPE(path, T_STRING);
|
119
120
|
|
120
121
|
// Already loaded
|
@@ -140,6 +141,7 @@ load_libskylight(VALUE klass, VALUE path) {
|
|
140
141
|
|
141
142
|
static VALUE
|
142
143
|
clock_high_res_time(VALUE self) {
|
144
|
+
UNUSED(self);
|
143
145
|
return ULL2NUM(sky_hrtime());
|
144
146
|
}
|
145
147
|
|
@@ -153,7 +155,9 @@ static VALUE
|
|
153
155
|
instrumenter_new(VALUE klass, VALUE rb_env) {
|
154
156
|
sky_instrumenter_t* instrumenter;
|
155
157
|
sky_buf_t env[256];
|
158
|
+
int i, envc;
|
156
159
|
|
160
|
+
UNUSED(klass);
|
157
161
|
CHECK_TYPE(rb_env, T_ARRAY);
|
158
162
|
|
159
163
|
if (RARRAY_LEN(rb_env) >= 256) {
|
@@ -161,8 +165,7 @@ instrumenter_new(VALUE klass, VALUE rb_env) {
|
|
161
165
|
return Qnil;
|
162
166
|
}
|
163
167
|
|
164
|
-
int
|
165
|
-
int envc = (int) RARRAY_LEN(rb_env);
|
168
|
+
envc = (int) RARRAY_LEN(rb_env);
|
166
169
|
|
167
170
|
for (i = 0; i < envc; ++i) {
|
168
171
|
VALUE val = rb_ary_entry(rb_env, i);
|
@@ -187,6 +190,8 @@ instrumenter_start_nogvl(sky_instrumenter_t* instrumenter) {
|
|
187
190
|
*/
|
188
191
|
|
189
192
|
if (sky_instrumenter_start(instrumenter) == 0) {
|
193
|
+
sky_activate_memprof();
|
194
|
+
|
190
195
|
return (void*) Qtrue;
|
191
196
|
}
|
192
197
|
else {
|
@@ -196,26 +201,35 @@ instrumenter_start_nogvl(sky_instrumenter_t* instrumenter) {
|
|
196
201
|
|
197
202
|
static VALUE
|
198
203
|
instrumenter_start(VALUE self) {
|
199
|
-
|
204
|
+
sky_instrumenter_t* instrumenter;
|
205
|
+
|
206
|
+
My_Struct(instrumenter, sky_instrumenter_t, no_instrumenter_msg);
|
200
207
|
|
201
208
|
return (VALUE) WITHOUT_GVL(instrumenter_start_nogvl, instrumenter);
|
202
209
|
}
|
203
210
|
|
204
211
|
static VALUE
|
205
212
|
instrumenter_stop(VALUE self) {
|
206
|
-
|
213
|
+
sky_instrumenter_t* instrumenter;
|
214
|
+
|
215
|
+
My_Struct(instrumenter, sky_instrumenter_t, no_instrumenter_msg);
|
207
216
|
|
208
217
|
CHECK_FFI(
|
209
218
|
sky_instrumenter_stop(instrumenter),
|
210
219
|
"native Instrumenter#stop failed");
|
211
220
|
|
221
|
+
sky_deactivate_memprof();
|
222
|
+
|
212
223
|
return Qnil;
|
213
224
|
}
|
214
225
|
|
215
226
|
static VALUE
|
216
227
|
instrumenter_submit_trace(VALUE self, VALUE rb_trace) {
|
217
|
-
|
218
|
-
|
228
|
+
sky_instrumenter_t* instrumenter;
|
229
|
+
sky_trace_t* trace;
|
230
|
+
|
231
|
+
My_Struct(instrumenter, sky_instrumenter_t, no_instrumenter_msg);
|
232
|
+
Transfer_Struct(trace, rb_trace, sky_trace_t, consumed_trace_msg);
|
219
233
|
|
220
234
|
CHECK_FFI(
|
221
235
|
sky_instrumenter_submit_trace(instrumenter, trace),
|
@@ -232,23 +246,28 @@ instrumenter_submit_trace(VALUE self, VALUE rb_trace) {
|
|
232
246
|
|
233
247
|
static VALUE
|
234
248
|
trace_new(VALUE klass, VALUE start, VALUE uuid, VALUE endpoint) {
|
249
|
+
sky_trace_t* trace;
|
250
|
+
|
251
|
+
UNUSED(klass);
|
235
252
|
CHECK_NUMERIC(start);
|
236
253
|
CHECK_TYPE(uuid, T_STRING);
|
237
254
|
CHECK_TYPE(endpoint, T_STRING);
|
238
255
|
|
239
|
-
sky_trace_t* trace;
|
240
|
-
|
241
256
|
CHECK_FFI(
|
242
257
|
sky_trace_new(NUM2ULL(start), STR2BUF(uuid), STR2BUF(endpoint), &trace),
|
243
258
|
"native Trace#new failed");
|
244
259
|
|
260
|
+
sky_clear_allocation_count();
|
261
|
+
|
245
262
|
return Data_Wrap_Struct(rb_cTrace, NULL, sky_trace_free, trace);
|
246
263
|
}
|
247
264
|
|
248
265
|
static VALUE
|
249
266
|
trace_get_started_at(VALUE self) {
|
250
267
|
uint64_t start;
|
251
|
-
|
268
|
+
sky_trace_t* trace;
|
269
|
+
|
270
|
+
My_Struct(trace, sky_trace_t, consumed_trace_msg);
|
252
271
|
|
253
272
|
CHECK_FFI(
|
254
273
|
sky_trace_start(trace, &start),
|
@@ -259,8 +278,10 @@ trace_get_started_at(VALUE self) {
|
|
259
278
|
|
260
279
|
static VALUE
|
261
280
|
trace_get_endpoint(VALUE self) {
|
281
|
+
sky_trace_t* trace;
|
262
282
|
sky_buf_t endpoint;
|
263
|
-
|
283
|
+
|
284
|
+
My_Struct(trace, sky_trace_t, consumed_trace_msg);
|
264
285
|
|
265
286
|
CHECK_FFI(
|
266
287
|
sky_trace_endpoint(trace, &endpoint),
|
@@ -271,8 +292,10 @@ trace_get_endpoint(VALUE self) {
|
|
271
292
|
|
272
293
|
static VALUE
|
273
294
|
trace_set_endpoint(VALUE self, VALUE endpoint) {
|
295
|
+
sky_trace_t* trace;
|
296
|
+
|
274
297
|
CHECK_TYPE(endpoint, T_STRING);
|
275
|
-
My_Struct(trace, sky_trace_t
|
298
|
+
My_Struct(trace, sky_trace_t, consumed_trace_msg);
|
276
299
|
|
277
300
|
CHECK_FFI(
|
278
301
|
sky_trace_set_endpoint(trace, STR2BUF(endpoint)),
|
@@ -283,8 +306,10 @@ trace_set_endpoint(VALUE self, VALUE endpoint) {
|
|
283
306
|
|
284
307
|
static VALUE
|
285
308
|
trace_get_uuid(VALUE self) {
|
309
|
+
sky_trace_t* trace;
|
286
310
|
sky_buf_t uuid;
|
287
|
-
|
311
|
+
|
312
|
+
My_Struct(trace, sky_trace_t, consumed_trace_msg);
|
288
313
|
|
289
314
|
CHECK_FFI(
|
290
315
|
sky_trace_uuid(trace, &uuid),
|
@@ -295,8 +320,10 @@ trace_get_uuid(VALUE self) {
|
|
295
320
|
|
296
321
|
static VALUE
|
297
322
|
trace_start_span(VALUE self, VALUE time, VALUE category) {
|
323
|
+
sky_trace_t* trace;
|
298
324
|
uint32_t span;
|
299
|
-
|
325
|
+
|
326
|
+
My_Struct(trace, sky_trace_t, consumed_trace_msg);
|
300
327
|
|
301
328
|
CHECK_NUMERIC(time);
|
302
329
|
CHECK_TYPE(category, T_STRING);
|
@@ -305,16 +332,26 @@ trace_start_span(VALUE self, VALUE time, VALUE category) {
|
|
305
332
|
sky_trace_instrument(trace, NUM2ULL(time), STR2BUF(category), &span),
|
306
333
|
"native Trace#start_span failed");
|
307
334
|
|
335
|
+
if (sky_have_memprof()) {
|
336
|
+
sky_trace_span_add_uint_annotation(trace, span, 2, sky_consume_allocations());
|
337
|
+
}
|
338
|
+
|
308
339
|
return UINT2NUM(span);
|
309
340
|
}
|
310
341
|
|
311
342
|
static VALUE
|
312
343
|
trace_stop_span(VALUE self, VALUE span, VALUE time) {
|
313
|
-
|
344
|
+
sky_trace_t* trace;
|
345
|
+
|
346
|
+
My_Struct(trace, sky_trace_t, consumed_trace_msg);
|
314
347
|
|
315
348
|
CHECK_NUMERIC(time);
|
316
349
|
CHECK_TYPE(span, T_FIXNUM);
|
317
350
|
|
351
|
+
if (sky_have_memprof()) {
|
352
|
+
sky_trace_span_add_uint_annotation(trace, FIX2UINT(span), 1, sky_consume_allocations());
|
353
|
+
}
|
354
|
+
|
318
355
|
CHECK_FFI(
|
319
356
|
sky_trace_span_done(trace, FIX2UINT(span), NUM2ULL(time)),
|
320
357
|
"native Trace#stop_span failed");
|
@@ -324,7 +361,9 @@ trace_stop_span(VALUE self, VALUE span, VALUE time) {
|
|
324
361
|
|
325
362
|
static VALUE
|
326
363
|
trace_span_set_title(VALUE self, VALUE span, VALUE title) {
|
327
|
-
|
364
|
+
sky_trace_t* trace;
|
365
|
+
|
366
|
+
My_Struct(trace, sky_trace_t, consumed_trace_msg);
|
328
367
|
|
329
368
|
CHECK_TYPE(span, T_FIXNUM);
|
330
369
|
CHECK_TYPE(title, T_STRING);
|
@@ -338,7 +377,9 @@ trace_span_set_title(VALUE self, VALUE span, VALUE title) {
|
|
338
377
|
|
339
378
|
static VALUE
|
340
379
|
trace_span_set_description(VALUE self, VALUE span, VALUE desc) {
|
341
|
-
|
380
|
+
sky_trace_t* trace;
|
381
|
+
|
382
|
+
My_Struct(trace, sky_trace_t, consumed_trace_msg);
|
342
383
|
|
343
384
|
CHECK_TYPE(span, T_FIXNUM);
|
344
385
|
CHECK_TYPE(desc, T_STRING);
|
@@ -0,0 +1,18 @@
|
|
1
|
+
#ifndef __SKYLIGHT_NATIVE__
|
2
|
+
#define __SKYLIGHT_NATIVE__
|
3
|
+
|
4
|
+
#include <stdint.h>
|
5
|
+
|
6
|
+
void sky_activate_memprof(void);
|
7
|
+
|
8
|
+
void sky_deactivate_memprof(void);
|
9
|
+
|
10
|
+
uint64_t sky_allocation_count(void);
|
11
|
+
|
12
|
+
uint64_t sky_consume_allocations();
|
13
|
+
|
14
|
+
void sky_clear_allocation_count(void);
|
15
|
+
|
16
|
+
int sky_have_memprof(void);
|
17
|
+
|
18
|
+
#endif
|
@@ -117,18 +117,18 @@ module Skylight
|
|
117
117
|
end
|
118
118
|
|
119
119
|
def extract_binds(hash, binds=[])
|
120
|
-
|
120
|
+
hash = hash.dup
|
121
121
|
|
122
122
|
hash.each do |k,v|
|
123
123
|
if v.is_a?(Hash)
|
124
|
-
|
124
|
+
hash[k] = extract_binds(v, binds)[0]
|
125
125
|
else
|
126
126
|
binds << stringify(hash[k])
|
127
|
-
|
127
|
+
hash[k] = '?'
|
128
128
|
end
|
129
129
|
end
|
130
130
|
|
131
|
-
[
|
131
|
+
[hash, binds]
|
132
132
|
end
|
133
133
|
|
134
134
|
def stringify(value)
|
data/lib/skylight/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: skylight
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.5.0.beta1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Tilde, Inc.
|
@@ -41,7 +41,9 @@ files:
|
|
41
41
|
- bin/skylight
|
42
42
|
- ext/extconf.rb
|
43
43
|
- ext/libskylight.yml
|
44
|
+
- ext/skylight_memprof.c
|
44
45
|
- ext/skylight_native.c
|
46
|
+
- ext/skylight_native.h
|
45
47
|
- lib/skylight.rb
|
46
48
|
- lib/skylight/api.rb
|
47
49
|
- lib/skylight/cli.rb
|
@@ -160,9 +162,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
160
162
|
version: 1.9.2
|
161
163
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
162
164
|
requirements:
|
163
|
-
- - "
|
165
|
+
- - ">"
|
164
166
|
- !ruby/object:Gem::Version
|
165
|
-
version:
|
167
|
+
version: 1.3.1
|
166
168
|
requirements: []
|
167
169
|
rubyforge_project:
|
168
170
|
rubygems_version: 2.2.2
|