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

Side by Side Diff: runtime/vm/dart.cc

Issue 1123813002: Move symbol table from per isolate snapshot to vm isolate snapshot, this reduces the per isolate in… (Closed) Base URL: http://dart.googlecode.com/svn/branches/bleeding_edge/dart/
Patch Set: 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 | Annotate | Revision Log
« no previous file with comments | « runtime/vm/benchmark_test.cc ('k') | runtime/vm/dart_api_impl.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file
2 // for details. All rights reserved. Use of this source code is governed by a 2 // for details. All rights reserved. Use of this source code is governed by a
3 // BSD-style license that can be found in the LICENSE file. 3 // BSD-style license that can be found in the LICENSE file.
4 4
5 #include "vm/dart.h" 5 #include "vm/dart.h"
6 6
7 #include "vm/code_observers.h" 7 #include "vm/code_observers.h"
8 #include "vm/cpu.h" 8 #include "vm/cpu.h"
9 #include "vm/dart_api_state.h" 9 #include "vm/dart_api_state.h"
10 #include "vm/dart_entry.h" 10 #include "vm/dart_entry.h"
(...skipping 113 matching lines...) Expand 10 before | Expand all | Expand 10 after
124 0, // New gen size 0; VM isolate should only allocate in old. 124 0, // New gen size 0; VM isolate should only allocate in old.
125 FLAG_old_gen_heap_size * MBInWords, 125 FLAG_old_gen_heap_size * MBInWords,
126 FLAG_external_max_size * MBInWords); 126 FLAG_external_max_size * MBInWords);
127 ObjectStore::Init(vm_isolate_); 127 ObjectStore::Init(vm_isolate_);
128 TargetCPUFeatures::InitOnce(); 128 TargetCPUFeatures::InitOnce();
129 Object::InitOnce(vm_isolate_); 129 Object::InitOnce(vm_isolate_);
130 ArgumentsDescriptor::InitOnce(); 130 ArgumentsDescriptor::InitOnce();
131 StubCode::InitOnce(); 131 StubCode::InitOnce();
132 // Now that the needed stub has been generated, set the stack limit. 132 // Now that the needed stub has been generated, set the stack limit.
133 vm_isolate_->InitializeStackLimit(); 133 vm_isolate_->InitializeStackLimit();
134 Symbols::InitOnce(vm_isolate_); 134 if (vm_isolate_snapshot != NULL) {
135 const Snapshot* snapshot = Snapshot::SetupFromBuffer(vm_isolate_snapshot);
136 if (snapshot == NULL) {
137 return "Invalid vm isolate snapshot seen.";
138 }
139 ASSERT(snapshot->kind() == Snapshot::kFull);
140 VmIsolateSnapshotReader reader(snapshot->content(),
141 snapshot->length(),
142 zone.GetZone());
143 const Error& error = Error::Handle(reader.ReadVmIsolateSnapshot());
144 if (!error.IsNull()) {
145 return error.ToCString();
146 }
147 if (FLAG_trace_isolates) {
148 OS::Print("Size of vm isolate snapshot = %" Pd "\n",
149 snapshot->length());
150 vm_isolate_->heap()->PrintSizes();
151 vm_isolate_->megamorphic_cache_table()->PrintSizes();
152 intptr_t size;
153 intptr_t capacity;
154 Symbols::GetStats(vm_isolate_, &size, &capacity);
155 OS::Print("VM Isolate: Number of symbols : %" Pd "\n", size);
156 OS::Print("VM Isolate: Symbol table capacity : %" Pd "\n", capacity);
157 }
158 Symbols::InitOnceFromSnapshot(vm_isolate_);
159 } else {
160 Symbols::InitOnce(vm_isolate_);
161 }
135 Scanner::InitOnce(); 162 Scanner::InitOnce();
136 #if defined(TARGET_ARCH_IA32) || defined(TARGET_ARCH_X64) 163 #if defined(TARGET_ARCH_IA32) || defined(TARGET_ARCH_X64)
137 // Dart VM requires at least SSE2. 164 // Dart VM requires at least SSE2.
138 if (!TargetCPUFeatures::sse2_supported()) { 165 if (!TargetCPUFeatures::sse2_supported()) {
139 return "SSE2 is required."; 166 return "SSE2 is required.";
140 } 167 }
141 #endif 168 #endif
142 if (vm_isolate_snapshot != NULL) {
143 // Initializing the VM isolate from a snapshot is not implemented yet.
144 USE(vm_isolate_snapshot);
145 }
146 Object::FinalizeVMIsolate(vm_isolate_); 169 Object::FinalizeVMIsolate(vm_isolate_);
170 #if defined(DEBUG)
171 vm_isolate_->heap()->Verify(kRequireMarked);
172 #endif
147 } 173 }
148 // There is a planned and known asymmetry here: We enter one scope for the VM 174 // There is a planned and known asymmetry here: We enter one scope for the VM
149 // isolate so that we can allocate the "persistent" scoped handles for the 175 // isolate so that we can allocate the "persistent" scoped handles for the
150 // predefined API values (such as Dart_True, Dart_False and Dart_Null). 176 // predefined API values (such as Dart_True, Dart_False and Dart_Null).
151 Dart_EnterScope(); 177 Dart_EnterScope();
152 Api::InitHandles(); 178 Api::InitHandles();
153 179
154 Thread::ExitIsolate(); // Unregister the VM isolate from this thread. 180 Thread::ExitIsolate(); // Unregister the VM isolate from this thread.
155 Isolate::SetCreateCallback(create); 181 Isolate::SetCreateCallback(create);
156 Isolate::SetInterruptCallback(interrupt); 182 Isolate::SetInterruptCallback(interrupt);
(...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after
234 const Snapshot* snapshot = Snapshot::SetupFromBuffer(snapshot_buffer); 260 const Snapshot* snapshot = Snapshot::SetupFromBuffer(snapshot_buffer);
235 if (snapshot == NULL) { 261 if (snapshot == NULL) {
236 const String& message = String::Handle( 262 const String& message = String::Handle(
237 String::New("Invalid snapshot.")); 263 String::New("Invalid snapshot."));
238 return ApiError::New(message); 264 return ApiError::New(message);
239 } 265 }
240 ASSERT(snapshot->kind() == Snapshot::kFull); 266 ASSERT(snapshot->kind() == Snapshot::kFull);
241 if (FLAG_trace_isolates) { 267 if (FLAG_trace_isolates) {
242 OS::Print("Size of isolate snapshot = %" Pd "\n", snapshot->length()); 268 OS::Print("Size of isolate snapshot = %" Pd "\n", snapshot->length());
243 } 269 }
244 SnapshotReader reader(snapshot->content(), snapshot->length(), 270 IsolateSnapshotReader reader(snapshot->content(),
245 Snapshot::kFull, isolate, zone.GetZone()); 271 snapshot->length(),
272 isolate,
273 zone.GetZone());
246 const Error& error = Error::Handle(reader.ReadFullSnapshot()); 274 const Error& error = Error::Handle(reader.ReadFullSnapshot());
247 if (!error.IsNull()) { 275 if (!error.IsNull()) {
248 return error.raw(); 276 return error.raw();
249 } 277 }
250 if (FLAG_trace_isolates) { 278 if (FLAG_trace_isolates) {
251 isolate->heap()->PrintSizes(); 279 isolate->heap()->PrintSizes();
252 isolate->megamorphic_cache_table()->PrintSizes(); 280 isolate->megamorphic_cache_table()->PrintSizes();
253 } 281 }
282 } else {
283 // Populate the isolate's symbol table with all symbols from the
284 // VM isolate. We do this so that when we generate a full snapshot
285 // for the isolate we have a unified symbol table that we can then
286 // read into the VM isolate.
287 Symbols::AddPredefinedSymbolsToIsolate();
254 } 288 }
255 289
256 Object::VerifyBuiltinVtables(); 290 Object::VerifyBuiltinVtables();
257 291
258 StubCode::Init(isolate); 292 StubCode::Init(isolate);
259 if (snapshot_buffer == NULL) { 293 if (snapshot_buffer == NULL) {
260 if (!isolate->object_store()->PreallocateObjects()) { 294 if (!isolate->object_store()->PreallocateObjects()) {
261 return isolate->object_store()->sticky_error(); 295 return isolate->object_store()->sticky_error();
262 } 296 }
263 } 297 }
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after
314 return predefined_handles_->handles_.AllocateScopedHandle(); 348 return predefined_handles_->handles_.AllocateScopedHandle();
315 } 349 }
316 350
317 351
318 bool Dart::IsReadOnlyHandle(uword address) { 352 bool Dart::IsReadOnlyHandle(uword address) {
319 ASSERT(predefined_handles_ != NULL); 353 ASSERT(predefined_handles_ != NULL);
320 return predefined_handles_->handles_.IsValidScopedHandle(address); 354 return predefined_handles_->handles_.IsValidScopedHandle(address);
321 } 355 }
322 356
323 } // namespace dart 357 } // namespace dart
OLDNEW
« no previous file with comments | « runtime/vm/benchmark_test.cc ('k') | runtime/vm/dart_api_impl.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698