libv8 6.3.292.48.1-universal-darwin-18 → 6.7.288.46.1-universal-darwin-18

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: a9ad3c3bd2fd187463d083b31d77e8eaaf39262cb387d88e39fe533a65c62ee0
4
- data.tar.gz: 8f51d37bae7c07ea20f474e3ea17999ac7b6fd36d50fa3d90ef01a91d8fa8c6c
3
+ metadata.gz: 15271aa00592a8386a532641e73bd70146462e0b47ed01d2fbef3f0f7907ef7d
4
+ data.tar.gz: 38bbb38ea7dbc3d80ba8228cf573bd1e88a3f54deabaefaae508c2698d6bca2d
5
5
  SHA512:
6
- metadata.gz: c7358f2cf440f56f3abacea1ea16f53b6b1fffe8aacf5aeca6c07a0ded33a6ee696bae0121f551f03ef557a07fc6e6ca22241fef5d182bef41109fd2d4bff811
7
- data.tar.gz: 403febc1856c70342336554385d2289e254a579905a148d8154bdc4764ee2df70215c28d2b54bc147b89b35232fcc9eb18b18d0f7253d0dd97e058f2d57f2af4
6
+ metadata.gz: 5b3008c4e01e4dd9746f36df5cff924a9aa3cb82be3a42a06ca4fa11b6da38d27a4e08a436c1e399016c8ac4d9f3958239314c0e5808a636ca542f3399cbfcb6
7
+ data.tar.gz: c53517c2e2873689551814490653031a9247be2eebeea4720481c2b07e8a1a3dd994f4d2105b73fc6206725dfeed1b1d8af5775c3c5f90ce3b2a6c41abaebd57
data/ext/libv8/paths.rb CHANGED
@@ -1,6 +1,5 @@
1
1
  require 'rbconfig'
2
2
  require 'shellwords'
3
- require File.expand_path '../arch', __FILE__
4
3
 
5
4
  module Libv8
6
5
  module Paths
@@ -11,29 +10,17 @@ module Libv8
11
10
  end
12
11
 
13
12
  def object_paths
14
- [:base, :libplatform, :libsampler, :libbase, :snapshot].map do |name|
15
- Shellwords.escape libv8_object(name)
16
- end
13
+ [Shellwords.escape(File.join(vendored_source_path,
14
+ 'out.gn',
15
+ 'libv8',
16
+ 'obj',
17
+ "libv8_monolith.#{config['LIBEXT']}"))]
17
18
  end
18
19
 
19
20
  def config
20
21
  RbConfig::MAKEFILE_CONFIG
21
22
  end
22
23
 
23
- def libv8_object(name)
24
- filename = "#{libv8_profile}/libv8_#{name}.#{config['LIBEXT']}"
25
- unless File.exist? filename
26
- filename = "#{libv8_profile}/obj.target/tools/gyp/libv8_#{name}.#{config['LIBEXT']}"
27
- end
28
- return filename
29
- end
30
-
31
- def libv8_profile
32
- base = "#{vendored_source_path}/out/#{Libv8::Arch.libv8_arch}"
33
- debug = "#{base}.debug"
34
- File.exist?(debug) ? debug : "#{base}.release"
35
- end
36
-
37
24
  def vendored_source_path
38
25
  File.expand_path "../../../vendor/v8", __FILE__
39
26
  end
data/lib/libv8/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Libv8
2
- VERSION = "6.3.292.48.1"
2
+ VERSION = "6.7.288.46.1"
3
3
  end
@@ -8,6 +8,7 @@
8
8
  #include "libplatform/libplatform-export.h"
9
9
  #include "libplatform/v8-tracing.h"
10
10
  #include "v8-platform.h" // NOLINT(build/include)
11
+ #include "v8config.h" // NOLINT(build/include)
11
12
 
12
13
  namespace v8 {
13
14
  namespace platform {
@@ -33,12 +34,21 @@ enum class MessageLoopBehavior : bool {
33
34
  * If |tracing_controller| is nullptr, the default platform will create a
34
35
  * v8::platform::TracingController instance and use it.
35
36
  */
36
- V8_PLATFORM_EXPORT v8::Platform* CreateDefaultPlatform(
37
+ V8_PLATFORM_EXPORT std::unique_ptr<v8::Platform> NewDefaultPlatform(
37
38
  int thread_pool_size = 0,
38
39
  IdleTaskSupport idle_task_support = IdleTaskSupport::kDisabled,
39
40
  InProcessStackDumping in_process_stack_dumping =
40
- InProcessStackDumping::kEnabled,
41
- v8::TracingController* tracing_controller = nullptr);
41
+ InProcessStackDumping::kDisabled,
42
+ std::unique_ptr<v8::TracingController> tracing_controller = {});
43
+
44
+ V8_PLATFORM_EXPORT V8_DEPRECATE_SOON(
45
+ "Use NewDefaultPlatform instead",
46
+ v8::Platform* CreateDefaultPlatform(
47
+ int thread_pool_size = 0,
48
+ IdleTaskSupport idle_task_support = IdleTaskSupport::kDisabled,
49
+ InProcessStackDumping in_process_stack_dumping =
50
+ InProcessStackDumping::kDisabled,
51
+ v8::TracingController* tracing_controller = nullptr));
42
52
 
43
53
  /**
44
54
  * Pumps the message loop for the given isolate.
@@ -46,21 +56,23 @@ V8_PLATFORM_EXPORT v8::Platform* CreateDefaultPlatform(
46
56
  * The caller has to make sure that this is called from the right thread.
47
57
  * Returns true if a task was executed, and false otherwise. Unless requested
48
58
  * through the |behavior| parameter, this call does not block if no task is
49
- * pending. The |platform| has to be created using |CreateDefaultPlatform|.
59
+ * pending. The |platform| has to be created using |NewDefaultPlatform|.
50
60
  */
51
61
  V8_PLATFORM_EXPORT bool PumpMessageLoop(
52
62
  v8::Platform* platform, v8::Isolate* isolate,
53
63
  MessageLoopBehavior behavior = MessageLoopBehavior::kDoNotWait);
54
64
 
55
- V8_PLATFORM_EXPORT void EnsureEventLoopInitialized(v8::Platform* platform,
56
- v8::Isolate* isolate);
65
+ V8_PLATFORM_EXPORT V8_DEPRECATE_SOON(
66
+ "This function has become obsolete and is essentially a nop",
67
+ void EnsureEventLoopInitialized(v8::Platform* platform,
68
+ v8::Isolate* isolate));
57
69
 
58
70
  /**
59
71
  * Runs pending idle tasks for at most |idle_time_in_seconds| seconds.
60
72
  *
61
73
  * The caller has to make sure that this is called from the right thread.
62
74
  * This call does not block if no task is pending. The |platform| has to be
63
- * created using |CreateDefaultPlatform|.
75
+ * created using |NewDefaultPlatform|.
64
76
  */
65
77
  V8_PLATFORM_EXPORT void RunIdleTasks(v8::Platform* platform,
66
78
  v8::Isolate* isolate,
@@ -69,13 +81,14 @@ V8_PLATFORM_EXPORT void RunIdleTasks(v8::Platform* platform,
69
81
  /**
70
82
  * Attempts to set the tracing controller for the given platform.
71
83
  *
72
- * The |platform| has to be created using |CreateDefaultPlatform|.
84
+ * The |platform| has to be created using |NewDefaultPlatform|.
73
85
  *
74
- * DEPRECATED: Will be removed soon.
75
86
  */
76
- V8_PLATFORM_EXPORT void SetTracingController(
77
- v8::Platform* platform,
78
- v8::platform::tracing::TracingController* tracing_controller);
87
+ V8_PLATFORM_EXPORT V8_DEPRECATE_SOON(
88
+ "Access the DefaultPlatform directly",
89
+ void SetTracingController(
90
+ v8::Platform* platform,
91
+ v8::platform::tracing::TracingController* tracing_controller));
79
92
 
80
93
  } // namespace platform
81
94
  } // namespace v8
@@ -43,8 +43,8 @@ class V8_PLATFORM_EXPORT TraceObject {
43
43
  const char** arg_names, const uint8_t* arg_types,
44
44
  const uint64_t* arg_values,
45
45
  std::unique_ptr<v8::ConvertableToTraceFormat>* arg_convertables,
46
- unsigned int flags);
47
- void UpdateDuration();
46
+ unsigned int flags, int64_t timestamp, int64_t cpu_timestamp);
47
+ void UpdateDuration(int64_t timestamp, int64_t cpu_timestamp);
48
48
  void InitializeForTesting(
49
49
  char phase, const uint8_t* category_enabled_flag, const char* name,
50
50
  const char* scope, uint64_t id, uint64_t bind_id, int num_args,
@@ -247,6 +247,13 @@ class V8_PLATFORM_EXPORT TracingController
247
247
  const uint64_t* arg_values,
248
248
  std::unique_ptr<v8::ConvertableToTraceFormat>* arg_convertables,
249
249
  unsigned int flags) override;
250
+ uint64_t AddTraceEventWithTimestamp(
251
+ char phase, const uint8_t* category_enabled_flag, const char* name,
252
+ const char* scope, uint64_t id, uint64_t bind_id, int32_t num_args,
253
+ const char** arg_names, const uint8_t* arg_types,
254
+ const uint64_t* arg_values,
255
+ std::unique_ptr<v8::ConvertableToTraceFormat>* arg_convertables,
256
+ unsigned int flags, int64_t timestamp) override;
250
257
  void UpdateTraceEventDuration(const uint8_t* category_enabled_flag,
251
258
  const char* name, uint64_t handle) override;
252
259
  void AddTraceStateObserver(
@@ -259,6 +266,10 @@ class V8_PLATFORM_EXPORT TracingController
259
266
 
260
267
  static const char* GetCategoryGroupName(const uint8_t* category_enabled_flag);
261
268
 
269
+ protected:
270
+ virtual int64_t CurrentTimestampMicroseconds();
271
+ virtual int64_t CurrentCpuTimestampMicroseconds();
272
+
262
273
  private:
263
274
  const uint8_t* GetCategoryGroupEnabledInternal(const char* category_group);
264
275
  void UpdateCategoryGroupEnabledFlag(size_t category_index);
@@ -149,8 +149,9 @@ class V8_EXPORT V8InspectorSession {
149
149
 
150
150
  // Remote objects.
151
151
  virtual std::unique_ptr<protocol::Runtime::API::RemoteObject> wrapObject(
152
- v8::Local<v8::Context>, v8::Local<v8::Value>,
153
- const StringView& groupName) = 0;
152
+ v8::Local<v8::Context>, v8::Local<v8::Value>, const StringView& groupName,
153
+ bool generatePreview) = 0;
154
+
154
155
  virtual bool unwrapObject(std::unique_ptr<StringBuffer>* error,
155
156
  const StringView& objectId, v8::Local<v8::Value>*,
156
157
  v8::Local<v8::Context>*,
@@ -215,6 +216,20 @@ class V8_EXPORT V8InspectorClient {
215
216
  virtual void maxAsyncCallStackDepthChanged(int depth) {}
216
217
  };
217
218
 
219
+ // These stack trace ids are intended to be passed between debuggers and be
220
+ // resolved later. This allows to track cross-debugger calls and step between
221
+ // them if a single client connects to multiple debuggers.
222
+ struct V8_EXPORT V8StackTraceId {
223
+ uintptr_t id;
224
+ std::pair<int64_t, int64_t> debugger_id;
225
+
226
+ V8StackTraceId();
227
+ V8StackTraceId(uintptr_t id, const std::pair<int64_t, int64_t> debugger_id);
228
+ ~V8StackTraceId() = default;
229
+
230
+ bool IsInvalid() const;
231
+ };
232
+
218
233
  class V8_EXPORT V8Inspector {
219
234
  public:
220
235
  static std::unique_ptr<V8Inspector> create(v8::Isolate*, V8InspectorClient*);
@@ -237,6 +252,11 @@ class V8_EXPORT V8Inspector {
237
252
  virtual void asyncTaskFinished(void* task) = 0;
238
253
  virtual void allAsyncTasksCanceled() = 0;
239
254
 
255
+ virtual V8StackTraceId storeCurrentStackTrace(
256
+ const StringView& description) = 0;
257
+ virtual void externalAsyncTaskStarted(const V8StackTraceId& parent) = 0;
258
+ virtual void externalAsyncTaskFinished(const V8StackTraceId& parent) = 0;
259
+
240
260
  // Exceptions instrumentation.
241
261
  virtual unsigned exceptionThrown(
242
262
  v8::Local<v8::Context>, const StringView& message,
@@ -7,9 +7,12 @@
7
7
 
8
8
  #include <stddef.h>
9
9
  #include <stdint.h>
10
+ #include <stdlib.h> // For abort.
10
11
  #include <memory>
11
12
  #include <string>
12
13
 
14
+ #include "v8config.h" // NOLINT(build/include)
15
+
13
16
  namespace v8 {
14
17
 
15
18
  class Isolate;
@@ -36,6 +39,51 @@ class IdleTask {
36
39
  virtual void Run(double deadline_in_seconds) = 0;
37
40
  };
38
41
 
42
+ /**
43
+ * A TaskRunner allows scheduling of tasks. The TaskRunner may still be used to
44
+ * post tasks after the isolate gets destructed, but these tasks may not get
45
+ * executed anymore. All tasks posted to a given TaskRunner will be invoked in
46
+ * sequence. Tasks can be posted from any thread.
47
+ */
48
+ class TaskRunner {
49
+ public:
50
+ /**
51
+ * Schedules a task to be invoked by this TaskRunner. The TaskRunner
52
+ * implementation takes ownership of |task|.
53
+ */
54
+ virtual void PostTask(std::unique_ptr<Task> task) = 0;
55
+
56
+ /**
57
+ * Schedules a task to be invoked by this TaskRunner. The task is scheduled
58
+ * after the given number of seconds |delay_in_seconds|. The TaskRunner
59
+ * implementation takes ownership of |task|.
60
+ */
61
+ virtual void PostDelayedTask(std::unique_ptr<Task> task,
62
+ double delay_in_seconds) = 0;
63
+
64
+ /**
65
+ * Schedules an idle task to be invoked by this TaskRunner. The task is
66
+ * scheduled when the embedder is idle. Requires that
67
+ * TaskRunner::SupportsIdleTasks(isolate) is true. Idle tasks may be reordered
68
+ * relative to other task types and may be starved for an arbitrarily long
69
+ * time if no idle time is available. The TaskRunner implementation takes
70
+ * ownership of |task|.
71
+ */
72
+ virtual void PostIdleTask(std::unique_ptr<IdleTask> task) = 0;
73
+
74
+ /**
75
+ * Returns true if idle tasks are enabled for this TaskRunner.
76
+ */
77
+ virtual bool IdleTasksEnabled() = 0;
78
+
79
+ TaskRunner() = default;
80
+ virtual ~TaskRunner() = default;
81
+
82
+ private:
83
+ TaskRunner(const TaskRunner&) = delete;
84
+ TaskRunner& operator=(const TaskRunner&) = delete;
85
+ };
86
+
39
87
  /**
40
88
  * The interface represents complex arguments to trace events.
41
89
  */
@@ -74,11 +122,11 @@ class TracingController {
74
122
  }
75
123
 
76
124
  /**
77
- * Adds a trace event to the platform tracing system. This function call is
125
+ * Adds a trace event to the platform tracing system. These function calls are
78
126
  * usually the result of a TRACE_* macro from trace_event_common.h when
79
127
  * tracing and the category of the particular trace are enabled. It is not
80
- * advisable to call this function on its own; it is really only meant to be
81
- * used by the trace macros. The returned handle can be used by
128
+ * advisable to call these functions on their own; they are really only meant
129
+ * to be used by the trace macros. The returned handle can be used by
82
130
  * UpdateTraceEventDuration to update the duration of COMPLETE events.
83
131
  */
84
132
  virtual uint64_t AddTraceEvent(
@@ -90,6 +138,15 @@ class TracingController {
90
138
  unsigned int flags) {
91
139
  return 0;
92
140
  }
141
+ virtual uint64_t AddTraceEventWithTimestamp(
142
+ char phase, const uint8_t* category_enabled_flag, const char* name,
143
+ const char* scope, uint64_t id, uint64_t bind_id, int32_t num_args,
144
+ const char** arg_names, const uint8_t* arg_types,
145
+ const uint64_t* arg_values,
146
+ std::unique_ptr<ConvertableToTraceFormat>* arg_convertables,
147
+ unsigned int flags, int64_t timestamp) {
148
+ return 0;
149
+ }
93
150
 
94
151
  /**
95
152
  * Sets the duration field of a COMPLETE trace event. It must be called with
@@ -112,6 +169,74 @@ class TracingController {
112
169
  virtual void RemoveTraceStateObserver(TraceStateObserver*) {}
113
170
  };
114
171
 
172
+ /**
173
+ * A V8 memory page allocator.
174
+ *
175
+ * Can be implemented by an embedder to manage large host OS allocations.
176
+ */
177
+ class PageAllocator {
178
+ public:
179
+ virtual ~PageAllocator() = default;
180
+
181
+ /**
182
+ * Gets the page granularity for AllocatePages and FreePages. Addresses and
183
+ * lengths for those calls should be multiples of AllocatePageSize().
184
+ */
185
+ virtual size_t AllocatePageSize() = 0;
186
+
187
+ /**
188
+ * Gets the page granularity for SetPermissions and ReleasePages. Addresses
189
+ * and lengths for those calls should be multiples of CommitPageSize().
190
+ */
191
+ virtual size_t CommitPageSize() = 0;
192
+
193
+ /**
194
+ * Sets the random seed so that GetRandomMmapAddr() will generate repeatable
195
+ * sequences of random mmap addresses.
196
+ */
197
+ virtual void SetRandomMmapSeed(int64_t seed) = 0;
198
+
199
+ /**
200
+ * Returns a randomized address, suitable for memory allocation under ASLR.
201
+ * The address will be aligned to AllocatePageSize.
202
+ */
203
+ virtual void* GetRandomMmapAddr() = 0;
204
+
205
+ /**
206
+ * Memory permissions.
207
+ */
208
+ enum Permission {
209
+ kNoAccess,
210
+ kReadWrite,
211
+ // TODO(hpayer): Remove this flag. Memory should never be rwx.
212
+ kReadWriteExecute,
213
+ kReadExecute
214
+ };
215
+
216
+ /**
217
+ * Allocates memory in range with the given alignment and permission.
218
+ */
219
+ virtual void* AllocatePages(void* address, size_t length, size_t alignment,
220
+ Permission permissions) = 0;
221
+
222
+ /**
223
+ * Frees memory in a range that was allocated by a call to AllocatePages.
224
+ */
225
+ virtual bool FreePages(void* address, size_t length) = 0;
226
+
227
+ /**
228
+ * Releases memory in a range that was allocated by a call to AllocatePages.
229
+ */
230
+ virtual bool ReleasePages(void* address, size_t length,
231
+ size_t new_length) = 0;
232
+
233
+ /**
234
+ * Sets permissions on pages in an allocated range.
235
+ */
236
+ virtual bool SetPermissions(void* address, size_t length,
237
+ Permission permissions) = 0;
238
+ };
239
+
115
240
  /**
116
241
  * V8 Platform abstraction layer.
117
242
  *
@@ -132,6 +257,14 @@ class Platform {
132
257
 
133
258
  virtual ~Platform() = default;
134
259
 
260
+ /**
261
+ * Allows the embedder to manage memory page allocations.
262
+ */
263
+ virtual PageAllocator* GetPageAllocator() {
264
+ // TODO(bbudge) Make this abstract after all embedders implement this.
265
+ return nullptr;
266
+ }
267
+
135
268
  /**
136
269
  * Enables the embedder to respond in cases where V8 can't allocate large
137
270
  * blocks of memory. V8 retries the failed allocation once after calling this
@@ -139,16 +272,89 @@ class Platform {
139
272
  * error.
140
273
  * Embedder overrides of this function must NOT call back into V8.
141
274
  */
142
- virtual void OnCriticalMemoryPressure() {}
275
+ virtual void OnCriticalMemoryPressure() {
276
+ // TODO(bbudge) Remove this when embedders override the following method.
277
+ // See crbug.com/634547.
278
+ }
279
+
280
+ /**
281
+ * Enables the embedder to respond in cases where V8 can't allocate large
282
+ * memory regions. The |length| parameter is the amount of memory needed.
283
+ * Returns true if memory is now available. Returns false if no memory could
284
+ * be made available. V8 will retry allocations until this method returns
285
+ * false.
286
+ *
287
+ * Embedder overrides of this function must NOT call back into V8.
288
+ */
289
+ virtual bool OnCriticalMemoryPressure(size_t length) { return false; }
290
+
291
+ /**
292
+ * Gets the number of worker threads used by GetWorkerThreadsTaskRunner() and
293
+ * CallOnWorkerThread(). This can be used to estimate the number of tasks a
294
+ * work package should be split into. A return value of 0 means that there are
295
+ * no worker threads available. Note that a value of 0 won't prohibit V8 from
296
+ * posting tasks using |CallOnWorkerThread|.
297
+ */
298
+ virtual int NumberOfWorkerThreads() {
299
+ return static_cast<int>(NumberOfAvailableBackgroundThreads());
300
+ }
301
+
302
+ /**
303
+ * Deprecated. Use NumberOfWorkerThreads() instead.
304
+ * TODO(gab): Remove this when all embedders override
305
+ * NumberOfWorkerThreads() instead.
306
+ */
307
+ V8_DEPRECATE_SOON(
308
+ "NumberOfAvailableBackgroundThreads() is deprecated, use "
309
+ "NumberOfAvailableBackgroundThreads() instead.",
310
+ virtual size_t NumberOfAvailableBackgroundThreads()) {
311
+ return 0;
312
+ }
313
+
314
+ /**
315
+ * Returns a TaskRunner which can be used to post a task on the foreground.
316
+ * This function should only be called from a foreground thread.
317
+ */
318
+ virtual std::shared_ptr<v8::TaskRunner> GetForegroundTaskRunner(
319
+ Isolate* isolate) {
320
+ // TODO(ahaas): Make this function abstract after it got implemented on all
321
+ // platforms.
322
+ return {};
323
+ }
324
+
325
+ /**
326
+ * Returns a TaskRunner which can be used to post a task on a background.
327
+ * This function should only be called from a foreground thread.
328
+ */
329
+ V8_DEPRECATE_SOON(
330
+ "GetBackgroundTaskRunner() is deprecated, use "
331
+ "GetWorkerThreadsTaskRunner() "
332
+ "instead.",
333
+ virtual std::shared_ptr<v8::TaskRunner> GetBackgroundTaskRunner(
334
+ Isolate* isolate)) {
335
+ // TODO(gab): Remove this method when all embedders have moved to
336
+ // GetWorkerThreadsTaskRunner().
337
+
338
+ // An implementation needs to be provided here because this is called by the
339
+ // default GetWorkerThreadsTaskRunner() implementation below. In practice
340
+ // however, all code either:
341
+ // - Overrides GetWorkerThreadsTaskRunner() (thus not making this call) --
342
+ // i.e. all v8 code.
343
+ // - Overrides this method (thus not making this call) -- i.e. all
344
+ // unadapted embedders.
345
+ abort();
346
+ }
143
347
 
144
348
  /**
145
- * Gets the number of threads that are used to execute background tasks. Is
146
- * used to estimate the number of tasks a work package should be split into.
147
- * A return value of 0 means that there are no background threads available.
148
- * Note that a value of 0 won't prohibit V8 from posting tasks using
149
- * |CallOnBackgroundThread|.
349
+ * Returns a TaskRunner which can be used to post async tasks on a worker.
350
+ * This function should only be called from a foreground thread.
150
351
  */
151
- virtual size_t NumberOfAvailableBackgroundThreads() { return 0; }
352
+ virtual std::shared_ptr<v8::TaskRunner> GetWorkerThreadsTaskRunner(
353
+ Isolate* isolate) {
354
+ // TODO(gab): Make this function abstract after it got implemented on all
355
+ // platforms.
356
+ return GetBackgroundTaskRunner(isolate);
357
+ }
152
358
 
153
359
  /**
154
360
  * Schedules a task to be invoked on a background thread. |expected_runtime|
@@ -157,8 +363,37 @@ class Platform {
157
363
  * of tasks wrt order of scheduling, nor is there a guarantee about the
158
364
  * thread the task will be run on.
159
365
  */
160
- virtual void CallOnBackgroundThread(Task* task,
161
- ExpectedRuntime expected_runtime) = 0;
366
+ V8_DEPRECATE_SOON(
367
+ "ExpectedRuntime is deprecated, use CallOnWorkerThread() instead.",
368
+ virtual void CallOnBackgroundThread(Task* task,
369
+ ExpectedRuntime expected_runtime)) {
370
+ // An implementation needs to be provided here because this is called by the
371
+ // default implementation below. In practice however, all code either:
372
+ // - Overrides the new method (thus not making this call) -- i.e. all v8
373
+ // code.
374
+ // - Overrides this method (thus not making this call) -- i.e. all
375
+ // unadapted embedders.
376
+ abort();
377
+ }
378
+
379
+ /**
380
+ * Schedules a task to be invoked on a worker thread.
381
+ * TODO(gab): Make pure virtual when all embedders override this instead of
382
+ * CallOnBackgroundThread().
383
+ */
384
+ virtual void CallOnWorkerThread(std::unique_ptr<Task> task) {
385
+ CallOnBackgroundThread(task.release(), kShortRunningTask);
386
+ }
387
+
388
+ /**
389
+ * Schedules a task that blocks the main thread to be invoked with
390
+ * high-priority on a worker thread.
391
+ */
392
+ virtual void CallBlockingTaskOnWorkerThread(std::unique_ptr<Task> task) {
393
+ // Embedders may optionally override this to process these tasks in a high
394
+ // priority pool.
395
+ CallOnWorkerThread(std::move(task));
396
+ }
162
397
 
163
398
  /**
164
399
  * Schedules a task to be invoked on a foreground thread wrt a specific