isomorfeus-speednode 0.5.3 → 0.6.0

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 11a836ac72dbce40b8926276342a91f3c7d3999b562f5be8670102e9b2196751
4
- data.tar.gz: 1110a497795537221829ea361959a1b9c00e1570447744141b047efedecf2685
3
+ metadata.gz: d163fe97b50cb3d23b187a384ccd95aedd2d11e7092db7e2e2866b9f882427c5
4
+ data.tar.gz: a95a2273adf37112ff71263470b4dd69843e45ad69ec730611defafe20e95d02
5
5
  SHA512:
6
- metadata.gz: 0c4f86cf44a01774584782e12c94cb8bd4677c348f914aca3740c697297be2f843da12642683932bb5bd7470c7c1e87009373429644cfe871c11b50082d594df
7
- data.tar.gz: 3ef559f6eecf237c5fb4a46ef3eadd243d8f482fef64170391fcaeeaed373a900401dfe4259d6d7bebf62200529ad54e8efc69f4c6cd887c022b02f701d91092
6
+ metadata.gz: 9f8070f27aec93fa9c9059f269662a1168f2544c5c97095a472f1b1e29b55bf5d564ecd334c203146bfb9923e90a8cd94d7ea3cc0cd1a8da436f2f44cd0f73f5
7
+ data.tar.gz: 05e284e4800da68388373a80620874bd624719e1baaac94633d8c61919c8c1bf4b696a6fc256eb90bfe640927a0305124306e14288483289feabb11eba439345
@@ -1,5 +1,9 @@
1
1
  module ExecJS
2
2
  class << self
3
+ def permissive_bench(source, options = {})
4
+ runtime.permissive_bench(source, options)
5
+ end
6
+
3
7
  def permissive_exec(source, options = {})
4
8
  runtime.permissive_exec(source, options)
5
9
  end
@@ -1,6 +1,11 @@
1
1
  module ExecJS
2
2
  # Abstract base class for runtimes
3
3
  class Runtime
4
+ def permissive_bench(source, options = {})
5
+ context = permissive_compile("", options)
6
+ context.bench(source, options)
7
+ end
8
+
4
9
  def permissive_exec(source, options = {})
5
10
  context = permissive_compile("", options)
6
11
  context.exec(source, options)
@@ -201,6 +201,7 @@ function attachFunctionSource(responder_path, context, func) {
201
201
  function createCompatibleContext(uuid, options) {
202
202
  let c = vm.createContext();
203
203
  vm.runInContext('delete this.console', c, "(execjs)");
204
+ vm.runInContext('delete this.gc', c, "(execjs)");
204
205
  contexts[uuid] = { context: c, options: options };
205
206
  return c;
206
207
  }
@@ -265,6 +266,19 @@ let commands = {
265
266
  let result = vm.runInContext(attachFunctionSource(responder_path, input.context, input.func), context, { filename: "(execjs)", displayErrors: true });
266
267
  return formatResult(result);
267
268
  },
269
+ bench: function (input) {
270
+ if (typeof global.gc === "function") { global.gc(); }
271
+ let context = getContext(input.context);
272
+ let options = getContextOptions(input.context);
273
+ performance.mark('start_bench');
274
+ let result = vm.runInContext(input.source, context, options);
275
+ performance.mark('stop_bench');
276
+ let duration = performance.measure('bench_time', 'start_bench', 'stop_bench').duration;
277
+ performance.clearMarks();
278
+ performance.clearMeasures();
279
+ if (typeof global.gc === "function") { global.gc(); }
280
+ return formatResult({ result: result, duration: duration });
281
+ },
268
282
  create: function (input) {
269
283
  let context = createCompatibleContext(input.context, input.options);
270
284
  let result = vm.runInContext(input.source, context, getContextOptions(input.context));
@@ -66,6 +66,10 @@ module Isomorfeus
66
66
  await_result
67
67
  end
68
68
 
69
+ def bench(source, _options = nil)
70
+ raw_bench(source) if /\S/ =~ source
71
+ end
72
+
69
73
  def call(identifier, *args)
70
74
  raw_eval("#{identifier}.apply(this, #{::Oj.dump(args, mode: :strict)})")
71
75
  end
@@ -102,6 +106,10 @@ module Isomorfeus
102
106
 
103
107
  protected
104
108
 
109
+ def raw_bench(source)
110
+ extract_result(@vm.bench(@uuid, encode(source)))
111
+ end
112
+
105
113
  def raw_eval(source)
106
114
  extract_result(@vm.eval(@uuid, encode(source)))
107
115
  end
@@ -95,6 +95,10 @@ module Isomorfeus
95
95
  command('exec', {'context' => context, 'source' => source})
96
96
  end
97
97
 
98
+ def bench(context, source)
99
+ command('bench', {'context' => context, 'source' => source})
100
+ end
101
+
98
102
  def create(context, source, options)
99
103
  command('create', {'context' => context, 'source' => source, 'options' => options})
100
104
  end
@@ -141,7 +145,7 @@ module Isomorfeus
141
145
  @socket_dir = Dir.mktmpdir("iso-speednode-")
142
146
  @socket_path = File.join(@socket_dir, "socket")
143
147
  end
144
- @pid = Process.spawn({"SOCKET_PATH" => @socket_path}, @options[:binary], @options[:source_maps], @options[:runner_path])
148
+ @pid = Process.spawn({"SOCKET_PATH" => @socket_path}, @options[:binary], '--expose-gc', @options[:source_maps], @options[:runner_path])
145
149
 
146
150
  retries = 500
147
151
 
@@ -27,12 +27,12 @@ module Isomorfeus
27
27
  sent_bytes += @socket.sendmsg(message.byteslice((sent_bytes)..-1))
28
28
  end
29
29
  end
30
-
30
+
31
31
  begin
32
32
  result << @socket.recvmsg()[0]
33
33
  end until result.end_with?("\x04")
34
34
  end
35
- ::Oj.load(result.chop!, create_additions: false)
35
+ ::Oj.load(result.chop!, mode: :strict)
36
36
  end
37
37
  end
38
38
  end
@@ -1,5 +1,5 @@
1
1
  module Isomorfeus
2
2
  module Speednode
3
- VERSION = '0.5.3'
3
+ VERSION = '0.6.0'
4
4
  end
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: isomorfeus-speednode
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.5.3
4
+ version: 0.6.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jan Biedermann
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2022-03-05 00:00:00.000000000 Z
11
+ date: 2022-10-27 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: execjs
@@ -30,14 +30,14 @@ dependencies:
30
30
  requirements:
31
31
  - - "~>"
32
32
  - !ruby/object:Gem::Version
33
- version: 3.13.11
33
+ version: 3.13.21
34
34
  type: :runtime
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
38
  - - "~>"
39
39
  - !ruby/object:Gem::Version
40
- version: 3.13.11
40
+ version: 3.13.21
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: win32-pipe
43
43
  requirement: !ruby/object:Gem::Requirement
@@ -72,14 +72,14 @@ dependencies:
72
72
  requirements:
73
73
  - - "~>"
74
74
  - !ruby/object:Gem::Version
75
- version: 5.15.0
75
+ version: 5.16.0
76
76
  type: :development
77
77
  prerelease: false
78
78
  version_requirements: !ruby/object:Gem::Requirement
79
79
  requirements:
80
80
  - - "~>"
81
81
  - !ruby/object:Gem::Version
82
- version: 5.15.0
82
+ version: 5.16.0
83
83
  - !ruby/object:Gem::Dependency
84
84
  name: rake
85
85
  requirement: !ruby/object:Gem::Requirement
@@ -151,7 +151,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
151
151
  - !ruby/object:Gem::Version
152
152
  version: '0'
153
153
  requirements: []
154
- rubygems_version: 3.3.7
154
+ rubygems_version: 3.4.0.dev
155
155
  signing_key:
156
156
  specification_version: 4
157
157
  summary: A fast ExecJS runtime based on nodejs, tuned for Isomorfeus.