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

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

Issue 11040062: Renamed Zone->StackZone, BaseZone->Zone, in preparation for changing isolate->get_zone() to return … (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: code review changes Created 8 years, 2 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/runtime_entry.h ('k') | runtime/vm/symbols.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 "include/dart_debugger_api.h" 5 #include "include/dart_debugger_api.h"
6 #include "platform/assert.h" 6 #include "platform/assert.h"
7 #include "vm/bigint_operations.h" 7 #include "vm/bigint_operations.h"
8 #include "vm/class_finalizer.h" 8 #include "vm/class_finalizer.h"
9 #include "vm/dart_api_impl.h" 9 #include "vm/dart_api_impl.h"
10 #include "vm/dart_api_message.h" 10 #include "vm/dart_api_message.h"
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after
51 51
52 52
53 static uint8_t* malloc_allocator( 53 static uint8_t* malloc_allocator(
54 uint8_t* ptr, intptr_t old_size, intptr_t new_size) { 54 uint8_t* ptr, intptr_t old_size, intptr_t new_size) {
55 return reinterpret_cast<uint8_t*>(realloc(ptr, new_size)); 55 return reinterpret_cast<uint8_t*>(realloc(ptr, new_size));
56 } 56 }
57 57
58 58
59 static uint8_t* zone_allocator( 59 static uint8_t* zone_allocator(
60 uint8_t* ptr, intptr_t old_size, intptr_t new_size) { 60 uint8_t* ptr, intptr_t old_size, intptr_t new_size) {
61 Zone* zone = Isolate::Current()->current_zone(); 61 StackZone* zone = Isolate::Current()->current_zone();
62 return zone->Realloc<uint8_t>(ptr, old_size, new_size); 62 return zone->Realloc<uint8_t>(ptr, old_size, new_size);
63 } 63 }
64 64
65 65
66 // Compare two Dart_CObject object graphs rooted in first and 66 // Compare two Dart_CObject object graphs rooted in first and
67 // second. The second graph will be destroyed by this operation no matter 67 // second. The second graph will be destroyed by this operation no matter
68 // whether the graphs are equal or not. 68 // whether the graphs are equal or not.
69 static void CompareDartCObjects(Dart_CObject* first, Dart_CObject* second) { 69 static void CompareDartCObjects(Dart_CObject* first, Dart_CObject* second) {
70 // Return immediately if entering a cycle. 70 // Return immediately if entering a cycle.
71 if (second->type == Dart_CObject::kNumberOfTypes) return; 71 if (second->type == Dart_CObject::kNumberOfTypes) return;
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after
125 writer.WriteCMessage(root); 125 writer.WriteCMessage(root);
126 126
127 ApiMessageReader api_reader(buffer, writer.BytesWritten(), &zone_allocator); 127 ApiMessageReader api_reader(buffer, writer.BytesWritten(), &zone_allocator);
128 Dart_CObject* new_root = api_reader.ReadMessage(); 128 Dart_CObject* new_root = api_reader.ReadMessage();
129 129
130 // Check that the two messages are the same. 130 // Check that the two messages are the same.
131 CompareDartCObjects(root, new_root); 131 CompareDartCObjects(root, new_root);
132 } 132 }
133 133
134 TEST_CASE(SerializeNull) { 134 TEST_CASE(SerializeNull) {
135 Zone zone(Isolate::Current()); 135 StackZone zone(Isolate::Current());
136 136
137 // Write snapshot with object content. 137 // Write snapshot with object content.
138 uint8_t* buffer; 138 uint8_t* buffer;
139 MessageWriter writer(&buffer, &zone_allocator); 139 MessageWriter writer(&buffer, &zone_allocator);
140 const Object& null_object = Object::Handle(); 140 const Object& null_object = Object::Handle();
141 writer.WriteMessage(null_object); 141 writer.WriteMessage(null_object);
142 intptr_t buffer_len = writer.BytesWritten(); 142 intptr_t buffer_len = writer.BytesWritten();
143 143
144 // Read object back from the snapshot. 144 // Read object back from the snapshot.
145 SnapshotReader reader(buffer, buffer_len, 145 SnapshotReader reader(buffer, buffer_len,
146 Snapshot::kMessage, Isolate::Current()); 146 Snapshot::kMessage, Isolate::Current());
147 const Object& serialized_object = Object::Handle(reader.ReadObject()); 147 const Object& serialized_object = Object::Handle(reader.ReadObject());
148 EXPECT(Equals(null_object, serialized_object)); 148 EXPECT(Equals(null_object, serialized_object));
149 149
150 // Read object back from the snapshot into a C structure. 150 // Read object back from the snapshot into a C structure.
151 ApiNativeScope scope; 151 ApiNativeScope scope;
152 ApiMessageReader api_reader(buffer, buffer_len, &zone_allocator); 152 ApiMessageReader api_reader(buffer, buffer_len, &zone_allocator);
153 Dart_CObject* root = api_reader.ReadMessage(); 153 Dart_CObject* root = api_reader.ReadMessage();
154 EXPECT_NOTNULL(root); 154 EXPECT_NOTNULL(root);
155 EXPECT_EQ(Dart_CObject::kNull, root->type); 155 EXPECT_EQ(Dart_CObject::kNull, root->type);
156 CheckEncodeDecodeMessage(root); 156 CheckEncodeDecodeMessage(root);
157 } 157 }
158 158
159 159
160 TEST_CASE(SerializeSmi1) { 160 TEST_CASE(SerializeSmi1) {
161 Zone zone(Isolate::Current()); 161 StackZone zone(Isolate::Current());
162 162
163 // Write snapshot with object content. 163 // Write snapshot with object content.
164 uint8_t* buffer; 164 uint8_t* buffer;
165 MessageWriter writer(&buffer, &zone_allocator); 165 MessageWriter writer(&buffer, &zone_allocator);
166 const Smi& smi = Smi::Handle(Smi::New(124)); 166 const Smi& smi = Smi::Handle(Smi::New(124));
167 writer.WriteMessage(smi); 167 writer.WriteMessage(smi);
168 intptr_t buffer_len = writer.BytesWritten(); 168 intptr_t buffer_len = writer.BytesWritten();
169 169
170 // Read object back from the snapshot. 170 // Read object back from the snapshot.
171 SnapshotReader reader(buffer, buffer_len, 171 SnapshotReader reader(buffer, buffer_len,
172 Snapshot::kMessage, Isolate::Current()); 172 Snapshot::kMessage, Isolate::Current());
173 const Object& serialized_object = Object::Handle(reader.ReadObject()); 173 const Object& serialized_object = Object::Handle(reader.ReadObject());
174 EXPECT(Equals(smi, serialized_object)); 174 EXPECT(Equals(smi, serialized_object));
175 175
176 // Read object back from the snapshot into a C structure. 176 // Read object back from the snapshot into a C structure.
177 ApiNativeScope scope; 177 ApiNativeScope scope;
178 ApiMessageReader api_reader(buffer, buffer_len, &zone_allocator); 178 ApiMessageReader api_reader(buffer, buffer_len, &zone_allocator);
179 Dart_CObject* root = api_reader.ReadMessage(); 179 Dart_CObject* root = api_reader.ReadMessage();
180 EXPECT_NOTNULL(root); 180 EXPECT_NOTNULL(root);
181 EXPECT_EQ(Dart_CObject::kInt32, root->type); 181 EXPECT_EQ(Dart_CObject::kInt32, root->type);
182 EXPECT_EQ(smi.Value(), root->value.as_int32); 182 EXPECT_EQ(smi.Value(), root->value.as_int32);
183 CheckEncodeDecodeMessage(root); 183 CheckEncodeDecodeMessage(root);
184 } 184 }
185 185
186 186
187 TEST_CASE(SerializeSmi2) { 187 TEST_CASE(SerializeSmi2) {
188 Zone zone(Isolate::Current()); 188 StackZone zone(Isolate::Current());
189 189
190 // Write snapshot with object content. 190 // Write snapshot with object content.
191 uint8_t* buffer; 191 uint8_t* buffer;
192 MessageWriter writer(&buffer, &zone_allocator); 192 MessageWriter writer(&buffer, &zone_allocator);
193 const Smi& smi = Smi::Handle(Smi::New(-1)); 193 const Smi& smi = Smi::Handle(Smi::New(-1));
194 writer.WriteMessage(smi); 194 writer.WriteMessage(smi);
195 intptr_t buffer_len = writer.BytesWritten(); 195 intptr_t buffer_len = writer.BytesWritten();
196 196
197 // Read object back from the snapshot. 197 // Read object back from the snapshot.
198 SnapshotReader reader(buffer, buffer_len, 198 SnapshotReader reader(buffer, buffer_len,
(...skipping 28 matching lines...) Expand all
227 // Read object back from the snapshot into a C structure. 227 // Read object back from the snapshot into a C structure.
228 ApiMessageReader api_reader(buffer, buffer_len, &zone_allocator); 228 ApiMessageReader api_reader(buffer, buffer_len, &zone_allocator);
229 Dart_CObject* root = api_reader.ReadMessage(); 229 Dart_CObject* root = api_reader.ReadMessage();
230 EXPECT_NOTNULL(root); 230 EXPECT_NOTNULL(root);
231 CheckEncodeDecodeMessage(root); 231 CheckEncodeDecodeMessage(root);
232 return root; 232 return root;
233 } 233 }
234 234
235 235
236 void CheckMint(int64_t value) { 236 void CheckMint(int64_t value) {
237 Zone zone(Isolate::Current()); 237 StackZone zone(Isolate::Current());
238 238
239 const Mint& mint = Mint::Handle(Mint::New(value)); 239 const Mint& mint = Mint::Handle(Mint::New(value));
240 ApiNativeScope scope; 240 ApiNativeScope scope;
241 Dart_CObject* mint_cobject = SerializeAndDeserializeMint(mint); 241 Dart_CObject* mint_cobject = SerializeAndDeserializeMint(mint);
242 // On 64-bit platforms mints always require 64-bits as the smi range 242 // On 64-bit platforms mints always require 64-bits as the smi range
243 // here covers most of the 64-bit range. On 32-bit platforms the smi 243 // here covers most of the 64-bit range. On 32-bit platforms the smi
244 // range covers most of the 32-bit range and values outside that 244 // range covers most of the 32-bit range and values outside that
245 // range are also represented as mints. 245 // range are also represented as mints.
246 #if defined(ARCH_IS_64_BIT) 246 #if defined(ARCH_IS_64_BIT)
247 EXPECT_EQ(Dart_CObject::kInt64, mint_cobject->type); 247 EXPECT_EQ(Dart_CObject::kInt64, mint_cobject->type);
(...skipping 24 matching lines...) Expand all
272 // Max positive mint - 1. 272 // Max positive mint - 1.
273 CheckMint(kMaxInt64 - 1); 273 CheckMint(kMaxInt64 - 1);
274 // Min negative mint. 274 // Min negative mint.
275 CheckMint(kMinInt64); 275 CheckMint(kMinInt64);
276 // Min negative mint + 1. 276 // Min negative mint + 1.
277 CheckMint(kMinInt64 + 1); 277 CheckMint(kMinInt64 + 1);
278 } 278 }
279 279
280 280
281 TEST_CASE(SerializeDouble) { 281 TEST_CASE(SerializeDouble) {
282 Zone zone(Isolate::Current()); 282 StackZone zone(Isolate::Current());
283 283
284 // Write snapshot with object content. 284 // Write snapshot with object content.
285 uint8_t* buffer; 285 uint8_t* buffer;
286 MessageWriter writer(&buffer, &zone_allocator); 286 MessageWriter writer(&buffer, &zone_allocator);
287 const Double& dbl = Double::Handle(Double::New(101.29)); 287 const Double& dbl = Double::Handle(Double::New(101.29));
288 writer.WriteMessage(dbl); 288 writer.WriteMessage(dbl);
289 intptr_t buffer_len = writer.BytesWritten(); 289 intptr_t buffer_len = writer.BytesWritten();
290 290
291 // Read object back from the snapshot. 291 // Read object back from the snapshot.
292 SnapshotReader reader(buffer, buffer_len, 292 SnapshotReader reader(buffer, buffer_len,
293 Snapshot::kMessage, Isolate::Current()); 293 Snapshot::kMessage, Isolate::Current());
294 const Object& serialized_object = Object::Handle(reader.ReadObject()); 294 const Object& serialized_object = Object::Handle(reader.ReadObject());
295 EXPECT(Equals(dbl, serialized_object)); 295 EXPECT(Equals(dbl, serialized_object));
296 296
297 // Read object back from the snapshot into a C structure. 297 // Read object back from the snapshot into a C structure.
298 ApiNativeScope scope; 298 ApiNativeScope scope;
299 ApiMessageReader api_reader(buffer, buffer_len, &zone_allocator); 299 ApiMessageReader api_reader(buffer, buffer_len, &zone_allocator);
300 Dart_CObject* root = api_reader.ReadMessage(); 300 Dart_CObject* root = api_reader.ReadMessage();
301 EXPECT_NOTNULL(root); 301 EXPECT_NOTNULL(root);
302 EXPECT_EQ(Dart_CObject::kDouble, root->type); 302 EXPECT_EQ(Dart_CObject::kDouble, root->type);
303 EXPECT_EQ(dbl.value(), root->value.as_double); 303 EXPECT_EQ(dbl.value(), root->value.as_double);
304 CheckEncodeDecodeMessage(root); 304 CheckEncodeDecodeMessage(root);
305 } 305 }
306 306
307 307
308 TEST_CASE(SerializeTrue) { 308 TEST_CASE(SerializeTrue) {
309 Zone zone(Isolate::Current()); 309 StackZone zone(Isolate::Current());
310 310
311 // Write snapshot with true object. 311 // Write snapshot with true object.
312 uint8_t* buffer; 312 uint8_t* buffer;
313 MessageWriter writer(&buffer, &zone_allocator); 313 MessageWriter writer(&buffer, &zone_allocator);
314 const Bool& bl = Bool::Handle(Bool::True()); 314 const Bool& bl = Bool::Handle(Bool::True());
315 writer.WriteMessage(bl); 315 writer.WriteMessage(bl);
316 intptr_t buffer_len = writer.BytesWritten(); 316 intptr_t buffer_len = writer.BytesWritten();
317 317
318 // Read object back from the snapshot. 318 // Read object back from the snapshot.
319 SnapshotReader reader(buffer, buffer_len, 319 SnapshotReader reader(buffer, buffer_len,
320 Snapshot::kMessage, Isolate::Current()); 320 Snapshot::kMessage, Isolate::Current());
321 const Object& serialized_object = Object::Handle(reader.ReadObject()); 321 const Object& serialized_object = Object::Handle(reader.ReadObject());
322 fprintf(stderr, "%s / %s\n", bl.ToCString(), serialized_object.ToCString()); 322 fprintf(stderr, "%s / %s\n", bl.ToCString(), serialized_object.ToCString());
323 323
324 EXPECT(Equals(bl, serialized_object)); 324 EXPECT(Equals(bl, serialized_object));
325 325
326 // Read object back from the snapshot into a C structure. 326 // Read object back from the snapshot into a C structure.
327 ApiNativeScope scope; 327 ApiNativeScope scope;
328 ApiMessageReader api_reader(buffer, buffer_len, &zone_allocator); 328 ApiMessageReader api_reader(buffer, buffer_len, &zone_allocator);
329 Dart_CObject* root = api_reader.ReadMessage(); 329 Dart_CObject* root = api_reader.ReadMessage();
330 EXPECT_NOTNULL(root); 330 EXPECT_NOTNULL(root);
331 EXPECT_EQ(Dart_CObject::kBool, root->type); 331 EXPECT_EQ(Dart_CObject::kBool, root->type);
332 EXPECT_EQ(true, root->value.as_bool); 332 EXPECT_EQ(true, root->value.as_bool);
333 CheckEncodeDecodeMessage(root); 333 CheckEncodeDecodeMessage(root);
334 } 334 }
335 335
336 336
337 TEST_CASE(SerializeFalse) { 337 TEST_CASE(SerializeFalse) {
338 Zone zone(Isolate::Current()); 338 StackZone zone(Isolate::Current());
339 339
340 // Write snapshot with false object. 340 // Write snapshot with false object.
341 uint8_t* buffer; 341 uint8_t* buffer;
342 MessageWriter writer(&buffer, &zone_allocator); 342 MessageWriter writer(&buffer, &zone_allocator);
343 const Bool& bl = Bool::Handle(Bool::False()); 343 const Bool& bl = Bool::Handle(Bool::False());
344 writer.WriteMessage(bl); 344 writer.WriteMessage(bl);
345 intptr_t buffer_len = writer.BytesWritten(); 345 intptr_t buffer_len = writer.BytesWritten();
346 346
347 // Read object back from the snapshot. 347 // Read object back from the snapshot.
348 SnapshotReader reader(buffer, buffer_len, 348 SnapshotReader reader(buffer, buffer_len,
(...skipping 11 matching lines...) Expand all
360 CheckEncodeDecodeMessage(root); 360 CheckEncodeDecodeMessage(root);
361 } 361 }
362 362
363 363
364 static uword allocator(intptr_t size) { 364 static uword allocator(intptr_t size) {
365 return reinterpret_cast<uword>(malloc(size)); 365 return reinterpret_cast<uword>(malloc(size));
366 } 366 }
367 367
368 368
369 TEST_CASE(SerializeBigint) { 369 TEST_CASE(SerializeBigint) {
370 Zone zone(Isolate::Current()); 370 StackZone zone(Isolate::Current());
371 371
372 // Write snapshot with object content. 372 // Write snapshot with object content.
373 uint8_t* buffer; 373 uint8_t* buffer;
374 MessageWriter writer(&buffer, &zone_allocator); 374 MessageWriter writer(&buffer, &zone_allocator);
375 const Bigint& bigint = Bigint::Handle(Bigint::New(DART_INT64_C(0xfffffffff))); 375 const Bigint& bigint = Bigint::Handle(Bigint::New(DART_INT64_C(0xfffffffff)));
376 writer.WriteMessage(bigint); 376 writer.WriteMessage(bigint);
377 intptr_t buffer_len = writer.BytesWritten(); 377 intptr_t buffer_len = writer.BytesWritten();
378 378
379 // Read object back from the snapshot. 379 // Read object back from the snapshot.
380 SnapshotReader reader(buffer, buffer_len, 380 SnapshotReader reader(buffer, buffer_len,
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after
420 ApiMessageReader api_reader(buffer, buffer_len, &zone_allocator); 420 ApiMessageReader api_reader(buffer, buffer_len, &zone_allocator);
421 Dart_CObject* root = api_reader.ReadMessage(); 421 Dart_CObject* root = api_reader.ReadMessage();
422 // Bigint not supported. 422 // Bigint not supported.
423 EXPECT_NOTNULL(root); 423 EXPECT_NOTNULL(root);
424 CheckEncodeDecodeMessage(root); 424 CheckEncodeDecodeMessage(root);
425 return root; 425 return root;
426 } 426 }
427 427
428 428
429 void CheckBigint(const char* bigint_value) { 429 void CheckBigint(const char* bigint_value) {
430 Zone zone(Isolate::Current()); 430 StackZone zone(Isolate::Current());
431 431
432 Bigint& bigint = Bigint::Handle(); 432 Bigint& bigint = Bigint::Handle();
433 bigint ^= BigintOperations::NewFromCString(bigint_value); 433 bigint ^= BigintOperations::NewFromCString(bigint_value);
434 Dart_CObject* bigint_cobject = SerializeAndDeserializeBigint(bigint); 434 Dart_CObject* bigint_cobject = SerializeAndDeserializeBigint(bigint);
435 EXPECT_EQ(Dart_CObject::kBigint, bigint_cobject->type); 435 EXPECT_EQ(Dart_CObject::kBigint, bigint_cobject->type);
436 if (bigint_value[0] == '0') { 436 if (bigint_value[0] == '0') {
437 EXPECT_STREQ(bigint_value + 2, bigint_cobject->value.as_bigint); 437 EXPECT_STREQ(bigint_value + 2, bigint_cobject->value.as_bigint);
438 } else { 438 } else {
439 EXPECT_EQ('-', bigint_value[0]); 439 EXPECT_EQ('-', bigint_value[0]);
440 EXPECT_EQ('-', bigint_cobject->value.as_bigint[0]); 440 EXPECT_EQ('-', bigint_cobject->value.as_bigint[0]);
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after
491 EXPECT(Object::pc_descriptors_class() == reader.ReadObject()); 491 EXPECT(Object::pc_descriptors_class() == reader.ReadObject());
492 EXPECT(Object::exception_handlers_class() == reader.ReadObject()); 492 EXPECT(Object::exception_handlers_class() == reader.ReadObject());
493 EXPECT(Object::context_class() == reader.ReadObject()); 493 EXPECT(Object::context_class() == reader.ReadObject());
494 EXPECT(Object::context_scope_class() == reader.ReadObject()); 494 EXPECT(Object::context_scope_class() == reader.ReadObject());
495 495
496 free(buffer); 496 free(buffer);
497 } 497 }
498 498
499 499
500 TEST_CASE(SerializeString) { 500 TEST_CASE(SerializeString) {
501 Zone zone(Isolate::Current()); 501 StackZone zone(Isolate::Current());
502 502
503 // Write snapshot with object content. 503 // Write snapshot with object content.
504 uint8_t* buffer; 504 uint8_t* buffer;
505 MessageWriter writer(&buffer, &zone_allocator); 505 MessageWriter writer(&buffer, &zone_allocator);
506 static const char* cstr = "This string shall be serialized"; 506 static const char* cstr = "This string shall be serialized";
507 String& str = String::Handle(String::New(cstr)); 507 String& str = String::Handle(String::New(cstr));
508 writer.WriteMessage(str); 508 writer.WriteMessage(str);
509 intptr_t buffer_len = writer.BytesWritten(); 509 intptr_t buffer_len = writer.BytesWritten();
510 510
511 // Read object back from the snapshot. 511 // Read object back from the snapshot.
512 SnapshotReader reader(buffer, buffer_len, 512 SnapshotReader reader(buffer, buffer_len,
513 Snapshot::kMessage, Isolate::Current()); 513 Snapshot::kMessage, Isolate::Current());
514 String& serialized_str = String::Handle(); 514 String& serialized_str = String::Handle();
515 serialized_str ^= reader.ReadObject(); 515 serialized_str ^= reader.ReadObject();
516 EXPECT(str.Equals(serialized_str)); 516 EXPECT(str.Equals(serialized_str));
517 517
518 // Read object back from the snapshot into a C structure. 518 // Read object back from the snapshot into a C structure.
519 ApiNativeScope scope; 519 ApiNativeScope scope;
520 ApiMessageReader api_reader(buffer, buffer_len, &zone_allocator); 520 ApiMessageReader api_reader(buffer, buffer_len, &zone_allocator);
521 Dart_CObject* root = api_reader.ReadMessage(); 521 Dart_CObject* root = api_reader.ReadMessage();
522 EXPECT_EQ(Dart_CObject::kString, root->type); 522 EXPECT_EQ(Dart_CObject::kString, root->type);
523 EXPECT_STREQ(cstr, root->value.as_string); 523 EXPECT_STREQ(cstr, root->value.as_string);
524 CheckEncodeDecodeMessage(root); 524 CheckEncodeDecodeMessage(root);
525 } 525 }
526 526
527 527
528 TEST_CASE(SerializeArray) { 528 TEST_CASE(SerializeArray) {
529 Zone zone(Isolate::Current()); 529 StackZone zone(Isolate::Current());
530 530
531 // Write snapshot with object content. 531 // Write snapshot with object content.
532 uint8_t* buffer; 532 uint8_t* buffer;
533 MessageWriter writer(&buffer, &zone_allocator); 533 MessageWriter writer(&buffer, &zone_allocator);
534 const int kArrayLength = 10; 534 const int kArrayLength = 10;
535 Array& array = Array::Handle(Array::New(kArrayLength)); 535 Array& array = Array::Handle(Array::New(kArrayLength));
536 Smi& smi = Smi::Handle(); 536 Smi& smi = Smi::Handle();
537 for (int i = 0; i < kArrayLength; i++) { 537 for (int i = 0; i < kArrayLength; i++) {
538 smi ^= Smi::New(i); 538 smi ^= Smi::New(i);
539 array.SetAt(i, smi); 539 array.SetAt(i, smi);
(...skipping 17 matching lines...) Expand all
557 for (int i = 0; i < kArrayLength; i++) { 557 for (int i = 0; i < kArrayLength; i++) {
558 Dart_CObject* element = root->value.as_array.values[i]; 558 Dart_CObject* element = root->value.as_array.values[i];
559 EXPECT_EQ(Dart_CObject::kInt32, element->type); 559 EXPECT_EQ(Dart_CObject::kInt32, element->type);
560 EXPECT_EQ(i, element->value.as_int32); 560 EXPECT_EQ(i, element->value.as_int32);
561 } 561 }
562 CheckEncodeDecodeMessage(root); 562 CheckEncodeDecodeMessage(root);
563 } 563 }
564 564
565 565
566 TEST_CASE(SerializeEmptyArray) { 566 TEST_CASE(SerializeEmptyArray) {
567 Zone zone(Isolate::Current()); 567 StackZone zone(Isolate::Current());
568 568
569 // Write snapshot with object content. 569 // Write snapshot with object content.
570 uint8_t* buffer; 570 uint8_t* buffer;
571 MessageWriter writer(&buffer, &zone_allocator); 571 MessageWriter writer(&buffer, &zone_allocator);
572 const int kArrayLength = 0; 572 const int kArrayLength = 0;
573 Array& array = Array::Handle(Array::New(kArrayLength)); 573 Array& array = Array::Handle(Array::New(kArrayLength));
574 writer.WriteMessage(array); 574 writer.WriteMessage(array);
575 intptr_t buffer_len = writer.BytesWritten(); 575 intptr_t buffer_len = writer.BytesWritten();
576 576
577 // Read object back from the snapshot. 577 // Read object back from the snapshot.
578 SnapshotReader reader(buffer, buffer_len, 578 SnapshotReader reader(buffer, buffer_len,
579 Snapshot::kMessage, Isolate::Current()); 579 Snapshot::kMessage, Isolate::Current());
580 Array& serialized_array = Array::Handle(); 580 Array& serialized_array = Array::Handle();
581 serialized_array ^= reader.ReadObject(); 581 serialized_array ^= reader.ReadObject();
582 EXPECT(array.Equals(serialized_array)); 582 EXPECT(array.Equals(serialized_array));
583 583
584 // Read object back from the snapshot into a C structure. 584 // Read object back from the snapshot into a C structure.
585 ApiNativeScope scope; 585 ApiNativeScope scope;
586 ApiMessageReader api_reader(buffer, buffer_len, &zone_allocator); 586 ApiMessageReader api_reader(buffer, buffer_len, &zone_allocator);
587 Dart_CObject* root = api_reader.ReadMessage(); 587 Dart_CObject* root = api_reader.ReadMessage();
588 EXPECT_EQ(Dart_CObject::kArray, root->type); 588 EXPECT_EQ(Dart_CObject::kArray, root->type);
589 EXPECT_EQ(kArrayLength, root->value.as_array.length); 589 EXPECT_EQ(kArrayLength, root->value.as_array.length);
590 EXPECT(root->value.as_array.values == NULL); 590 EXPECT(root->value.as_array.values == NULL);
591 CheckEncodeDecodeMessage(root); 591 CheckEncodeDecodeMessage(root);
592 } 592 }
593 593
594 594
595 TEST_CASE(SerializeByteArray) { 595 TEST_CASE(SerializeByteArray) {
596 Zone zone(Isolate::Current()); 596 StackZone zone(Isolate::Current());
597 597
598 // Write snapshot with object content. 598 // Write snapshot with object content.
599 uint8_t* buffer; 599 uint8_t* buffer;
600 MessageWriter writer(&buffer, &zone_allocator); 600 MessageWriter writer(&buffer, &zone_allocator);
601 const int kByteArrayLength = 256; 601 const int kByteArrayLength = 256;
602 Uint8Array& byte_array = 602 Uint8Array& byte_array =
603 Uint8Array::Handle(Uint8Array::New(kByteArrayLength)); 603 Uint8Array::Handle(Uint8Array::New(kByteArrayLength));
604 for (int i = 0; i < kByteArrayLength; i++) { 604 for (int i = 0; i < kByteArrayLength; i++) {
605 byte_array.SetAt(i, i); 605 byte_array.SetAt(i, i);
606 } 606 }
(...skipping 14 matching lines...) Expand all
621 EXPECT_EQ(Dart_CObject::kUint8Array, root->type); 621 EXPECT_EQ(Dart_CObject::kUint8Array, root->type);
622 EXPECT_EQ(kByteArrayLength, root->value.as_byte_array.length); 622 EXPECT_EQ(kByteArrayLength, root->value.as_byte_array.length);
623 for (int i = 0; i < kByteArrayLength; i++) { 623 for (int i = 0; i < kByteArrayLength; i++) {
624 EXPECT(root->value.as_byte_array.values[i] == i); 624 EXPECT(root->value.as_byte_array.values[i] == i);
625 } 625 }
626 CheckEncodeDecodeMessage(root); 626 CheckEncodeDecodeMessage(root);
627 } 627 }
628 628
629 629
630 TEST_CASE(SerializeEmptyByteArray) { 630 TEST_CASE(SerializeEmptyByteArray) {
631 Zone zone(Isolate::Current()); 631 StackZone zone(Isolate::Current());
632 632
633 // Write snapshot with object content. 633 // Write snapshot with object content.
634 uint8_t* buffer; 634 uint8_t* buffer;
635 MessageWriter writer(&buffer, &zone_allocator); 635 MessageWriter writer(&buffer, &zone_allocator);
636 const int kByteArrayLength = 0; 636 const int kByteArrayLength = 0;
637 Uint8Array& byte_array = 637 Uint8Array& byte_array =
638 Uint8Array::Handle(Uint8Array::New(kByteArrayLength)); 638 Uint8Array::Handle(Uint8Array::New(kByteArrayLength));
639 writer.WriteMessage(byte_array); 639 writer.WriteMessage(byte_array);
640 intptr_t buffer_len = writer.BytesWritten(); 640 intptr_t buffer_len = writer.BytesWritten();
641 641
(...skipping 207 matching lines...) Expand 10 before | Expand all | Expand 10 after
849 { 849 {
850 TestIsolateScope __test_isolate__; 850 TestIsolateScope __test_isolate__;
851 851
852 // Create a test library and Load up a test script in it. 852 // Create a test library and Load up a test script in it.
853 TestCase::LoadTestScript(kScriptChars, NULL); 853 TestCase::LoadTestScript(kScriptChars, NULL);
854 timer1.Stop(); 854 timer1.Stop();
855 OS::PrintErr("Without Snapshot: %"Pd64"us\n", timer1.TotalElapsedTime()); 855 OS::PrintErr("Without Snapshot: %"Pd64"us\n", timer1.TotalElapsedTime());
856 856
857 // Write snapshot with object content. 857 // Write snapshot with object content.
858 Isolate* isolate = Isolate::Current(); 858 Isolate* isolate = Isolate::Current();
859 Zone zone(isolate); 859 StackZone zone(isolate);
860 HandleScope scope(isolate); 860 HandleScope scope(isolate);
861 FullSnapshotWriter writer(&buffer, &malloc_allocator); 861 FullSnapshotWriter writer(&buffer, &malloc_allocator);
862 writer.WriteFullSnapshot(); 862 writer.WriteFullSnapshot();
863 } 863 }
864 864
865 // Now Create another isolate using the snapshot and execute a method 865 // Now Create another isolate using the snapshot and execute a method
866 // from the script. 866 // from the script.
867 Timer timer2(true, "Snapshot_test"); 867 Timer timer2(true, "Snapshot_test");
868 timer2.Start(); 868 timer2.Start();
869 TestCase::CreateTestIsolateFromSnapshot(buffer); 869 TestCase::CreateTestIsolateFromSnapshot(buffer);
(...skipping 25 matching lines...) Expand all
895 895
896 uint8_t* buffer; 896 uint8_t* buffer;
897 897
898 // Start an Isolate, load a script and create a full snapshot. 898 // Start an Isolate, load a script and create a full snapshot.
899 Timer timer1(true, "Snapshot_test"); 899 Timer timer1(true, "Snapshot_test");
900 timer1.Start(); 900 timer1.Start();
901 { 901 {
902 TestIsolateScope __test_isolate__; 902 TestIsolateScope __test_isolate__;
903 903
904 Isolate* isolate = Isolate::Current(); 904 Isolate* isolate = Isolate::Current();
905 Zone zone(isolate); 905 StackZone zone(isolate);
906 HandleScope scope(isolate); 906 HandleScope scope(isolate);
907 907
908 // Create a test library and Load up a test script in it. 908 // Create a test library and Load up a test script in it.
909 Dart_Handle lib = TestCase::LoadTestScript(kScriptChars, NULL); 909 Dart_Handle lib = TestCase::LoadTestScript(kScriptChars, NULL);
910 ClassFinalizer::FinalizePendingClasses(); 910 ClassFinalizer::FinalizePendingClasses();
911 timer1.Stop(); 911 timer1.Stop();
912 OS::PrintErr("Without Snapshot: %"Pd64"us\n", timer1.TotalElapsedTime()); 912 OS::PrintErr("Without Snapshot: %"Pd64"us\n", timer1.TotalElapsedTime());
913 913
914 // Write snapshot with object content. 914 // Write snapshot with object content.
915 FullSnapshotWriter writer(&buffer, &malloc_allocator); 915 FullSnapshotWriter writer(&buffer, &malloc_allocator);
(...skipping 147 matching lines...) Expand 10 before | Expand all | Expand 10 after
1063 EXPECT_VALID(result); 1063 EXPECT_VALID(result);
1064 Dart_ExitScope(); 1064 Dart_ExitScope();
1065 } 1065 }
1066 Dart_ShutdownIsolate(); 1066 Dart_ShutdownIsolate();
1067 free(full_snapshot); 1067 free(full_snapshot);
1068 free(script_snapshot); 1068 free(script_snapshot);
1069 } 1069 }
1070 1070
1071 1071
1072 TEST_CASE(IntArrayMessage) { 1072 TEST_CASE(IntArrayMessage) {
1073 Zone zone(Isolate::Current()); 1073 StackZone zone(Isolate::Current());
1074 uint8_t* buffer = NULL; 1074 uint8_t* buffer = NULL;
1075 ApiMessageWriter writer(&buffer, &zone_allocator); 1075 ApiMessageWriter writer(&buffer, &zone_allocator);
1076 1076
1077 static const int kArrayLength = 2; 1077 static const int kArrayLength = 2;
1078 intptr_t data[kArrayLength] = {1, 2}; 1078 intptr_t data[kArrayLength] = {1, 2};
1079 int len = kArrayLength; 1079 int len = kArrayLength;
1080 writer.WriteMessage(len, data); 1080 writer.WriteMessage(len, data);
1081 1081
1082 // Read object back from the snapshot into a C structure. 1082 // Read object back from the snapshot into a C structure.
1083 ApiNativeScope scope; 1083 ApiNativeScope scope;
(...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after
1146 EXPECT_VALID(bigint_result); 1146 EXPECT_VALID(bigint_result);
1147 Dart_Handle string_result; 1147 Dart_Handle string_result;
1148 string_result = Dart_Invoke(lib, Dart_NewString("getString"), 0, NULL); 1148 string_result = Dart_Invoke(lib, Dart_NewString("getString"), 0, NULL);
1149 EXPECT_VALID(string_result); 1149 EXPECT_VALID(string_result);
1150 EXPECT(Dart_IsString(string_result)); 1150 EXPECT(Dart_IsString(string_result));
1151 1151
1152 { 1152 {
1153 DARTSCOPE_NOCHECKS(isolate); 1153 DARTSCOPE_NOCHECKS(isolate);
1154 1154
1155 { 1155 {
1156 Zone zone(Isolate::Current()); 1156 StackZone zone(Isolate::Current());
1157 uint8_t* buffer; 1157 uint8_t* buffer;
1158 MessageWriter writer(&buffer, &zone_allocator); 1158 MessageWriter writer(&buffer, &zone_allocator);
1159 Smi& smi = Smi::Handle(); 1159 Smi& smi = Smi::Handle();
1160 smi ^= Api::UnwrapHandle(smi_result); 1160 smi ^= Api::UnwrapHandle(smi_result);
1161 writer.WriteMessage(smi); 1161 writer.WriteMessage(smi);
1162 intptr_t buffer_len = writer.BytesWritten(); 1162 intptr_t buffer_len = writer.BytesWritten();
1163 1163
1164 // Read object back from the snapshot into a C structure. 1164 // Read object back from the snapshot into a C structure.
1165 ApiNativeScope scope; 1165 ApiNativeScope scope;
1166 ApiMessageReader api_reader(buffer, buffer_len, &zone_allocator); 1166 ApiMessageReader api_reader(buffer, buffer_len, &zone_allocator);
1167 Dart_CObject* root = api_reader.ReadMessage(); 1167 Dart_CObject* root = api_reader.ReadMessage();
1168 EXPECT_NOTNULL(root); 1168 EXPECT_NOTNULL(root);
1169 EXPECT_EQ(Dart_CObject::kInt32, root->type); 1169 EXPECT_EQ(Dart_CObject::kInt32, root->type);
1170 EXPECT_EQ(42, root->value.as_int32); 1170 EXPECT_EQ(42, root->value.as_int32);
1171 CheckEncodeDecodeMessage(root); 1171 CheckEncodeDecodeMessage(root);
1172 } 1172 }
1173 { 1173 {
1174 Zone zone(Isolate::Current()); 1174 StackZone zone(Isolate::Current());
1175 uint8_t* buffer; 1175 uint8_t* buffer;
1176 MessageWriter writer(&buffer, &zone_allocator); 1176 MessageWriter writer(&buffer, &zone_allocator);
1177 Bigint& bigint = Bigint::Handle(); 1177 Bigint& bigint = Bigint::Handle();
1178 bigint ^= Api::UnwrapHandle(bigint_result); 1178 bigint ^= Api::UnwrapHandle(bigint_result);
1179 writer.WriteMessage(bigint); 1179 writer.WriteMessage(bigint);
1180 intptr_t buffer_len = writer.BytesWritten(); 1180 intptr_t buffer_len = writer.BytesWritten();
1181 1181
1182 // Read object back from the snapshot into a C structure. 1182 // Read object back from the snapshot into a C structure.
1183 ApiNativeScope scope; 1183 ApiNativeScope scope;
1184 ApiMessageReader api_reader(buffer, buffer_len, &zone_allocator); 1184 ApiMessageReader api_reader(buffer, buffer_len, &zone_allocator);
1185 Dart_CObject* root = api_reader.ReadMessage(); 1185 Dart_CObject* root = api_reader.ReadMessage();
1186 EXPECT_NOTNULL(root); 1186 EXPECT_NOTNULL(root);
1187 EXPECT_EQ(Dart_CObject::kBigint, root->type); 1187 EXPECT_EQ(Dart_CObject::kBigint, root->type);
1188 EXPECT_STREQ("-424242424242424242424242424242424242", 1188 EXPECT_STREQ("-424242424242424242424242424242424242",
1189 root->value.as_bigint); 1189 root->value.as_bigint);
1190 CheckEncodeDecodeMessage(root); 1190 CheckEncodeDecodeMessage(root);
1191 } 1191 }
1192 { 1192 {
1193 Zone zone(Isolate::Current()); 1193 StackZone zone(Isolate::Current());
1194 uint8_t* buffer; 1194 uint8_t* buffer;
1195 MessageWriter writer(&buffer, &zone_allocator); 1195 MessageWriter writer(&buffer, &zone_allocator);
1196 String& str = String::Handle(); 1196 String& str = String::Handle();
1197 str ^= Api::UnwrapHandle(string_result); 1197 str ^= Api::UnwrapHandle(string_result);
1198 writer.WriteMessage(str); 1198 writer.WriteMessage(str);
1199 intptr_t buffer_len = writer.BytesWritten(); 1199 intptr_t buffer_len = writer.BytesWritten();
1200 1200
1201 // Read object back from the snapshot into a C structure. 1201 // Read object back from the snapshot into a C structure.
1202 ApiNativeScope scope; 1202 ApiNativeScope scope;
1203 ApiMessageReader api_reader(buffer, buffer_len, &zone_allocator); 1203 ApiMessageReader api_reader(buffer, buffer_len, &zone_allocator);
(...skipping 762 matching lines...) Expand 10 before | Expand all | Expand 10 after
1966 EXPECT(Dart_ErrorHasException(result)); 1966 EXPECT(Dart_ErrorHasException(result));
1967 EXPECT_SUBSTRING("Exception: nulltruefalse1234563.14[]100123456789\n", 1967 EXPECT_SUBSTRING("Exception: nulltruefalse1234563.14[]100123456789\n",
1968 Dart_GetError(result)); 1968 Dart_GetError(result));
1969 1969
1970 Dart_ExitScope(); 1970 Dart_ExitScope();
1971 } 1971 }
1972 1972
1973 #endif // defined(TARGET_ARCH_IA32) || defined(TARGET_ARCH_X64). 1973 #endif // defined(TARGET_ARCH_IA32) || defined(TARGET_ARCH_X64).
1974 1974
1975 } // namespace dart 1975 } // namespace dart
OLDNEW
« no previous file with comments | « runtime/vm/runtime_entry.h ('k') | runtime/vm/symbols.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698