libv8 7.8.279.23.0beta1-x86_64-linux → 8.4.255.0.1-x86_64-linux

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.
Files changed (51) hide show
  1. checksums.yaml +4 -4
  2. data/ext/libv8/location.rb +1 -1
  3. data/lib/libv8/version.rb +1 -1
  4. data/vendor/v8/include/cppgc/allocation.h +124 -0
  5. data/vendor/v8/include/cppgc/garbage-collected.h +192 -0
  6. data/vendor/v8/include/cppgc/heap.h +50 -0
  7. data/vendor/v8/include/cppgc/internal/accessors.h +26 -0
  8. data/vendor/v8/include/cppgc/internal/api-constants.h +44 -0
  9. data/vendor/v8/include/cppgc/internal/compiler-specific.h +26 -0
  10. data/vendor/v8/include/cppgc/internal/finalizer-trait.h +90 -0
  11. data/vendor/v8/include/cppgc/internal/gc-info.h +43 -0
  12. data/vendor/v8/include/cppgc/internal/logging.h +50 -0
  13. data/vendor/v8/include/cppgc/internal/persistent-node.h +109 -0
  14. data/vendor/v8/include/cppgc/internal/pointer-policies.h +133 -0
  15. data/vendor/v8/include/cppgc/internal/prefinalizer-handler.h +31 -0
  16. data/vendor/v8/include/cppgc/liveness-broker.h +50 -0
  17. data/vendor/v8/include/cppgc/macros.h +26 -0
  18. data/vendor/v8/include/cppgc/member.h +206 -0
  19. data/vendor/v8/include/cppgc/persistent.h +304 -0
  20. data/vendor/v8/include/cppgc/platform.h +31 -0
  21. data/vendor/v8/include/cppgc/prefinalizer.h +54 -0
  22. data/vendor/v8/include/cppgc/source-location.h +59 -0
  23. data/vendor/v8/include/cppgc/trace-trait.h +67 -0
  24. data/vendor/v8/include/cppgc/type-traits.h +109 -0
  25. data/vendor/v8/include/cppgc/visitor.h +137 -0
  26. data/vendor/v8/include/libplatform/libplatform.h +13 -10
  27. data/vendor/v8/include/libplatform/v8-tracing.h +36 -22
  28. data/vendor/v8/include/v8-fast-api-calls.h +412 -0
  29. data/vendor/v8/include/v8-inspector-protocol.h +4 -4
  30. data/vendor/v8/include/v8-inspector.h +57 -27
  31. data/vendor/v8/include/v8-internal.h +23 -21
  32. data/vendor/v8/include/v8-platform.h +164 -40
  33. data/vendor/v8/include/v8-profiler.h +27 -23
  34. data/vendor/v8/include/v8-util.h +1 -1
  35. data/vendor/v8/include/v8-version-string.h +1 -1
  36. data/vendor/v8/include/v8-version.h +4 -4
  37. data/vendor/v8/include/v8-wasm-trap-handler-posix.h +1 -1
  38. data/vendor/v8/include/v8-wasm-trap-handler-win.h +1 -1
  39. data/vendor/v8/include/v8.h +1219 -484
  40. data/vendor/v8/include/v8config.h +105 -51
  41. data/vendor/v8/out.gn/libv8/obj/libv8_libbase.a +0 -0
  42. data/vendor/v8/out.gn/libv8/obj/libv8_libplatform.a +0 -0
  43. data/vendor/v8/out.gn/libv8/obj/libv8_monolith.a +0 -0
  44. data/vendor/v8/out.gn/libv8/obj/third_party/icu/libicui18n.a +0 -0
  45. data/vendor/v8/out.gn/libv8/obj/third_party/icu/libicuuc.a +0 -0
  46. data/vendor/v8/out.gn/libv8/obj/third_party/zlib/google/libcompression_utils_portable.a +0 -0
  47. data/vendor/v8/out.gn/libv8/obj/third_party/zlib/libchrome_zlib.a +0 -0
  48. metadata +31 -9
  49. data/vendor/v8/include/v8-testing.h +0 -48
  50. data/vendor/v8/out.gn/libv8/obj/third_party/inspector_protocol/libbindings.a +0 -0
  51. data/vendor/v8/out.gn/libv8/obj/third_party/inspector_protocol/libencoding.a +0 -0
@@ -0,0 +1,137 @@
1
+ // Copyright 2020 the V8 project authors. All rights reserved.
2
+ // Use of this source code is governed by a BSD-style license that can be
3
+ // found in the LICENSE file.
4
+
5
+ #ifndef INCLUDE_CPPGC_VISITOR_H_
6
+ #define INCLUDE_CPPGC_VISITOR_H_
7
+
8
+ #include "cppgc/garbage-collected.h"
9
+ #include "cppgc/internal/logging.h"
10
+ #include "cppgc/internal/pointer-policies.h"
11
+ #include "cppgc/liveness-broker.h"
12
+ #include "cppgc/member.h"
13
+ #include "cppgc/source-location.h"
14
+ #include "cppgc/trace-trait.h"
15
+
16
+ namespace cppgc {
17
+ namespace internal {
18
+ class VisitorBase;
19
+ } // namespace internal
20
+
21
+ using WeakCallback = void (*)(const LivenessBroker&, const void*);
22
+
23
+ /**
24
+ * Visitor passed to trace methods. All managed pointers must have called the
25
+ * visitor's trace method on them.
26
+ */
27
+ class Visitor {
28
+ public:
29
+ template <typename T>
30
+ void Trace(const Member<T>& member) {
31
+ const T* value = member.GetRawAtomic();
32
+ CPPGC_DCHECK(value != kSentinelPointer);
33
+ Trace(value);
34
+ }
35
+
36
+ template <typename T>
37
+ void Trace(const WeakMember<T>& weak_member) {
38
+ static_assert(sizeof(T), "T must be fully defined");
39
+ static_assert(internal::IsGarbageCollectedType<T>::value,
40
+ "T must be GarabgeCollected or GarbageCollectedMixin type");
41
+
42
+ const T* value = weak_member.GetRawAtomic();
43
+
44
+ // Bailout assumes that WeakMember emits write barrier.
45
+ if (!value) {
46
+ return;
47
+ }
48
+
49
+ // TODO(chromium:1056170): DCHECK (or similar) for deleted values as they
50
+ // should come in at a different path.
51
+ VisitWeak(value, TraceTrait<T>::GetTraceDescriptor(value),
52
+ &HandleWeak<WeakMember<T>>, &weak_member);
53
+ }
54
+
55
+ template <typename Persistent,
56
+ std::enable_if_t<Persistent::IsStrongPersistent::value>* = nullptr>
57
+ void TraceRoot(const Persistent& p, const SourceLocation& loc) {
58
+ using PointeeType = typename Persistent::PointeeType;
59
+ static_assert(sizeof(PointeeType),
60
+ "Persistent's pointee type must be fully defined");
61
+ static_assert(internal::IsGarbageCollectedType<PointeeType>::value,
62
+ "Persisent's pointee type must be GarabgeCollected or "
63
+ "GarbageCollectedMixin");
64
+ if (!p.Get()) {
65
+ return;
66
+ }
67
+ VisitRoot(p.Get(), TraceTrait<PointeeType>::GetTraceDescriptor(p.Get()),
68
+ loc);
69
+ }
70
+
71
+ template <typename Persistent,
72
+ std::enable_if_t<!Persistent::IsStrongPersistent::value>* = nullptr>
73
+ void TraceRoot(const Persistent& p, const SourceLocation& loc) {
74
+ using PointeeType = typename Persistent::PointeeType;
75
+ static_assert(sizeof(PointeeType),
76
+ "Persistent's pointee type must be fully defined");
77
+ static_assert(internal::IsGarbageCollectedType<PointeeType>::value,
78
+ "Persisent's pointee type must be GarabgeCollected or "
79
+ "GarbageCollectedMixin");
80
+ VisitWeakRoot(&p, &HandleWeak<Persistent>);
81
+ }
82
+
83
+ template <typename T, void (T::*method)(const LivenessBroker&)>
84
+ void RegisterWeakCallbackMethod(const T* obj) {
85
+ RegisterWeakCallback(&WeakCallbackMethodDelegate<T, method>, obj);
86
+ }
87
+
88
+ virtual void RegisterWeakCallback(WeakCallback, const void*) {}
89
+
90
+ protected:
91
+ virtual void Visit(const void* self, TraceDescriptor) {}
92
+ virtual void VisitWeak(const void* self, TraceDescriptor, WeakCallback,
93
+ const void* weak_member) {}
94
+ virtual void VisitRoot(const void*, TraceDescriptor,
95
+ const SourceLocation& loc) {}
96
+ virtual void VisitWeakRoot(const void*, WeakCallback) {}
97
+
98
+ private:
99
+ template <typename T, void (T::*method)(const LivenessBroker&)>
100
+ static void WeakCallbackMethodDelegate(const LivenessBroker& info,
101
+ const void* self) {
102
+ // Callback is registered through a potential const Trace method but needs
103
+ // to be able to modify fields. See HandleWeak.
104
+ (const_cast<T*>(static_cast<const T*>(self))->*method)(info);
105
+ }
106
+
107
+ template <typename PointerType>
108
+ static void HandleWeak(const LivenessBroker& info, const void* object) {
109
+ const PointerType* weak = static_cast<const PointerType*>(object);
110
+ const auto* raw = weak->Get();
111
+ if (raw && !info.IsHeapObjectAlive(raw)) {
112
+ // Object is passed down through the marker as const. Alternatives are
113
+ // - non-const Trace method;
114
+ // - mutable pointer in MemberBase;
115
+ const_cast<PointerType*>(weak)->Clear();
116
+ }
117
+ }
118
+
119
+ Visitor() = default;
120
+
121
+ template <typename T>
122
+ void Trace(const T* t) {
123
+ static_assert(sizeof(T), "T must be fully defined");
124
+ static_assert(internal::IsGarbageCollectedType<T>::value,
125
+ "T must be GarabgeCollected or GarbageCollectedMixin type");
126
+ if (!t) {
127
+ return;
128
+ }
129
+ Visit(t, TraceTrait<T>::GetTraceDescriptor(t));
130
+ }
131
+
132
+ friend class internal::VisitorBase;
133
+ };
134
+
135
+ } // namespace cppgc
136
+
137
+ #endif // INCLUDE_CPPGC_VISITOR_H_
@@ -5,10 +5,12 @@
5
5
  #ifndef V8_LIBPLATFORM_LIBPLATFORM_H_
6
6
  #define V8_LIBPLATFORM_LIBPLATFORM_H_
7
7
 
8
+ #include <memory>
9
+
8
10
  #include "libplatform/libplatform-export.h"
9
11
  #include "libplatform/v8-tracing.h"
10
- #include "v8-platform.h" // NOLINT(build/include)
11
- #include "v8config.h" // NOLINT(build/include)
12
+ #include "v8-platform.h" // NOLINT(build/include_directory)
13
+ #include "v8config.h" // NOLINT(build/include_directory)
12
14
 
13
15
  namespace v8 {
14
16
  namespace platform {
@@ -45,9 +47,11 @@ V8_PLATFORM_EXPORT std::unique_ptr<v8::Platform> NewDefaultPlatform(
45
47
  * Pumps the message loop for the given isolate.
46
48
  *
47
49
  * The caller has to make sure that this is called from the right thread.
48
- * Returns true if a task was executed, and false otherwise. Unless requested
49
- * through the |behavior| parameter, this call does not block if no task is
50
- * pending. The |platform| has to be created using |NewDefaultPlatform|.
50
+ * Returns true if a task was executed, and false otherwise. If the call to
51
+ * PumpMessageLoop is nested within another call to PumpMessageLoop, only
52
+ * nestable tasks may run. Otherwise, any task may run. Unless requested through
53
+ * the |behavior| parameter, this call does not block if no task is pending. The
54
+ * |platform| has to be created using |NewDefaultPlatform|.
51
55
  */
52
56
  V8_PLATFORM_EXPORT bool PumpMessageLoop(
53
57
  v8::Platform* platform, v8::Isolate* isolate,
@@ -70,11 +74,10 @@ V8_PLATFORM_EXPORT void RunIdleTasks(v8::Platform* platform,
70
74
  * The |platform| has to be created using |NewDefaultPlatform|.
71
75
  *
72
76
  */
73
- V8_PLATFORM_EXPORT V8_DEPRECATE_SOON(
74
- "Access the DefaultPlatform directly",
75
- void SetTracingController(
76
- v8::Platform* platform,
77
- v8::platform::tracing::TracingController* tracing_controller));
77
+ V8_DEPRECATE_SOON("Access the DefaultPlatform directly")
78
+ V8_PLATFORM_EXPORT void SetTracingController(
79
+ v8::Platform* platform,
80
+ v8::platform::tracing::TracingController* tracing_controller);
78
81
 
79
82
  } // namespace platform
80
83
  } // namespace v8
@@ -12,9 +12,12 @@
12
12
  #include <vector>
13
13
 
14
14
  #include "libplatform/libplatform-export.h"
15
- #include "v8-platform.h" // NOLINT(build/include)
15
+ #include "v8-platform.h" // NOLINT(build/include_directory)
16
16
 
17
17
  namespace perfetto {
18
+ namespace trace_processor {
19
+ class TraceProcessorStorage;
20
+ }
18
21
  class TracingSession;
19
22
  }
20
23
 
@@ -28,14 +31,13 @@ namespace platform {
28
31
  namespace tracing {
29
32
 
30
33
  class TraceEventListener;
31
- class JSONTraceEventListener;
32
34
 
33
35
  const int kTraceMaxNumArgs = 2;
34
36
 
35
37
  class V8_PLATFORM_EXPORT TraceObject {
36
38
  public:
37
39
  union ArgValue {
38
- bool as_bool;
40
+ V8_DEPRECATED("use as_uint ? true : false") bool as_bool;
39
41
  uint64_t as_uint;
40
42
  int64_t as_int;
41
43
  double as_double;
@@ -197,6 +199,9 @@ class V8_PLATFORM_EXPORT TraceConfig {
197
199
 
198
200
  TraceConfig() : enable_systrace_(false), enable_argument_filter_(false) {}
199
201
  TraceRecordMode GetTraceRecordMode() const { return record_mode_; }
202
+ const StringList& GetEnabledCategories() const {
203
+ return included_categories_;
204
+ }
200
205
  bool IsSystraceEnabled() const { return enable_systrace_; }
201
206
  bool IsArgumentFilterEnabled() const { return enable_argument_filter_; }
202
207
 
@@ -229,6 +234,17 @@ class V8_PLATFORM_EXPORT TraceConfig {
229
234
  class V8_PLATFORM_EXPORT TracingController
230
235
  : public V8_PLATFORM_NON_EXPORTED_BASE(v8::TracingController) {
231
236
  public:
237
+ TracingController();
238
+ ~TracingController() override;
239
+
240
+ #if defined(V8_USE_PERFETTO)
241
+ // Must be called before StartTracing() if V8_USE_PERFETTO is true. Provides
242
+ // the output stream for the JSON trace data.
243
+ void InitializeForPerfetto(std::ostream* output_stream);
244
+ // Provide an optional listener for testing that will receive trace events.
245
+ // Must be called before StartTracing().
246
+ void SetTraceEventListenerForTesting(TraceEventListener* listener);
247
+ #else // defined(V8_USE_PERFETTO)
232
248
  // The pointer returned from GetCategoryGroupEnabled() points to a value with
233
249
  // zero or more of the following bits. Used in this class only. The
234
250
  // TRACE_EVENT macros should only use the value as a bool. These values must
@@ -242,19 +258,8 @@ class V8_PLATFORM_EXPORT TracingController
242
258
  ENABLED_FOR_ETW_EXPORT = 1 << 3
243
259
  };
244
260
 
245
- TracingController();
246
- ~TracingController() override;
247
-
248
261
  // Takes ownership of |trace_buffer|.
249
262
  void Initialize(TraceBuffer* trace_buffer);
250
- #ifdef V8_USE_PERFETTO
251
- // Must be called before StartTracing() if V8_USE_PERFETTO is true. Provides
252
- // the output stream for the JSON trace data.
253
- void InitializeForPerfetto(std::ostream* output_stream);
254
- // Provide an optional listener for testing that will receive trace events.
255
- // Must be called before StartTracing().
256
- void SetTraceEventListenerForTesting(TraceEventListener* listener);
257
- #endif
258
263
 
259
264
  // v8::TracingController implementation.
260
265
  const uint8_t* GetCategoryGroupEnabled(const char* category_group) override;
@@ -274,6 +279,10 @@ class V8_PLATFORM_EXPORT TracingController
274
279
  unsigned int flags, int64_t timestamp) override;
275
280
  void UpdateTraceEventDuration(const uint8_t* category_enabled_flag,
276
281
  const char* name, uint64_t handle) override;
282
+
283
+ static const char* GetCategoryGroupName(const uint8_t* category_enabled_flag);
284
+ #endif // !defined(V8_USE_PERFETTO)
285
+
277
286
  void AddTraceStateObserver(
278
287
  v8::TracingController::TraceStateObserver* observer) override;
279
288
  void RemoveTraceStateObserver(
@@ -282,27 +291,32 @@ class V8_PLATFORM_EXPORT TracingController
282
291
  void StartTracing(TraceConfig* trace_config);
283
292
  void StopTracing();
284
293
 
285
- static const char* GetCategoryGroupName(const uint8_t* category_enabled_flag);
286
-
287
294
  protected:
295
+ #if !defined(V8_USE_PERFETTO)
288
296
  virtual int64_t CurrentTimestampMicroseconds();
289
297
  virtual int64_t CurrentCpuTimestampMicroseconds();
298
+ #endif // !defined(V8_USE_PERFETTO)
290
299
 
291
300
  private:
301
+ #if !defined(V8_USE_PERFETTO)
292
302
  void UpdateCategoryGroupEnabledFlag(size_t category_index);
293
303
  void UpdateCategoryGroupEnabledFlags();
304
+ #endif // !defined(V8_USE_PERFETTO)
294
305
 
295
- std::unique_ptr<TraceBuffer> trace_buffer_;
296
- std::unique_ptr<TraceConfig> trace_config_;
297
306
  std::unique_ptr<base::Mutex> mutex_;
298
- std::unordered_set<v8::TracingController::TraceStateObserver*> observers_;
307
+ std::unique_ptr<TraceConfig> trace_config_;
299
308
  std::atomic_bool recording_{false};
300
- #ifdef V8_USE_PERFETTO
309
+ std::unordered_set<v8::TracingController::TraceStateObserver*> observers_;
310
+
311
+ #if defined(V8_USE_PERFETTO)
301
312
  std::ostream* output_stream_ = nullptr;
302
- std::unique_ptr<JSONTraceEventListener> json_listener_;
313
+ std::unique_ptr<perfetto::trace_processor::TraceProcessorStorage>
314
+ trace_processor_;
303
315
  TraceEventListener* listener_for_testing_ = nullptr;
304
316
  std::unique_ptr<perfetto::TracingSession> tracing_session_;
305
- #endif
317
+ #else // !defined(V8_USE_PERFETTO)
318
+ std::unique_ptr<TraceBuffer> trace_buffer_;
319
+ #endif // !defined(V8_USE_PERFETTO)
306
320
 
307
321
  // Disallow copy and assign
308
322
  TracingController(const TracingController&) = delete;