Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(311)

Side by Side Diff: gin/isolate_holder.cc

Issue 1088683003: Adding v8_isolate_memory_dump_provider. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Rebase for interface changes and fixing tests. Created 5 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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/logging.h" 10 #include "base/logging.h"
11 #include "base/message_loop/message_loop.h" 11 #include "base/message_loop/message_loop.h"
12 #include "base/sys_info.h" 12 #include "base/sys_info.h"
13 #include "gin/debug_impl.h" 13 #include "gin/debug_impl.h"
14 #include "gin/function_template.h" 14 #include "gin/function_template.h"
15 #include "gin/per_isolate_data.h" 15 #include "gin/per_isolate_data.h"
16 #include "gin/run_microtasks_observer.h" 16 #include "gin/run_microtasks_observer.h"
17 #include "gin/v8_initializer.h" 17 #include "gin/v8_initializer.h"
18 #include "gin/v8_isolate_memory_dump_provider.h"
18 19
19 namespace gin { 20 namespace gin {
20 21
21 namespace { 22 namespace {
22 v8::ArrayBuffer::Allocator* g_array_buffer_allocator = nullptr; 23 v8::ArrayBuffer::Allocator* g_array_buffer_allocator = nullptr;
23 } // namespace 24 } // namespace
24 25
25 IsolateHolder::IsolateHolder() : IsolateHolder(AccessMode::kSingleThread) { 26 IsolateHolder::IsolateHolder() : IsolateHolder(AccessMode::kSingleThread) {
26 } 27 }
27 28
28 IsolateHolder::IsolateHolder(AccessMode access_mode) 29 IsolateHolder::IsolateHolder(AccessMode access_mode)
29 : access_mode_(access_mode) { 30 : access_mode_(access_mode) {
30 v8::ArrayBuffer::Allocator* allocator = g_array_buffer_allocator; 31 v8::ArrayBuffer::Allocator* allocator = g_array_buffer_allocator;
31 CHECK(allocator) << "You need to invoke gin::IsolateHolder::Initialize first"; 32 CHECK(allocator) << "You need to invoke gin::IsolateHolder::Initialize first";
32 v8::Isolate::CreateParams params; 33 v8::Isolate::CreateParams params;
33 params.entry_hook = DebugImpl::GetFunctionEntryHook(); 34 params.entry_hook = DebugImpl::GetFunctionEntryHook();
34 params.code_event_handler = DebugImpl::GetJitCodeEventHandler(); 35 params.code_event_handler = DebugImpl::GetJitCodeEventHandler();
35 params.constraints.ConfigureDefaults(base::SysInfo::AmountOfPhysicalMemory(), 36 params.constraints.ConfigureDefaults(base::SysInfo::AmountOfPhysicalMemory(),
36 base::SysInfo::AmountOfVirtualMemory()); 37 base::SysInfo::AmountOfVirtualMemory());
37 isolate_ = v8::Isolate::New(params); 38 isolate_ = v8::Isolate::New(params);
38 isolate_data_.reset(new PerIsolateData(isolate_, allocator)); 39 isolate_data_.reset(new PerIsolateData(isolate_, allocator));
40 isolate_memory_dump_provider_.reset(new V8IsolateMemoryDumpProvider(this));
39 #if defined(OS_WIN) 41 #if defined(OS_WIN)
40 { 42 {
41 void* code_range; 43 void* code_range;
42 size_t size; 44 size_t size;
43 isolate_->GetCodeRange(&code_range, &size); 45 isolate_->GetCodeRange(&code_range, &size);
44 Debug::CodeRangeCreatedCallback callback = 46 Debug::CodeRangeCreatedCallback callback =
45 DebugImpl::GetCodeRangeCreatedCallback(); 47 DebugImpl::GetCodeRangeCreatedCallback();
46 if (code_range && size && callback) 48 if (code_range && size && callback)
47 callback(code_range, size); 49 callback(code_range, size);
48 } 50 }
49 #endif 51 #endif
50 } 52 }
51 53
52 IsolateHolder::~IsolateHolder() { 54 IsolateHolder::~IsolateHolder() {
53 if (task_observer_.get()) 55 if (task_observer_.get())
54 base::MessageLoop::current()->RemoveTaskObserver(task_observer_.get()); 56 base::MessageLoop::current()->RemoveTaskObserver(task_observer_.get());
55 #if defined(OS_WIN) 57 #if defined(OS_WIN)
56 { 58 {
57 void* code_range; 59 void* code_range;
58 size_t size; 60 size_t size;
59 isolate_->GetCodeRange(&code_range, &size); 61 isolate_->GetCodeRange(&code_range, &size);
60 Debug::CodeRangeDeletedCallback callback = 62 Debug::CodeRangeDeletedCallback callback =
61 DebugImpl::GetCodeRangeDeletedCallback(); 63 DebugImpl::GetCodeRangeDeletedCallback();
62 if (code_range && callback) 64 if (code_range && callback)
63 callback(code_range); 65 callback(code_range);
64 } 66 }
65 #endif 67 #endif
68 isolate_memory_dump_provider_.reset();
66 isolate_data_.reset(); 69 isolate_data_.reset();
67 isolate_->Dispose(); 70 isolate_->Dispose();
68 isolate_ = NULL; 71 isolate_ = NULL;
69 } 72 }
70 73
71 // static 74 // static
72 void IsolateHolder::Initialize(ScriptMode mode, 75 void IsolateHolder::Initialize(ScriptMode mode,
73 v8::ArrayBuffer::Allocator* allocator) { 76 v8::ArrayBuffer::Allocator* allocator) {
74 CHECK(allocator); 77 CHECK(allocator);
75 gin::V8Initializer::Initialize(mode, allocator); 78 gin::V8Initializer::Initialize(mode, allocator);
76 g_array_buffer_allocator = allocator; 79 g_array_buffer_allocator = allocator;
77 } 80 }
78 81
79 void IsolateHolder::AddRunMicrotasksObserver() { 82 void IsolateHolder::AddRunMicrotasksObserver() {
80 DCHECK(!task_observer_.get()); 83 DCHECK(!task_observer_.get());
81 task_observer_.reset(new RunMicrotasksObserver(isolate_));; 84 task_observer_.reset(new RunMicrotasksObserver(isolate_));;
82 base::MessageLoop::current()->AddTaskObserver(task_observer_.get()); 85 base::MessageLoop::current()->AddTaskObserver(task_observer_.get());
83 } 86 }
84 87
85 void IsolateHolder::RemoveRunMicrotasksObserver() { 88 void IsolateHolder::RemoveRunMicrotasksObserver() {
86 DCHECK(task_observer_.get()); 89 DCHECK(task_observer_.get());
87 base::MessageLoop::current()->RemoveTaskObserver(task_observer_.get()); 90 base::MessageLoop::current()->RemoveTaskObserver(task_observer_.get());
88 task_observer_.reset(); 91 task_observer_.reset();
89 } 92 }
90 93
91 } // namespace gin 94 } // namespace gin
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698