OLD | NEW |
1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "gin/public/isolate_holder.h" | 5 #include "gin/public/isolate_holder.h" |
6 | 6 |
7 #include <stdlib.h> | 7 #include <stdlib.h> |
8 #include <string.h> | 8 #include <string.h> |
9 | 9 |
10 #include "base/files/memory_mapped_file.h" | 10 #include "base/files/memory_mapped_file.h" |
11 #include "base/logging.h" | 11 #include "base/logging.h" |
12 #include "base/message_loop/message_loop.h" | 12 #include "base/message_loop/message_loop.h" |
| 13 #include "base/metrics/field_trial.h" |
13 #include "base/rand_util.h" | 14 #include "base/rand_util.h" |
14 #include "base/strings/sys_string_conversions.h" | 15 #include "base/strings/sys_string_conversions.h" |
15 #include "base/sys_info.h" | 16 #include "base/sys_info.h" |
16 #include "crypto/sha2.h" | 17 #include "crypto/sha2.h" |
17 #include "gin/array_buffer.h" | 18 #include "gin/array_buffer.h" |
18 #include "gin/debug_impl.h" | 19 #include "gin/debug_impl.h" |
19 #include "gin/function_template.h" | 20 #include "gin/function_template.h" |
20 #include "gin/per_isolate_data.h" | 21 #include "gin/per_isolate_data.h" |
21 #include "gin/public/v8_platform.h" | 22 #include "gin/public/v8_platform.h" |
22 #include "gin/run_microtasks_observer.h" | 23 #include "gin/run_microtasks_observer.h" |
(...skipping 236 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
259 void IsolateHolder::Initialize(ScriptMode mode, | 260 void IsolateHolder::Initialize(ScriptMode mode, |
260 v8::ArrayBuffer::Allocator* allocator) { | 261 v8::ArrayBuffer::Allocator* allocator) { |
261 CHECK(allocator); | 262 CHECK(allocator); |
262 static bool v8_is_initialized = false; | 263 static bool v8_is_initialized = false; |
263 if (v8_is_initialized) | 264 if (v8_is_initialized) |
264 return; | 265 return; |
265 v8::V8::InitializePlatform(V8Platform::Get()); | 266 v8::V8::InitializePlatform(V8Platform::Get()); |
266 v8::V8::SetArrayBufferAllocator(allocator); | 267 v8::V8::SetArrayBufferAllocator(allocator); |
267 g_array_buffer_allocator = allocator; | 268 g_array_buffer_allocator = allocator; |
268 if (mode == gin::IsolateHolder::kStrictMode) { | 269 if (mode == gin::IsolateHolder::kStrictMode) { |
269 static const char v8_flags[] = "--use_strict"; | 270 static const char use_strict[] = "--use_strict"; |
270 v8::V8::SetFlagsFromString(v8_flags, sizeof(v8_flags) - 1); | 271 v8::V8::SetFlagsFromString(use_strict, sizeof(use_strict) - 1); |
| 272 } |
| 273 if (base::FieldTrialList::FindFullName("V8VerifyHeap") == "Enabled") { |
| 274 static const char verify_heap[] = "--verify_heap"; |
| 275 v8::V8::SetFlagsFromString(verify_heap, sizeof(verify_heap) - 1); |
271 } | 276 } |
272 v8::V8::SetEntropySource(&GenerateEntropy); | 277 v8::V8::SetEntropySource(&GenerateEntropy); |
273 #if defined(V8_USE_EXTERNAL_STARTUP_DATA) | 278 #if defined(V8_USE_EXTERNAL_STARTUP_DATA) |
274 v8::StartupData natives; | 279 v8::StartupData natives; |
275 natives.data = reinterpret_cast<const char*>(g_mapped_natives->data()); | 280 natives.data = reinterpret_cast<const char*>(g_mapped_natives->data()); |
276 natives.raw_size = static_cast<int>(g_mapped_natives->length()); | 281 natives.raw_size = static_cast<int>(g_mapped_natives->length()); |
277 v8::V8::SetNativesDataBlob(&natives); | 282 v8::V8::SetNativesDataBlob(&natives); |
278 | 283 |
279 v8::StartupData snapshot; | 284 v8::StartupData snapshot; |
280 snapshot.data = reinterpret_cast<const char*>(g_mapped_snapshot->data()); | 285 snapshot.data = reinterpret_cast<const char*>(g_mapped_snapshot->data()); |
(...skipping 10 matching lines...) Expand all Loading... |
291 base::MessageLoop::current()->AddTaskObserver(task_observer_.get()); | 296 base::MessageLoop::current()->AddTaskObserver(task_observer_.get()); |
292 } | 297 } |
293 | 298 |
294 void IsolateHolder::RemoveRunMicrotasksObserver() { | 299 void IsolateHolder::RemoveRunMicrotasksObserver() { |
295 DCHECK(task_observer_.get()); | 300 DCHECK(task_observer_.get()); |
296 base::MessageLoop::current()->RemoveTaskObserver(task_observer_.get()); | 301 base::MessageLoop::current()->RemoveTaskObserver(task_observer_.get()); |
297 task_observer_.reset(); | 302 task_observer_.reset(); |
298 } | 303 } |
299 | 304 |
300 } // namespace gin | 305 } // namespace gin |
OLD | NEW |