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

Side by Side Diff: vm/snapshot.cc

Issue 10914050: Use external byte arrays for token stream, this moves the token stream out of the isolate heap. For… (Closed) Base URL: http://dart.googlecode.com/svn/branches/bleeding_edge/dart/runtime/
Patch Set: Created 8 years, 3 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 | « vm/snapshot.h ('k') | vm/snapshot_test.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) 2012, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2012, 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/snapshot.h" 5 #include "vm/snapshot.h"
6 6
7 #include "platform/assert.h" 7 #include "platform/assert.h"
8 #include "vm/bigint_operations.h" 8 #include "vm/bigint_operations.h"
9 #include "vm/bootstrap.h" 9 #include "vm/bootstrap.h"
10 #include "vm/exceptions.h" 10 #include "vm/exceptions.h"
(...skipping 138 matching lines...) Expand 10 before | Expand all | Expand 10 after
149 : BaseReader(buffer, size), 149 : BaseReader(buffer, size),
150 kind_(kind), 150 kind_(kind),
151 isolate_(isolate), 151 isolate_(isolate),
152 cls_(Class::Handle()), 152 cls_(Class::Handle()),
153 obj_(Object::Handle()), 153 obj_(Object::Handle()),
154 str_(String::Handle()), 154 str_(String::Handle()),
155 library_(Library::Handle()), 155 library_(Library::Handle()),
156 type_(AbstractType::Handle()), 156 type_(AbstractType::Handle()),
157 type_arguments_(AbstractTypeArguments::Handle()), 157 type_arguments_(AbstractTypeArguments::Handle()),
158 tokens_(Array::Handle()), 158 tokens_(Array::Handle()),
159 stream_(TokenStream::Handle()),
160 data_(ExternalUint8Array::Handle()),
159 backward_references_((kind == Snapshot::kFull) ? 161 backward_references_((kind == Snapshot::kFull) ?
160 kNumInitialReferencesInFullSnapshot : 162 kNumInitialReferencesInFullSnapshot :
161 kNumInitialReferences) { 163 kNumInitialReferences) {
162 } 164 }
163 165
164 166
165 RawObject* SnapshotReader::ReadObject() { 167 RawObject* SnapshotReader::ReadObject() {
166 Object& obj = Object::Handle(ReadObjectImpl()); 168 Object& obj = Object::Handle(ReadObjectImpl());
167 for (intptr_t i = 0; i < backward_references_.length(); i++) { 169 for (intptr_t i = 0; i < backward_references_.length(); i++) {
168 if (!backward_references_[i]->is_deserialized()) { 170 if (!backward_references_[i]->is_deserialized()) {
(...skipping 227 matching lines...) Expand 10 before | Expand all | Expand 10 after
396 398
397 399
398 RawTypeArguments* SnapshotReader::NewTypeArguments(intptr_t len) { 400 RawTypeArguments* SnapshotReader::NewTypeArguments(intptr_t len) {
399 ALLOC_NEW_OBJECT_WITH_LEN(TypeArguments, 401 ALLOC_NEW_OBJECT_WITH_LEN(TypeArguments,
400 Object::type_arguments_class(), 402 Object::type_arguments_class(),
401 len); 403 len);
402 } 404 }
403 405
404 406
405 RawTokenStream* SnapshotReader::NewTokenStream(intptr_t len) { 407 RawTokenStream* SnapshotReader::NewTokenStream(intptr_t len) {
406 ALLOC_NEW_OBJECT_WITH_LEN(TokenStream, 408 ASSERT(kind_ == Snapshot::kFull);
407 Object::token_stream_class(), 409 ASSERT(isolate()->no_gc_scope_depth() != 0);
408 len); 410 cls_ = Object::token_stream_class();
411 stream_ = reinterpret_cast<RawTokenStream*>(
412 AllocateUninitialized(cls_, TokenStream::InstanceSize()));
413 cls_ = object_store()->external_int8_array_class();
414 uint8_t* array = const_cast<uint8_t*>(CurrentBufferAddress());
415 ASSERT(array != NULL);
416 Advance(len);
417 ExternalByteArrayData<uint8_t>* external_data =
418 new ExternalByteArrayData<uint8_t>(array, NULL, NULL);
419 ASSERT(external_data != NULL);
420 data_ = reinterpret_cast<RawExternalUint8Array*>(
421 AllocateUninitialized(cls_, ExternalUint8Array::InstanceSize()));
422 data_.SetExternalData(external_data);
423 data_.SetLength(len);
424 stream_.SetStream(data_);
425 return stream_.raw();
409 } 426 }
410 427
411 428
412 RawContext* SnapshotReader::NewContext(intptr_t num_variables) { 429 RawContext* SnapshotReader::NewContext(intptr_t num_variables) {
413 ASSERT(kind_ == Snapshot::kFull); 430 ASSERT(kind_ == Snapshot::kFull);
414 ASSERT(isolate()->no_gc_scope_depth() != 0); 431 ASSERT(isolate()->no_gc_scope_depth() != 0);
415 cls_ = Object::context_class(); 432 cls_ = Object::context_class();
416 RawContext* obj = reinterpret_cast<RawContext*>( 433 RawContext* obj = reinterpret_cast<RawContext*>(
417 AllocateUninitialized(cls_, Context::InstanceSize(num_variables))); 434 AllocateUninitialized(cls_, Context::InstanceSize(num_variables)));
418 obj->ptr()->num_variables_ = num_variables; 435 obj->ptr()->num_variables_ = num_variables;
(...skipping 734 matching lines...) Expand 10 before | Expand all | Expand 10 after
1153 1170
1154 1171
1155 void MessageWriter::WriteMessage(const Object& obj) { 1172 void MessageWriter::WriteMessage(const Object& obj) {
1156 ASSERT(kind() == Snapshot::kMessage); 1173 ASSERT(kind() == Snapshot::kMessage);
1157 WriteObject(obj.raw()); 1174 WriteObject(obj.raw());
1158 UnmarkAll(); 1175 UnmarkAll();
1159 } 1176 }
1160 1177
1161 1178
1162 } // namespace dart 1179 } // namespace dart
OLDNEW
« no previous file with comments | « vm/snapshot.h ('k') | vm/snapshot_test.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698