skylight 0.4.3 → 0.5.0.beta1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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
|