libv8 6.3.292.48.1-universal-darwin-18

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: a9ad3c3bd2fd187463d083b31d77e8eaaf39262cb387d88e39fe533a65c62ee0
4
+ data.tar.gz: 8f51d37bae7c07ea20f474e3ea17999ac7b6fd36d50fa3d90ef01a91d8fa8c6c
5
+ SHA512:
6
+ metadata.gz: c7358f2cf440f56f3abacea1ea16f53b6b1fffe8aacf5aeca6c07a0ded33a6ee696bae0121f551f03ef557a07fc6e6ca22241fef5d182bef41109fd2d4bff811
7
+ data.tar.gz: 403febc1856c70342336554385d2289e254a579905a148d8154bdc4764ee2df70215c28d2b54bc147b89b35232fcc9eb18b18d0f7253d0dd97e058f2d57f2af4
@@ -0,0 +1 @@
1
+ --- !ruby/object:Libv8::Location::Vendor {}
data/ext/libv8/arch.rb ADDED
@@ -0,0 +1,20 @@
1
+ require 'rubygems'
2
+
3
+ module Libv8
4
+ module Arch
5
+ module_function
6
+
7
+ def libv8_arch
8
+ case Gem::Platform.local.cpu
9
+ when /^arm(v6.*|v7.*)*$/ then 'arm'
10
+ when /^a(rm|arch)64$/ then 'arm64'
11
+ when /^x86$/ then 'ia32'
12
+ when /^(x86_64|amd64)$/ then 'x64'
13
+ when /^universal$/ then 'x64' # OS X
14
+ else
15
+ warn "Unsupported target: #{Gem::Platform.local.cpu}"
16
+ Gem::Platform.local.cpu
17
+ end
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,89 @@
1
+ require 'yaml'
2
+ require 'pathname'
3
+ require File.expand_path '../paths', __FILE__
4
+
5
+ module Libv8
6
+ class Location
7
+ def install!
8
+ File.open(Pathname(__FILE__).dirname.join('.location.yml'), "w") do |f|
9
+ f.write self.to_yaml
10
+ end
11
+ return 0
12
+ end
13
+
14
+ def self.load!
15
+ File.open(Pathname(__FILE__).dirname.join('.location.yml')) do |f|
16
+ YAML.load f
17
+ end
18
+ end
19
+
20
+ class Vendor < Location
21
+ def install!
22
+ require File.expand_path '../builder', __FILE__
23
+ builder = Libv8::Builder.new
24
+ exit_status = builder.build_libv8!
25
+ super if exit_status == 0
26
+ verify_installation!
27
+ return exit_status
28
+ end
29
+
30
+ def configure(context = MkmfContext.new)
31
+ context.incflags.insert 0, Libv8::Paths.include_paths.map{ |p| "-I#{p}" }.join(" ") + " "
32
+ context.ldflags.insert 0, Libv8::Paths.object_paths.join(" ") + " "
33
+ end
34
+
35
+ def verify_installation!
36
+ include_paths = Libv8::Paths.include_paths
37
+ unless include_paths.detect { |p| Pathname(p).join('v8.h').exist? }
38
+ fail HeaderNotFound, "Unable to locate 'v8.h' in the libv8 header paths: #{include_paths.inspect}"
39
+ end
40
+ Libv8::Paths.object_paths.each do |p|
41
+ fail ArchiveNotFound, p unless File.exist? p
42
+ end
43
+ end
44
+
45
+ class HeaderNotFound < StandardError; end
46
+
47
+ class ArchiveNotFound < StandardError
48
+ def initialize(filename)
49
+ super "libv8 did not install properly, expected binary v8 archive '#{filename}'to exist, but it was not found"
50
+ end
51
+ end
52
+ end
53
+
54
+ class System < Location
55
+ def configure(context = MkmfContext.new)
56
+ context.send(:dir_config, 'v8')
57
+ context.send(:find_header, 'v8.h') or fail NotFoundError
58
+ context.send(:find_header, 'libplatform/libplatform.h') or fail NotFoundError
59
+ context.send(:have_library, 'v8') or fail NotFoundError
60
+ end
61
+
62
+ class NotFoundError < StandardError
63
+ def initialize(*args)
64
+ super(<<-EOS)
65
+ By using --with-system-v8, you have chosen to use the version
66
+ of V8 found on your system and *not* the one that is bundled with
67
+ the libv8 rubygem.
68
+
69
+ However, your system version of v8 could not be located.
70
+
71
+ Please make sure your system version of v8 that is compatible
72
+ with #{Libv8::VERSION} installed. You may need to use the
73
+ --with-v8-dir option if it is installed in a non-standard location
74
+ EOS
75
+ end
76
+ end
77
+ end
78
+
79
+ class MkmfContext
80
+ def incflags
81
+ $INCFLAGS
82
+ end
83
+
84
+ def ldflags
85
+ $LDFLAGS
86
+ end
87
+ end
88
+ end
89
+ end
@@ -0,0 +1,41 @@
1
+ require 'rbconfig'
2
+ require 'shellwords'
3
+ require File.expand_path '../arch', __FILE__
4
+
5
+ module Libv8
6
+ module Paths
7
+ module_function
8
+
9
+ def include_paths
10
+ [Shellwords.escape(File.join(vendored_source_path, 'include'))]
11
+ end
12
+
13
+ def object_paths
14
+ [:base, :libplatform, :libsampler, :libbase, :snapshot].map do |name|
15
+ Shellwords.escape libv8_object(name)
16
+ end
17
+ end
18
+
19
+ def config
20
+ RbConfig::MAKEFILE_CONFIG
21
+ end
22
+
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
+ def vendored_source_path
38
+ File.expand_path "../../../vendor/v8", __FILE__
39
+ end
40
+ end
41
+ end
data/lib/libv8.rb ADDED
@@ -0,0 +1,9 @@
1
+ require 'libv8/version'
2
+ require 'libv8/location'
3
+
4
+ module Libv8
5
+ def self.configure_makefile
6
+ location = Location.load!
7
+ location.configure
8
+ end
9
+ end
@@ -0,0 +1,3 @@
1
+ module Libv8
2
+ VERSION = "6.3.292.48.1"
3
+ end
@@ -0,0 +1,29 @@
1
+ // Copyright 2016 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 V8_LIBPLATFORM_LIBPLATFORM_EXPORT_H_
6
+ #define V8_LIBPLATFORM_LIBPLATFORM_EXPORT_H_
7
+
8
+ #if defined(_WIN32)
9
+
10
+ #ifdef BUILDING_V8_PLATFORM_SHARED
11
+ #define V8_PLATFORM_EXPORT __declspec(dllexport)
12
+ #elif USING_V8_PLATFORM_SHARED
13
+ #define V8_PLATFORM_EXPORT __declspec(dllimport)
14
+ #else
15
+ #define V8_PLATFORM_EXPORT
16
+ #endif // BUILDING_V8_PLATFORM_SHARED
17
+
18
+ #else // defined(_WIN32)
19
+
20
+ // Setup for Linux shared library export.
21
+ #ifdef BUILDING_V8_PLATFORM_SHARED
22
+ #define V8_PLATFORM_EXPORT __attribute__((visibility("default")))
23
+ #else
24
+ #define V8_PLATFORM_EXPORT
25
+ #endif
26
+
27
+ #endif // defined(_WIN32)
28
+
29
+ #endif // V8_LIBPLATFORM_LIBPLATFORM_EXPORT_H_
@@ -0,0 +1,83 @@
1
+ // Copyright 2014 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 V8_LIBPLATFORM_LIBPLATFORM_H_
6
+ #define V8_LIBPLATFORM_LIBPLATFORM_H_
7
+
8
+ #include "libplatform/libplatform-export.h"
9
+ #include "libplatform/v8-tracing.h"
10
+ #include "v8-platform.h" // NOLINT(build/include)
11
+
12
+ namespace v8 {
13
+ namespace platform {
14
+
15
+ enum class IdleTaskSupport { kDisabled, kEnabled };
16
+ enum class InProcessStackDumping { kDisabled, kEnabled };
17
+
18
+ enum class MessageLoopBehavior : bool {
19
+ kDoNotWait = false,
20
+ kWaitForWork = true
21
+ };
22
+
23
+ /**
24
+ * Returns a new instance of the default v8::Platform implementation.
25
+ *
26
+ * The caller will take ownership of the returned pointer. |thread_pool_size|
27
+ * is the number of worker threads to allocate for background jobs. If a value
28
+ * of zero is passed, a suitable default based on the current number of
29
+ * processors online will be chosen.
30
+ * If |idle_task_support| is enabled then the platform will accept idle
31
+ * tasks (IdleTasksEnabled will return true) and will rely on the embedder
32
+ * calling v8::platform::RunIdleTasks to process the idle tasks.
33
+ * If |tracing_controller| is nullptr, the default platform will create a
34
+ * v8::platform::TracingController instance and use it.
35
+ */
36
+ V8_PLATFORM_EXPORT v8::Platform* CreateDefaultPlatform(
37
+ int thread_pool_size = 0,
38
+ IdleTaskSupport idle_task_support = IdleTaskSupport::kDisabled,
39
+ InProcessStackDumping in_process_stack_dumping =
40
+ InProcessStackDumping::kEnabled,
41
+ v8::TracingController* tracing_controller = nullptr);
42
+
43
+ /**
44
+ * Pumps the message loop for the given isolate.
45
+ *
46
+ * The caller has to make sure that this is called from the right thread.
47
+ * Returns true if a task was executed, and false otherwise. Unless requested
48
+ * through the |behavior| parameter, this call does not block if no task is
49
+ * pending. The |platform| has to be created using |CreateDefaultPlatform|.
50
+ */
51
+ V8_PLATFORM_EXPORT bool PumpMessageLoop(
52
+ v8::Platform* platform, v8::Isolate* isolate,
53
+ MessageLoopBehavior behavior = MessageLoopBehavior::kDoNotWait);
54
+
55
+ V8_PLATFORM_EXPORT void EnsureEventLoopInitialized(v8::Platform* platform,
56
+ v8::Isolate* isolate);
57
+
58
+ /**
59
+ * Runs pending idle tasks for at most |idle_time_in_seconds| seconds.
60
+ *
61
+ * The caller has to make sure that this is called from the right thread.
62
+ * This call does not block if no task is pending. The |platform| has to be
63
+ * created using |CreateDefaultPlatform|.
64
+ */
65
+ V8_PLATFORM_EXPORT void RunIdleTasks(v8::Platform* platform,
66
+ v8::Isolate* isolate,
67
+ double idle_time_in_seconds);
68
+
69
+ /**
70
+ * Attempts to set the tracing controller for the given platform.
71
+ *
72
+ * The |platform| has to be created using |CreateDefaultPlatform|.
73
+ *
74
+ * DEPRECATED: Will be removed soon.
75
+ */
76
+ V8_PLATFORM_EXPORT void SetTracingController(
77
+ v8::Platform* platform,
78
+ v8::platform::tracing::TracingController* tracing_controller);
79
+
80
+ } // namespace platform
81
+ } // namespace v8
82
+
83
+ #endif // V8_LIBPLATFORM_LIBPLATFORM_H_
@@ -0,0 +1,284 @@
1
+ // Copyright 2016 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 V8_LIBPLATFORM_V8_TRACING_H_
6
+ #define V8_LIBPLATFORM_V8_TRACING_H_
7
+
8
+ #include <fstream>
9
+ #include <memory>
10
+ #include <unordered_set>
11
+ #include <vector>
12
+
13
+ #include "libplatform/libplatform-export.h"
14
+ #include "v8-platform.h" // NOLINT(build/include)
15
+
16
+ namespace v8 {
17
+
18
+ namespace base {
19
+ class Mutex;
20
+ } // namespace base
21
+
22
+ namespace platform {
23
+ namespace tracing {
24
+
25
+ const int kTraceMaxNumArgs = 2;
26
+
27
+ class V8_PLATFORM_EXPORT TraceObject {
28
+ public:
29
+ union ArgValue {
30
+ bool as_bool;
31
+ uint64_t as_uint;
32
+ int64_t as_int;
33
+ double as_double;
34
+ const void* as_pointer;
35
+ const char* as_string;
36
+ };
37
+
38
+ TraceObject() {}
39
+ ~TraceObject();
40
+ void Initialize(
41
+ char phase, const uint8_t* category_enabled_flag, const char* name,
42
+ const char* scope, uint64_t id, uint64_t bind_id, int num_args,
43
+ const char** arg_names, const uint8_t* arg_types,
44
+ const uint64_t* arg_values,
45
+ std::unique_ptr<v8::ConvertableToTraceFormat>* arg_convertables,
46
+ unsigned int flags);
47
+ void UpdateDuration();
48
+ void InitializeForTesting(
49
+ char phase, const uint8_t* category_enabled_flag, const char* name,
50
+ const char* scope, uint64_t id, uint64_t bind_id, int num_args,
51
+ const char** arg_names, const uint8_t* arg_types,
52
+ const uint64_t* arg_values,
53
+ std::unique_ptr<v8::ConvertableToTraceFormat>* arg_convertables,
54
+ unsigned int flags, int pid, int tid, int64_t ts, int64_t tts,
55
+ uint64_t duration, uint64_t cpu_duration);
56
+
57
+ int pid() const { return pid_; }
58
+ int tid() const { return tid_; }
59
+ char phase() const { return phase_; }
60
+ const uint8_t* category_enabled_flag() const {
61
+ return category_enabled_flag_;
62
+ }
63
+ const char* name() const { return name_; }
64
+ const char* scope() const { return scope_; }
65
+ uint64_t id() const { return id_; }
66
+ uint64_t bind_id() const { return bind_id_; }
67
+ int num_args() const { return num_args_; }
68
+ const char** arg_names() { return arg_names_; }
69
+ uint8_t* arg_types() { return arg_types_; }
70
+ ArgValue* arg_values() { return arg_values_; }
71
+ std::unique_ptr<v8::ConvertableToTraceFormat>* arg_convertables() {
72
+ return arg_convertables_;
73
+ }
74
+ unsigned int flags() const { return flags_; }
75
+ int64_t ts() { return ts_; }
76
+ int64_t tts() { return tts_; }
77
+ uint64_t duration() { return duration_; }
78
+ uint64_t cpu_duration() { return cpu_duration_; }
79
+
80
+ private:
81
+ int pid_;
82
+ int tid_;
83
+ char phase_;
84
+ const char* name_;
85
+ const char* scope_;
86
+ const uint8_t* category_enabled_flag_;
87
+ uint64_t id_;
88
+ uint64_t bind_id_;
89
+ int num_args_ = 0;
90
+ const char* arg_names_[kTraceMaxNumArgs];
91
+ uint8_t arg_types_[kTraceMaxNumArgs];
92
+ ArgValue arg_values_[kTraceMaxNumArgs];
93
+ std::unique_ptr<v8::ConvertableToTraceFormat>
94
+ arg_convertables_[kTraceMaxNumArgs];
95
+ char* parameter_copy_storage_ = nullptr;
96
+ unsigned int flags_;
97
+ int64_t ts_;
98
+ int64_t tts_;
99
+ uint64_t duration_;
100
+ uint64_t cpu_duration_;
101
+
102
+ // Disallow copy and assign
103
+ TraceObject(const TraceObject&) = delete;
104
+ void operator=(const TraceObject&) = delete;
105
+ };
106
+
107
+ class V8_PLATFORM_EXPORT TraceWriter {
108
+ public:
109
+ TraceWriter() {}
110
+ virtual ~TraceWriter() {}
111
+ virtual void AppendTraceEvent(TraceObject* trace_event) = 0;
112
+ virtual void Flush() = 0;
113
+
114
+ static TraceWriter* CreateJSONTraceWriter(std::ostream& stream);
115
+
116
+ private:
117
+ // Disallow copy and assign
118
+ TraceWriter(const TraceWriter&) = delete;
119
+ void operator=(const TraceWriter&) = delete;
120
+ };
121
+
122
+ class V8_PLATFORM_EXPORT TraceBufferChunk {
123
+ public:
124
+ explicit TraceBufferChunk(uint32_t seq);
125
+
126
+ void Reset(uint32_t new_seq);
127
+ bool IsFull() const { return next_free_ == kChunkSize; }
128
+ TraceObject* AddTraceEvent(size_t* event_index);
129
+ TraceObject* GetEventAt(size_t index) { return &chunk_[index]; }
130
+
131
+ uint32_t seq() const { return seq_; }
132
+ size_t size() const { return next_free_; }
133
+
134
+ static const size_t kChunkSize = 64;
135
+
136
+ private:
137
+ size_t next_free_ = 0;
138
+ TraceObject chunk_[kChunkSize];
139
+ uint32_t seq_;
140
+
141
+ // Disallow copy and assign
142
+ TraceBufferChunk(const TraceBufferChunk&) = delete;
143
+ void operator=(const TraceBufferChunk&) = delete;
144
+ };
145
+
146
+ class V8_PLATFORM_EXPORT TraceBuffer {
147
+ public:
148
+ TraceBuffer() {}
149
+ virtual ~TraceBuffer() {}
150
+
151
+ virtual TraceObject* AddTraceEvent(uint64_t* handle) = 0;
152
+ virtual TraceObject* GetEventByHandle(uint64_t handle) = 0;
153
+ virtual bool Flush() = 0;
154
+
155
+ static const size_t kRingBufferChunks = 1024;
156
+
157
+ static TraceBuffer* CreateTraceBufferRingBuffer(size_t max_chunks,
158
+ TraceWriter* trace_writer);
159
+
160
+ private:
161
+ // Disallow copy and assign
162
+ TraceBuffer(const TraceBuffer&) = delete;
163
+ void operator=(const TraceBuffer&) = delete;
164
+ };
165
+
166
+ // Options determines how the trace buffer stores data.
167
+ enum TraceRecordMode {
168
+ // Record until the trace buffer is full.
169
+ RECORD_UNTIL_FULL,
170
+
171
+ // Record until the user ends the trace. The trace buffer is a fixed size
172
+ // and we use it as a ring buffer during recording.
173
+ RECORD_CONTINUOUSLY,
174
+
175
+ // Record until the trace buffer is full, but with a huge buffer size.
176
+ RECORD_AS_MUCH_AS_POSSIBLE,
177
+
178
+ // Echo to console. Events are discarded.
179
+ ECHO_TO_CONSOLE,
180
+ };
181
+
182
+ class V8_PLATFORM_EXPORT TraceConfig {
183
+ public:
184
+ typedef std::vector<std::string> StringList;
185
+
186
+ static TraceConfig* CreateDefaultTraceConfig();
187
+
188
+ TraceConfig() : enable_systrace_(false), enable_argument_filter_(false) {}
189
+ TraceRecordMode GetTraceRecordMode() const { return record_mode_; }
190
+ bool IsSystraceEnabled() const { return enable_systrace_; }
191
+ bool IsArgumentFilterEnabled() const { return enable_argument_filter_; }
192
+
193
+ void SetTraceRecordMode(TraceRecordMode mode) { record_mode_ = mode; }
194
+ void EnableSystrace() { enable_systrace_ = true; }
195
+ void EnableArgumentFilter() { enable_argument_filter_ = true; }
196
+
197
+ void AddIncludedCategory(const char* included_category);
198
+
199
+ bool IsCategoryGroupEnabled(const char* category_group) const;
200
+
201
+ private:
202
+ TraceRecordMode record_mode_;
203
+ bool enable_systrace_ : 1;
204
+ bool enable_argument_filter_ : 1;
205
+ StringList included_categories_;
206
+
207
+ // Disallow copy and assign
208
+ TraceConfig(const TraceConfig&) = delete;
209
+ void operator=(const TraceConfig&) = delete;
210
+ };
211
+
212
+ #if defined(_MSC_VER)
213
+ #define V8_PLATFORM_NON_EXPORTED_BASE(code) \
214
+ __pragma(warning(suppress : 4275)) code
215
+ #else
216
+ #define V8_PLATFORM_NON_EXPORTED_BASE(code) code
217
+ #endif // defined(_MSC_VER)
218
+
219
+ class V8_PLATFORM_EXPORT TracingController
220
+ : public V8_PLATFORM_NON_EXPORTED_BASE(v8::TracingController) {
221
+ public:
222
+ enum Mode { DISABLED = 0, RECORDING_MODE };
223
+
224
+ // The pointer returned from GetCategoryGroupEnabledInternal() points to a
225
+ // value with zero or more of the following bits. Used in this class only.
226
+ // The TRACE_EVENT macros should only use the value as a bool.
227
+ // These values must be in sync with macro values in TraceEvent.h in Blink.
228
+ enum CategoryGroupEnabledFlags {
229
+ // Category group enabled for the recording mode.
230
+ ENABLED_FOR_RECORDING = 1 << 0,
231
+ // Category group enabled by SetEventCallbackEnabled().
232
+ ENABLED_FOR_EVENT_CALLBACK = 1 << 2,
233
+ // Category group enabled to export events to ETW.
234
+ ENABLED_FOR_ETW_EXPORT = 1 << 3
235
+ };
236
+
237
+ TracingController();
238
+ ~TracingController() override;
239
+ void Initialize(TraceBuffer* trace_buffer);
240
+
241
+ // v8::TracingController implementation.
242
+ const uint8_t* GetCategoryGroupEnabled(const char* category_group) override;
243
+ uint64_t AddTraceEvent(
244
+ char phase, const uint8_t* category_enabled_flag, const char* name,
245
+ const char* scope, uint64_t id, uint64_t bind_id, int32_t num_args,
246
+ const char** arg_names, const uint8_t* arg_types,
247
+ const uint64_t* arg_values,
248
+ std::unique_ptr<v8::ConvertableToTraceFormat>* arg_convertables,
249
+ unsigned int flags) override;
250
+ void UpdateTraceEventDuration(const uint8_t* category_enabled_flag,
251
+ const char* name, uint64_t handle) override;
252
+ void AddTraceStateObserver(
253
+ v8::TracingController::TraceStateObserver* observer) override;
254
+ void RemoveTraceStateObserver(
255
+ v8::TracingController::TraceStateObserver* observer) override;
256
+
257
+ void StartTracing(TraceConfig* trace_config);
258
+ void StopTracing();
259
+
260
+ static const char* GetCategoryGroupName(const uint8_t* category_enabled_flag);
261
+
262
+ private:
263
+ const uint8_t* GetCategoryGroupEnabledInternal(const char* category_group);
264
+ void UpdateCategoryGroupEnabledFlag(size_t category_index);
265
+ void UpdateCategoryGroupEnabledFlags();
266
+
267
+ std::unique_ptr<TraceBuffer> trace_buffer_;
268
+ std::unique_ptr<TraceConfig> trace_config_;
269
+ std::unique_ptr<base::Mutex> mutex_;
270
+ std::unordered_set<v8::TracingController::TraceStateObserver*> observers_;
271
+ Mode mode_ = DISABLED;
272
+
273
+ // Disallow copy and assign
274
+ TracingController(const TracingController&) = delete;
275
+ void operator=(const TracingController&) = delete;
276
+ };
277
+
278
+ #undef V8_PLATFORM_NON_EXPORTED_BASE
279
+
280
+ } // namespace tracing
281
+ } // namespace platform
282
+ } // namespace v8
283
+
284
+ #endif // V8_LIBPLATFORM_V8_TRACING_H_