mini_racer 0.2.13 → 0.2.14
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 +8 -0
- data/README.md +1 -1
- data/lib/mini_racer.rb +29 -15
- data/lib/mini_racer/version.rb +1 -1
- metadata +4 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: d31e1517a2d52257af3ecd56079e6fcaed4a569ff2256fba4db7c92f922b6cbd
|
4
|
+
data.tar.gz: 777208a006502e94f375e54f43541273b49ecdc7657ac004bec88515b1e620b7
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: c08eecc3edcc923625a8cd6cd87b4c88a4c4f80d64c9c4edee1f68897b595f5cf02927d1d3268f8bdb1d9e81b170c75dfe3875cc1c436fdeed11ebc40759b64c
|
7
|
+
data.tar.gz: 3d82acdd3ec745bc2467e5429c849f1719bf3c711a454b588db9871b36770df64aa37947103eedc553846a04e0e754752d214c208f9f65a6eae1e35686f3068e
|
data/CHANGELOG
CHANGED
@@ -1,6 +1,14 @@
|
|
1
1
|
- 15-05-2020
|
2
2
|
|
3
|
+
- 0.2.14
|
4
|
+
|
5
|
+
- FIX: ensure_gc_after_idle should take in milliseconds like the rest of the APIs not seconds
|
6
|
+
- FEATURE: strict params on MiniRacer::Context.new
|
7
|
+
|
8
|
+
- 15-05-2020
|
9
|
+
|
3
10
|
- 0.2.13
|
11
|
+
|
4
12
|
- FIX: edge case around ensure_gc_after_idle possibly firing when context is not idle
|
5
13
|
|
6
14
|
- 15-05-2020
|
data/README.md
CHANGED
@@ -239,7 +239,7 @@ This can come in handy to force V8 GC runs for example in between requests if yo
|
|
239
239
|
|
240
240
|
Note that this method maps directly to [`v8::Isolate::IdleNotification`](http://bespin.cz/~ondras/html/classv8_1_1Isolate.html#aea16cbb2e351de9a3ae7be2b7cb48297), and that in particular its return value is the same (true if there is no further garbage to collect, false otherwise) and the same caveats apply, in particular that `there is no guarantee that the [call will return] within the time limit.`
|
241
241
|
|
242
|
-
Additionally you may automate this process on a context by defining it with `MiniRacer::Content.new(ensure_gc_after_idle:
|
242
|
+
Additionally you may automate this process on a context by defining it with `MiniRacer::Content.new(ensure_gc_after_idle: 1000)`. Using this will ensure V8 will run a full GC using `context.isolate.low_memory_notification` 1 second after the last eval on the context. Low memory notification is both slower and more aggressive than an idle_notification and will ensure long living isolates use minimal amounts of memory.
|
243
243
|
|
244
244
|
### V8 Runtime flags
|
245
245
|
|
data/lib/mini_racer.rb
CHANGED
@@ -130,23 +130,22 @@ module MiniRacer
|
|
130
130
|
end
|
131
131
|
end
|
132
132
|
|
133
|
-
def initialize(
|
133
|
+
def initialize(max_memory: nil, timeout: nil, isolate: nil, ensure_gc_after_idle: nil, snapshot: nil)
|
134
134
|
options ||= {}
|
135
135
|
|
136
|
-
check_init_options!(
|
136
|
+
check_init_options!(isolate: isolate, snapshot: snapshot, max_memory: max_memory, ensure_gc_after_idle: ensure_gc_after_idle, timeout: timeout)
|
137
137
|
|
138
138
|
@functions = {}
|
139
139
|
@timeout = nil
|
140
140
|
@max_memory = nil
|
141
141
|
@current_exception = nil
|
142
|
-
@timeout =
|
143
|
-
|
144
|
-
|
145
|
-
end
|
142
|
+
@timeout = timeout
|
143
|
+
@max_memory = max_memory
|
144
|
+
|
146
145
|
# false signals it should be fetched if requested
|
147
|
-
@isolate =
|
146
|
+
@isolate = isolate || false
|
148
147
|
|
149
|
-
@ensure_gc_after_idle =
|
148
|
+
@ensure_gc_after_idle = ensure_gc_after_idle
|
150
149
|
|
151
150
|
if @ensure_gc_after_idle
|
152
151
|
@last_eval = nil
|
@@ -162,7 +161,7 @@ module MiniRacer
|
|
162
161
|
@eval_thread = nil
|
163
162
|
|
164
163
|
# defined in the C class
|
165
|
-
init_unsafe(
|
164
|
+
init_unsafe(isolate, snapshot)
|
166
165
|
end
|
167
166
|
|
168
167
|
def isolate
|
@@ -290,6 +289,7 @@ module MiniRacer
|
|
290
289
|
@ensure_gc_mutex.synchronize do
|
291
290
|
@ensure_gc_thread = nil if !@ensure_gc_thread&.alive?
|
292
291
|
@ensure_gc_thread ||= Thread.new do
|
292
|
+
ensure_gc_after_idle_seconds = @ensure_gc_after_idle / 1000.0
|
293
293
|
done = false
|
294
294
|
while !done
|
295
295
|
now = Process.clock_gettime(Process::CLOCK_MONOTONIC)
|
@@ -299,7 +299,7 @@ module MiniRacer
|
|
299
299
|
break
|
300
300
|
end
|
301
301
|
|
302
|
-
if !@eval_thread &&
|
302
|
+
if !@eval_thread && ensure_gc_after_idle_seconds < now - @last_eval
|
303
303
|
@ensure_gc_mutex.synchronize do
|
304
304
|
isolate_mutex.synchronize do
|
305
305
|
if !@eval_thread
|
@@ -310,7 +310,7 @@ module MiniRacer
|
|
310
310
|
end
|
311
311
|
end
|
312
312
|
end
|
313
|
-
sleep
|
313
|
+
sleep ensure_gc_after_idle_seconds if !done
|
314
314
|
end
|
315
315
|
end
|
316
316
|
end
|
@@ -369,15 +369,29 @@ module MiniRacer
|
|
369
369
|
rp.close if rp
|
370
370
|
end
|
371
371
|
|
372
|
-
def check_init_options!(
|
373
|
-
assert_option_is_nil_or_a('isolate',
|
374
|
-
assert_option_is_nil_or_a('snapshot',
|
372
|
+
def check_init_options!(isolate:, snapshot:, max_memory:, ensure_gc_after_idle:, timeout:)
|
373
|
+
assert_option_is_nil_or_a('isolate', isolate, Isolate)
|
374
|
+
assert_option_is_nil_or_a('snapshot', snapshot, Snapshot)
|
375
375
|
|
376
|
-
|
376
|
+
assert_numeric_or_nil('max_memory', max_memory, min_value: 10_000)
|
377
|
+
assert_numeric_or_nil('ensure_gc_after_idle', ensure_gc_after_idle, min_value: 1)
|
378
|
+
assert_numeric_or_nil('timeout', timeout, min_value: 1)
|
379
|
+
|
380
|
+
if isolate && snapshot
|
377
381
|
raise ArgumentError, 'can only pass one of isolate and snapshot options'
|
378
382
|
end
|
379
383
|
end
|
380
384
|
|
385
|
+
def assert_numeric_or_nil(option_name, object, min_value:)
|
386
|
+
if object.is_a?(Numeric) && object < min_value
|
387
|
+
raise ArgumentError, "#{option_name} must be larger than #{min_value}"
|
388
|
+
end
|
389
|
+
|
390
|
+
if !object.nil? && !object.is_a?(Numeric)
|
391
|
+
raise ArgumentError, "#{option_name} must be a number, passed a #{object.inspect}"
|
392
|
+
end
|
393
|
+
end
|
394
|
+
|
381
395
|
def assert_option_is_nil_or_a(option_name, object, klass)
|
382
396
|
unless object.nil? || object.is_a?(klass)
|
383
397
|
raise ArgumentError, "#{option_name} must be a #{klass} object, passed a #{object.inspect}"
|
data/lib/mini_racer/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: mini_racer
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.2.
|
4
|
+
version: 0.2.14
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Sam Saffron
|
@@ -108,9 +108,9 @@ licenses:
|
|
108
108
|
- MIT
|
109
109
|
metadata:
|
110
110
|
bug_tracker_uri: https://github.com/discourse/mini_racer/issues
|
111
|
-
changelog_uri: https://github.com/discourse/mini_racer/blob/v0.2.
|
112
|
-
documentation_uri: https://www.rubydoc.info/gems/mini_racer/0.2.
|
113
|
-
source_code_uri: https://github.com/discourse/mini_racer/tree/v0.2.
|
111
|
+
changelog_uri: https://github.com/discourse/mini_racer/blob/v0.2.14/CHANGELOG
|
112
|
+
documentation_uri: https://www.rubydoc.info/gems/mini_racer/0.2.14
|
113
|
+
source_code_uri: https://github.com/discourse/mini_racer/tree/v0.2.14
|
114
114
|
post_install_message:
|
115
115
|
rdoc_options: []
|
116
116
|
require_paths:
|