mini_racer 0.2.5 → 0.2.6

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 33363eb77714da62e0920f19b096785488a5f425866918e1942a8062cb5fe233
4
- data.tar.gz: 1aba90413863460047822b072d92c261f6bc5927918409cf19f8f36ecf97d5e6
3
+ metadata.gz: 0c16fa0feb3cbf1b8421934aa90d12326e054ae439355e205f419ae1b74f6ad5
4
+ data.tar.gz: ae46660f1ae64a14a528d26d53e3a1a0d7229556124cd17e0b7f5fdb16e42267
5
5
  SHA512:
6
- metadata.gz: 1d9acc921de43092d13c1edfc37a2fd753b0d572b2979d38185b0ea76b4527092d9569329479df8a21561589fe57acbcc6db8087948914bed2dde7178c9cfa2a
7
- data.tar.gz: 537161ead4afdb14675b4593eea7f0e714d424c8a31bb2fc32960d3c8500a495b3d98f76280018df7a2d6072cdc8d038d791908b63ccd571e0c5757bb3ebc698
6
+ metadata.gz: 55eaf9550322b6d3151b0dc17e86e9faadff9fe48cf64765d722281a8d6cd2af42ab8d46614f1ac59946aeffe2c02dbb09673042006c164e4eb132224acfe069
7
+ data.tar.gz: 2b367ff94b68ed24579c6d750aef1532398bacedcd42a6149c16fbf176a76d079eddb12e9c3f15b12fb141703b0f38d37ca6e017e46d685826db64891347475e
data/CHANGELOG CHANGED
@@ -1,3 +1,9 @@
1
+ - 14-05-2019
2
+
3
+ - 0.2.6
4
+
5
+ - FEATURE: add support for write_heap_snapshot which helps you analyze memory
6
+
1
7
  - 25-04-2019
2
8
 
3
9
  - 0.2.5
data/Rakefile CHANGED
@@ -52,3 +52,28 @@ namespace :test do
52
52
  end
53
53
  end
54
54
  end
55
+
56
+ desc 'run clang-tidy linter on mini_racer_extension.cc'
57
+ task :lint do
58
+ require 'mkmf'
59
+ require 'libv8'
60
+
61
+ Libv8.configure_makefile
62
+
63
+ conf = RbConfig::CONFIG.merge('hdrdir' => $hdrdir.quote, 'srcdir' => $srcdir.quote,
64
+ 'arch_hdrdir' => $arch_hdrdir.quote,
65
+ 'top_srcdir' => $top_srcdir.quote)
66
+ if $universal and (arch_flag = conf['ARCH_FLAG']) and !arch_flag.empty?
67
+ conf['ARCH_FLAG'] = arch_flag.gsub(/(?:\G|\s)-arch\s+\S+/, '')
68
+ end
69
+
70
+ checks = %W(bugprone-*
71
+ cert-*
72
+ cppcoreguidelines-*
73
+ clang-analyzer-*
74
+ performance-*
75
+ portability-*
76
+ readability-*).join(',')
77
+
78
+ sh RbConfig::expand("clang-tidy -checks='#{checks}' ext/mini_racer_extension/mini_racer_extension.cc -- #$INCFLAGS #$CPPFLAGS", conf)
79
+ end
@@ -1,7 +1,9 @@
1
1
  #include <stdio.h>
2
2
  #include <ruby.h>
3
3
  #include <ruby/thread.h>
4
+ #include <ruby/io.h>
4
5
  #include <v8.h>
6
+ #include <v8-profiler.h>
5
7
  #include <libplatform/libplatform.h>
6
8
  #include <ruby/encoding.h>
7
9
  #include <pthread.h>
@@ -1315,6 +1317,69 @@ rb_heap_stats(VALUE self) {
1315
1317
  return rval;
1316
1318
  }
1317
1319
 
1320
+ // https://github.com/bnoordhuis/node-heapdump/blob/master/src/heapdump.cc
1321
+ class FileOutputStream : public OutputStream {
1322
+ public:
1323
+ FileOutputStream(FILE* stream) : stream_(stream) {}
1324
+
1325
+ virtual int GetChunkSize() {
1326
+ return 65536;
1327
+ }
1328
+
1329
+ virtual void EndOfStream() {}
1330
+
1331
+ virtual WriteResult WriteAsciiChunk(char* data, int size) {
1332
+ const size_t len = static_cast<size_t>(size);
1333
+ size_t off = 0;
1334
+
1335
+ while (off < len && !feof(stream_) && !ferror(stream_))
1336
+ off += fwrite(data + off, 1, len - off, stream_);
1337
+
1338
+ return off == len ? kContinue : kAbort;
1339
+ }
1340
+
1341
+ private:
1342
+ FILE* stream_;
1343
+ };
1344
+
1345
+
1346
+ static VALUE
1347
+ rb_heap_snapshot(VALUE self, VALUE file) {
1348
+
1349
+ rb_io_t *fptr;
1350
+
1351
+ fptr = RFILE(file)->fptr;
1352
+
1353
+ if (!fptr) return Qfalse;
1354
+
1355
+ FILE* fp;
1356
+ fp = fdopen(fptr->fd, "w");
1357
+ if (fp == NULL) return Qfalse;
1358
+
1359
+
1360
+ ContextInfo* context_info;
1361
+ Data_Get_Struct(self, ContextInfo, context_info);
1362
+ Isolate* isolate;
1363
+ isolate = context_info->isolate_info ? context_info->isolate_info->isolate : NULL;
1364
+
1365
+ if (!isolate) return Qfalse;
1366
+
1367
+ Locker lock(isolate);
1368
+ Isolate::Scope isolate_scope(isolate);
1369
+ HandleScope handle_scope(isolate);
1370
+
1371
+ HeapProfiler* heap_profiler = isolate->GetHeapProfiler();
1372
+
1373
+ const HeapSnapshot* const snap = heap_profiler->TakeHeapSnapshot();
1374
+
1375
+ FileOutputStream stream(fp);
1376
+ snap->Serialize(&stream, HeapSnapshot::kJSON);
1377
+
1378
+ const_cast<HeapSnapshot*>(snap)->Delete();
1379
+
1380
+ return Qtrue;
1381
+ }
1382
+
1318
1383
  static VALUE
1319
1384
  rb_context_stop(VALUE self) {
1320
1385
 
@@ -1500,6 +1565,8 @@ extern "C" {
1500
1565
  rb_define_method(rb_cContext, "stop", (VALUE(*)(...))&rb_context_stop, 0);
1501
1566
  rb_define_method(rb_cContext, "dispose_unsafe", (VALUE(*)(...))&rb_context_dispose, 0);
1502
1567
  rb_define_method(rb_cContext, "heap_stats", (VALUE(*)(...))&rb_heap_stats, 0);
1568
+ rb_define_method(rb_cContext, "write_heap_snapshot_unsafe", (VALUE(*)(...))&rb_heap_snapshot, 1);
1569
+
1503
1570
  rb_define_private_method(rb_cContext, "create_isolate_value",(VALUE(*)(...))&rb_context_create_isolate_value, 0);
1504
1571
  rb_define_private_method(rb_cContext, "eval_unsafe",(VALUE(*)(...))&rb_context_eval_unsafe, 2);
1505
1572
  rb_define_private_method(rb_cContext, "call_unsafe", (VALUE(*)(...))&rb_context_call_unsafe, -1);
@@ -167,6 +167,28 @@ module MiniRacer
167
167
  eval(File.read(filename))
168
168
  end
169
169
 
170
+ def write_heap_snapshot(file_or_io)
171
+ f = nil
172
+ implicit = false
173
+
174
+
175
+ if String === file_or_io
176
+ f = File.open(file_or_io, "w")
177
+ implicit = true
178
+ else
179
+ f = file_or_io
180
+ end
181
+
182
+ if !(File === f)
183
+ raise ArgumentError("file_or_io")
184
+ end
185
+
186
+ write_heap_snapshot_unsafe(f)
187
+
188
+ ensure
189
+ f.close if implicit
190
+ end
191
+
170
192
  def eval(str, options=nil)
171
193
  raise(ContextDisposedError, 'attempted to call eval on a disposed context!') if @disposed
172
194
 
@@ -1,3 +1,3 @@
1
1
  module MiniRacer
2
- VERSION = "0.2.5"
2
+ VERSION = "0.2.6"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: mini_racer
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.5
4
+ version: 0.2.6
5
5
  platform: ruby
6
6
  authors:
7
7
  - Sam Saffron
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2019-04-25 00:00:00.000000000 Z
11
+ date: 2019-05-14 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler