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

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

Issue 1012333002: Keep zone cached in SnapshotReader to allow removing ZoneHandle(Isolate*) interface. (Closed) Base URL: http://dart.googlecode.com/svn/branches/bleeding_edge/dart/
Patch Set: Created 5 years, 9 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/snapshot.cc ('k') | no next file » | 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 "platform/globals.h" 5 #include "platform/globals.h"
6 6
7 #include "include/dart_debugger_api.h" 7 #include "include/dart_debugger_api.h"
8 #include "platform/assert.h" 8 #include "platform/assert.h"
9 #include "vm/class_finalizer.h" 9 #include "vm/class_finalizer.h"
10 #include "vm/dart_api_impl.h" 10 #include "vm/dart_api_impl.h"
(...skipping 140 matching lines...) Expand 10 before | Expand all | Expand 10 after
151 151
152 // Write snapshot with object content. 152 // Write snapshot with object content.
153 uint8_t* buffer; 153 uint8_t* buffer;
154 MessageWriter writer(&buffer, &zone_allocator, true); 154 MessageWriter writer(&buffer, &zone_allocator, true);
155 const Object& null_object = Object::Handle(); 155 const Object& null_object = Object::Handle();
156 writer.WriteMessage(null_object); 156 writer.WriteMessage(null_object);
157 intptr_t buffer_len = writer.BytesWritten(); 157 intptr_t buffer_len = writer.BytesWritten();
158 158
159 // Read object back from the snapshot. 159 // Read object back from the snapshot.
160 SnapshotReader reader(buffer, buffer_len, 160 SnapshotReader reader(buffer, buffer_len,
161 Snapshot::kMessage, Isolate::Current()); 161 Snapshot::kMessage, Isolate::Current(), zone.GetZone());
162 const Object& serialized_object = Object::Handle(reader.ReadObject()); 162 const Object& serialized_object = Object::Handle(reader.ReadObject());
163 EXPECT(Equals(null_object, serialized_object)); 163 EXPECT(Equals(null_object, serialized_object));
164 164
165 // Read object back from the snapshot into a C structure. 165 // Read object back from the snapshot into a C structure.
166 ApiNativeScope scope; 166 ApiNativeScope scope;
167 ApiMessageReader api_reader(buffer, buffer_len, &zone_allocator); 167 ApiMessageReader api_reader(buffer, buffer_len, &zone_allocator);
168 Dart_CObject* root = api_reader.ReadMessage(); 168 Dart_CObject* root = api_reader.ReadMessage();
169 EXPECT_NOTNULL(root); 169 EXPECT_NOTNULL(root);
170 EXPECT_EQ(Dart_CObject_kNull, root->type); 170 EXPECT_EQ(Dart_CObject_kNull, root->type);
171 CheckEncodeDecodeMessage(root); 171 CheckEncodeDecodeMessage(root);
172 } 172 }
173 173
174 174
175 TEST_CASE(SerializeSmi1) { 175 TEST_CASE(SerializeSmi1) {
176 StackZone zone(Isolate::Current()); 176 StackZone zone(Isolate::Current());
177 177
178 // Write snapshot with object content. 178 // Write snapshot with object content.
179 uint8_t* buffer; 179 uint8_t* buffer;
180 MessageWriter writer(&buffer, &zone_allocator, true); 180 MessageWriter writer(&buffer, &zone_allocator, true);
181 const Smi& smi = Smi::Handle(Smi::New(124)); 181 const Smi& smi = Smi::Handle(Smi::New(124));
182 writer.WriteMessage(smi); 182 writer.WriteMessage(smi);
183 intptr_t buffer_len = writer.BytesWritten(); 183 intptr_t buffer_len = writer.BytesWritten();
184 184
185 // Read object back from the snapshot. 185 // Read object back from the snapshot.
186 SnapshotReader reader(buffer, buffer_len, 186 SnapshotReader reader(buffer, buffer_len,
187 Snapshot::kMessage, Isolate::Current()); 187 Snapshot::kMessage, Isolate::Current(), zone.GetZone());
188 const Object& serialized_object = Object::Handle(reader.ReadObject()); 188 const Object& serialized_object = Object::Handle(reader.ReadObject());
189 EXPECT(Equals(smi, serialized_object)); 189 EXPECT(Equals(smi, serialized_object));
190 190
191 // Read object back from the snapshot into a C structure. 191 // Read object back from the snapshot into a C structure.
192 ApiNativeScope scope; 192 ApiNativeScope scope;
193 ApiMessageReader api_reader(buffer, buffer_len, &zone_allocator); 193 ApiMessageReader api_reader(buffer, buffer_len, &zone_allocator);
194 Dart_CObject* root = api_reader.ReadMessage(); 194 Dart_CObject* root = api_reader.ReadMessage();
195 EXPECT_NOTNULL(root); 195 EXPECT_NOTNULL(root);
196 EXPECT_EQ(Dart_CObject_kInt32, root->type); 196 EXPECT_EQ(Dart_CObject_kInt32, root->type);
197 EXPECT_EQ(smi.Value(), root->value.as_int32); 197 EXPECT_EQ(smi.Value(), root->value.as_int32);
198 CheckEncodeDecodeMessage(root); 198 CheckEncodeDecodeMessage(root);
199 } 199 }
200 200
201 201
202 TEST_CASE(SerializeSmi2) { 202 TEST_CASE(SerializeSmi2) {
203 StackZone zone(Isolate::Current()); 203 StackZone zone(Isolate::Current());
204 204
205 // Write snapshot with object content. 205 // Write snapshot with object content.
206 uint8_t* buffer; 206 uint8_t* buffer;
207 MessageWriter writer(&buffer, &zone_allocator, true); 207 MessageWriter writer(&buffer, &zone_allocator, true);
208 const Smi& smi = Smi::Handle(Smi::New(-1)); 208 const Smi& smi = Smi::Handle(Smi::New(-1));
209 writer.WriteMessage(smi); 209 writer.WriteMessage(smi);
210 intptr_t buffer_len = writer.BytesWritten(); 210 intptr_t buffer_len = writer.BytesWritten();
211 211
212 // Read object back from the snapshot. 212 // Read object back from the snapshot.
213 SnapshotReader reader(buffer, buffer_len, 213 SnapshotReader reader(buffer, buffer_len,
214 Snapshot::kMessage, Isolate::Current()); 214 Snapshot::kMessage, Isolate::Current(), zone.GetZone());
215 const Object& serialized_object = Object::Handle(reader.ReadObject()); 215 const Object& serialized_object = Object::Handle(reader.ReadObject());
216 EXPECT(Equals(smi, serialized_object)); 216 EXPECT(Equals(smi, serialized_object));
217 217
218 // Read object back from the snapshot into a C structure. 218 // Read object back from the snapshot into a C structure.
219 ApiNativeScope scope; 219 ApiNativeScope scope;
220 ApiMessageReader api_reader(buffer, buffer_len, &zone_allocator); 220 ApiMessageReader api_reader(buffer, buffer_len, &zone_allocator);
221 Dart_CObject* root = api_reader.ReadMessage(); 221 Dart_CObject* root = api_reader.ReadMessage();
222 EXPECT_NOTNULL(root); 222 EXPECT_NOTNULL(root);
223 EXPECT_EQ(Dart_CObject_kInt32, root->type); 223 EXPECT_EQ(Dart_CObject_kInt32, root->type);
224 EXPECT_EQ(smi.Value(), root->value.as_int32); 224 EXPECT_EQ(smi.Value(), root->value.as_int32);
225 CheckEncodeDecodeMessage(root); 225 CheckEncodeDecodeMessage(root);
226 } 226 }
227 227
228 228
229 Dart_CObject* SerializeAndDeserializeMint(const Mint& mint) { 229 Dart_CObject* SerializeAndDeserializeMint(const Mint& mint) {
230 // Write snapshot with object content. 230 // Write snapshot with object content.
231 uint8_t* buffer; 231 uint8_t* buffer;
232 MessageWriter writer(&buffer, &zone_allocator, true); 232 MessageWriter writer(&buffer, &zone_allocator, true);
233 writer.WriteMessage(mint); 233 writer.WriteMessage(mint);
234 intptr_t buffer_len = writer.BytesWritten(); 234 intptr_t buffer_len = writer.BytesWritten();
235 235
236 // Read object back from the snapshot. 236 // Read object back from the snapshot.
237 SnapshotReader reader(buffer, buffer_len, 237 SnapshotReader reader(buffer, buffer_len,
238 Snapshot::kMessage, Isolate::Current()); 238 Snapshot::kMessage, Isolate::Current(),
239 Thread::Current()->zone());
239 const Object& serialized_object = Object::Handle(reader.ReadObject()); 240 const Object& serialized_object = Object::Handle(reader.ReadObject());
240 EXPECT(serialized_object.IsMint()); 241 EXPECT(serialized_object.IsMint());
241 242
242 // Read object back from the snapshot into a C structure. 243 // Read object back from the snapshot into a C structure.
243 ApiMessageReader api_reader(buffer, buffer_len, &zone_allocator); 244 ApiMessageReader api_reader(buffer, buffer_len, &zone_allocator);
244 Dart_CObject* root = api_reader.ReadMessage(); 245 Dart_CObject* root = api_reader.ReadMessage();
245 EXPECT_NOTNULL(root); 246 EXPECT_NOTNULL(root);
246 CheckEncodeDecodeMessage(root); 247 CheckEncodeDecodeMessage(root);
247 return root; 248 return root;
248 } 249 }
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after
299 300
300 // Write snapshot with object content. 301 // Write snapshot with object content.
301 uint8_t* buffer; 302 uint8_t* buffer;
302 MessageWriter writer(&buffer, &zone_allocator, true); 303 MessageWriter writer(&buffer, &zone_allocator, true);
303 const Double& dbl = Double::Handle(Double::New(101.29)); 304 const Double& dbl = Double::Handle(Double::New(101.29));
304 writer.WriteMessage(dbl); 305 writer.WriteMessage(dbl);
305 intptr_t buffer_len = writer.BytesWritten(); 306 intptr_t buffer_len = writer.BytesWritten();
306 307
307 // Read object back from the snapshot. 308 // Read object back from the snapshot.
308 SnapshotReader reader(buffer, buffer_len, 309 SnapshotReader reader(buffer, buffer_len,
309 Snapshot::kMessage, Isolate::Current()); 310 Snapshot::kMessage, Isolate::Current(), zone.GetZone());
310 const Object& serialized_object = Object::Handle(reader.ReadObject()); 311 const Object& serialized_object = Object::Handle(reader.ReadObject());
311 EXPECT(Equals(dbl, serialized_object)); 312 EXPECT(Equals(dbl, serialized_object));
312 313
313 // Read object back from the snapshot into a C structure. 314 // Read object back from the snapshot into a C structure.
314 ApiNativeScope scope; 315 ApiNativeScope scope;
315 ApiMessageReader api_reader(buffer, buffer_len, &zone_allocator); 316 ApiMessageReader api_reader(buffer, buffer_len, &zone_allocator);
316 Dart_CObject* root = api_reader.ReadMessage(); 317 Dart_CObject* root = api_reader.ReadMessage();
317 EXPECT_NOTNULL(root); 318 EXPECT_NOTNULL(root);
318 EXPECT_EQ(Dart_CObject_kDouble, root->type); 319 EXPECT_EQ(Dart_CObject_kDouble, root->type);
319 EXPECT_EQ(dbl.value(), root->value.as_double); 320 EXPECT_EQ(dbl.value(), root->value.as_double);
320 CheckEncodeDecodeMessage(root); 321 CheckEncodeDecodeMessage(root);
321 } 322 }
322 323
323 324
324 TEST_CASE(SerializeTrue) { 325 TEST_CASE(SerializeTrue) {
325 StackZone zone(Isolate::Current()); 326 StackZone zone(Isolate::Current());
326 327
327 // Write snapshot with true object. 328 // Write snapshot with true object.
328 uint8_t* buffer; 329 uint8_t* buffer;
329 MessageWriter writer(&buffer, &zone_allocator, true); 330 MessageWriter writer(&buffer, &zone_allocator, true);
330 const Bool& bl = Bool::True(); 331 const Bool& bl = Bool::True();
331 writer.WriteMessage(bl); 332 writer.WriteMessage(bl);
332 intptr_t buffer_len = writer.BytesWritten(); 333 intptr_t buffer_len = writer.BytesWritten();
333 334
334 // Read object back from the snapshot. 335 // Read object back from the snapshot.
335 SnapshotReader reader(buffer, buffer_len, 336 SnapshotReader reader(buffer, buffer_len,
336 Snapshot::kMessage, Isolate::Current()); 337 Snapshot::kMessage, Isolate::Current(), zone.GetZone());
337 const Object& serialized_object = Object::Handle(reader.ReadObject()); 338 const Object& serialized_object = Object::Handle(reader.ReadObject());
338 fprintf(stderr, "%s / %s\n", bl.ToCString(), serialized_object.ToCString()); 339 fprintf(stderr, "%s / %s\n", bl.ToCString(), serialized_object.ToCString());
339 340
340 EXPECT(Equals(bl, serialized_object)); 341 EXPECT(Equals(bl, serialized_object));
341 342
342 // Read object back from the snapshot into a C structure. 343 // Read object back from the snapshot into a C structure.
343 ApiNativeScope scope; 344 ApiNativeScope scope;
344 ApiMessageReader api_reader(buffer, buffer_len, &zone_allocator); 345 ApiMessageReader api_reader(buffer, buffer_len, &zone_allocator);
345 Dart_CObject* root = api_reader.ReadMessage(); 346 Dart_CObject* root = api_reader.ReadMessage();
346 EXPECT_NOTNULL(root); 347 EXPECT_NOTNULL(root);
347 EXPECT_EQ(Dart_CObject_kBool, root->type); 348 EXPECT_EQ(Dart_CObject_kBool, root->type);
348 EXPECT_EQ(true, root->value.as_bool); 349 EXPECT_EQ(true, root->value.as_bool);
349 CheckEncodeDecodeMessage(root); 350 CheckEncodeDecodeMessage(root);
350 } 351 }
351 352
352 353
353 TEST_CASE(SerializeFalse) { 354 TEST_CASE(SerializeFalse) {
354 StackZone zone(Isolate::Current()); 355 StackZone zone(Isolate::Current());
355 356
356 // Write snapshot with false object. 357 // Write snapshot with false object.
357 uint8_t* buffer; 358 uint8_t* buffer;
358 MessageWriter writer(&buffer, &zone_allocator, true); 359 MessageWriter writer(&buffer, &zone_allocator, true);
359 const Bool& bl = Bool::False(); 360 const Bool& bl = Bool::False();
360 writer.WriteMessage(bl); 361 writer.WriteMessage(bl);
361 intptr_t buffer_len = writer.BytesWritten(); 362 intptr_t buffer_len = writer.BytesWritten();
362 363
363 // Read object back from the snapshot. 364 // Read object back from the snapshot.
364 SnapshotReader reader(buffer, buffer_len, 365 SnapshotReader reader(buffer, buffer_len,
365 Snapshot::kMessage, Isolate::Current()); 366 Snapshot::kMessage, Isolate::Current(), zone.GetZone());
366 const Object& serialized_object = Object::Handle(reader.ReadObject()); 367 const Object& serialized_object = Object::Handle(reader.ReadObject());
367 EXPECT(Equals(bl, serialized_object)); 368 EXPECT(Equals(bl, serialized_object));
368 369
369 // Read object back from the snapshot into a C structure. 370 // Read object back from the snapshot into a C structure.
370 ApiNativeScope scope; 371 ApiNativeScope scope;
371 ApiMessageReader api_reader(buffer, buffer_len, &zone_allocator); 372 ApiMessageReader api_reader(buffer, buffer_len, &zone_allocator);
372 Dart_CObject* root = api_reader.ReadMessage(); 373 Dart_CObject* root = api_reader.ReadMessage();
373 EXPECT_NOTNULL(root); 374 EXPECT_NOTNULL(root);
374 EXPECT_EQ(Dart_CObject_kBool, root->type); 375 EXPECT_EQ(Dart_CObject_kBool, root->type);
375 EXPECT_EQ(false, root->value.as_bool); 376 EXPECT_EQ(false, root->value.as_bool);
(...skipping 14 matching lines...) Expand all
390 MessageWriter writer(&buffer, &zone_allocator, true); 391 MessageWriter writer(&buffer, &zone_allocator, true);
391 const char* cstr = "0x270FFFFFFFFFFFFFD8F0"; 392 const char* cstr = "0x270FFFFFFFFFFFFFD8F0";
392 const String& str = String::Handle(String::New(cstr)); 393 const String& str = String::Handle(String::New(cstr));
393 Bigint& bigint = Bigint::Handle(); 394 Bigint& bigint = Bigint::Handle();
394 bigint ^= Integer::NewCanonical(str); 395 bigint ^= Integer::NewCanonical(str);
395 writer.WriteMessage(bigint); 396 writer.WriteMessage(bigint);
396 intptr_t buffer_len = writer.BytesWritten(); 397 intptr_t buffer_len = writer.BytesWritten();
397 398
398 // Read object back from the snapshot. 399 // Read object back from the snapshot.
399 SnapshotReader reader(buffer, buffer_len, 400 SnapshotReader reader(buffer, buffer_len,
400 Snapshot::kMessage, Isolate::Current()); 401 Snapshot::kMessage, Isolate::Current(), zone.GetZone());
401 Bigint& obj = Bigint::Handle(); 402 Bigint& obj = Bigint::Handle();
402 obj ^= reader.ReadObject(); 403 obj ^= reader.ReadObject();
403 404
404 EXPECT_STREQ(bigint.ToHexCString(allocator), obj.ToHexCString(allocator)); 405 EXPECT_STREQ(bigint.ToHexCString(allocator), obj.ToHexCString(allocator));
405 406
406 // Read object back from the snapshot into a C structure. 407 // Read object back from the snapshot into a C structure.
407 ApiNativeScope scope; 408 ApiNativeScope scope;
408 ApiMessageReader api_reader(buffer, buffer_len, &zone_allocator); 409 ApiMessageReader api_reader(buffer, buffer_len, &zone_allocator);
409 Dart_CObject* root = api_reader.ReadMessage(); 410 Dart_CObject* root = api_reader.ReadMessage();
410 EXPECT_NOTNULL(root); 411 EXPECT_NOTNULL(root);
411 EXPECT_EQ(Dart_CObject_kBigint, root->type); 412 EXPECT_EQ(Dart_CObject_kBigint, root->type);
412 char* hex_value = TestCase::BigintToHexValue(root); 413 char* hex_value = TestCase::BigintToHexValue(root);
413 EXPECT_STREQ(cstr, hex_value); 414 EXPECT_STREQ(cstr, hex_value);
414 free(hex_value); 415 free(hex_value);
415 CheckEncodeDecodeMessage(root); 416 CheckEncodeDecodeMessage(root);
416 } 417 }
417 418
418 419
419 Dart_CObject* SerializeAndDeserializeBigint(const Bigint& bigint) { 420 Dart_CObject* SerializeAndDeserializeBigint(const Bigint& bigint) {
420 // Write snapshot with object content. 421 // Write snapshot with object content.
421 uint8_t* buffer; 422 uint8_t* buffer;
422 MessageWriter writer(&buffer, &zone_allocator, true); 423 MessageWriter writer(&buffer, &zone_allocator, true);
423 writer.WriteMessage(bigint); 424 writer.WriteMessage(bigint);
424 intptr_t buffer_len = writer.BytesWritten(); 425 intptr_t buffer_len = writer.BytesWritten();
425 426
426 // Read object back from the snapshot. 427 // Read object back from the snapshot.
427 SnapshotReader reader(buffer, buffer_len, 428 SnapshotReader reader(buffer, buffer_len,
428 Snapshot::kMessage, Isolate::Current()); 429 Snapshot::kMessage, Isolate::Current(),
430 Thread::Current()->zone());
429 Bigint& serialized_bigint = Bigint::Handle(); 431 Bigint& serialized_bigint = Bigint::Handle();
430 serialized_bigint ^= reader.ReadObject(); 432 serialized_bigint ^= reader.ReadObject();
431 const char* str1 = bigint.ToHexCString(allocator); 433 const char* str1 = bigint.ToHexCString(allocator);
432 const char* str2 = serialized_bigint.ToHexCString(allocator); 434 const char* str2 = serialized_bigint.ToHexCString(allocator);
433 EXPECT_STREQ(str1, str2); 435 EXPECT_STREQ(str1, str2);
434 free(const_cast<char*>(str1)); 436 free(const_cast<char*>(str1));
435 free(const_cast<char*>(str2)); 437 free(const_cast<char*>(str2));
436 438
437 // Read object back from the snapshot into a C structure. 439 // Read object back from the snapshot into a C structure.
438 ApiMessageReader api_reader(buffer, buffer_len, &zone_allocator); 440 ApiMessageReader api_reader(buffer, buffer_len, &zone_allocator);
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after
482 writer.WriteObject(Object::code_class()); 484 writer.WriteObject(Object::code_class());
483 writer.WriteObject(Object::instructions_class()); 485 writer.WriteObject(Object::instructions_class());
484 writer.WriteObject(Object::pc_descriptors_class()); 486 writer.WriteObject(Object::pc_descriptors_class());
485 writer.WriteObject(Object::exception_handlers_class()); 487 writer.WriteObject(Object::exception_handlers_class());
486 writer.WriteObject(Object::context_class()); 488 writer.WriteObject(Object::context_class());
487 writer.WriteObject(Object::context_scope_class()); 489 writer.WriteObject(Object::context_scope_class());
488 intptr_t buffer_len = writer.BytesWritten(); 490 intptr_t buffer_len = writer.BytesWritten();
489 491
490 // Read object back from the snapshot. 492 // Read object back from the snapshot.
491 SnapshotReader reader(buffer, buffer_len, Snapshot::kMessage, 493 SnapshotReader reader(buffer, buffer_len, Snapshot::kMessage,
492 Isolate::Current()); 494 Isolate::Current(), Thread::Current()->zone());
493 EXPECT(Object::class_class() == reader.ReadObject()); 495 EXPECT(Object::class_class() == reader.ReadObject());
494 EXPECT(Object::type_arguments_class() == reader.ReadObject()); 496 EXPECT(Object::type_arguments_class() == reader.ReadObject());
495 EXPECT(Object::function_class() == reader.ReadObject()); 497 EXPECT(Object::function_class() == reader.ReadObject());
496 EXPECT(Object::field_class() == reader.ReadObject()); 498 EXPECT(Object::field_class() == reader.ReadObject());
497 EXPECT(Object::token_stream_class() == reader.ReadObject()); 499 EXPECT(Object::token_stream_class() == reader.ReadObject());
498 EXPECT(Object::script_class() == reader.ReadObject()); 500 EXPECT(Object::script_class() == reader.ReadObject());
499 EXPECT(Object::library_class() == reader.ReadObject()); 501 EXPECT(Object::library_class() == reader.ReadObject());
500 EXPECT(Object::code_class() == reader.ReadObject()); 502 EXPECT(Object::code_class() == reader.ReadObject());
501 EXPECT(Object::instructions_class() == reader.ReadObject()); 503 EXPECT(Object::instructions_class() == reader.ReadObject());
502 EXPECT(Object::pc_descriptors_class() == reader.ReadObject()); 504 EXPECT(Object::pc_descriptors_class() == reader.ReadObject());
(...skipping 10 matching lines...) Expand all
513 EXPECT(Utf8::IsValid(reinterpret_cast<const uint8_t*>(cstr), strlen(cstr))); 515 EXPECT(Utf8::IsValid(reinterpret_cast<const uint8_t*>(cstr), strlen(cstr)));
514 // Write snapshot with object content. 516 // Write snapshot with object content.
515 uint8_t* buffer; 517 uint8_t* buffer;
516 MessageWriter writer(&buffer, &zone_allocator, true); 518 MessageWriter writer(&buffer, &zone_allocator, true);
517 String& str = String::Handle(String::New(cstr)); 519 String& str = String::Handle(String::New(cstr));
518 writer.WriteMessage(str); 520 writer.WriteMessage(str);
519 intptr_t buffer_len = writer.BytesWritten(); 521 intptr_t buffer_len = writer.BytesWritten();
520 522
521 // Read object back from the snapshot. 523 // Read object back from the snapshot.
522 SnapshotReader reader(buffer, buffer_len, 524 SnapshotReader reader(buffer, buffer_len,
523 Snapshot::kMessage, Isolate::Current()); 525 Snapshot::kMessage, Isolate::Current(), zone.GetZone());
524 String& serialized_str = String::Handle(); 526 String& serialized_str = String::Handle();
525 serialized_str ^= reader.ReadObject(); 527 serialized_str ^= reader.ReadObject();
526 EXPECT(str.Equals(serialized_str)); 528 EXPECT(str.Equals(serialized_str));
527 529
528 // Read object back from the snapshot into a C structure. 530 // Read object back from the snapshot into a C structure.
529 ApiNativeScope scope; 531 ApiNativeScope scope;
530 ApiMessageReader api_reader(buffer, buffer_len, &zone_allocator); 532 ApiMessageReader api_reader(buffer, buffer_len, &zone_allocator);
531 Dart_CObject* root = api_reader.ReadMessage(); 533 Dart_CObject* root = api_reader.ReadMessage();
532 EXPECT_EQ(Dart_CObject_kString, root->type); 534 EXPECT_EQ(Dart_CObject_kString, root->type);
533 EXPECT_STREQ(cstr, root->value.as_string); 535 EXPECT_STREQ(cstr, root->value.as_string);
(...skipping 27 matching lines...) Expand all
561 Smi& smi = Smi::Handle(); 563 Smi& smi = Smi::Handle();
562 for (int i = 0; i < kArrayLength; i++) { 564 for (int i = 0; i < kArrayLength; i++) {
563 smi ^= Smi::New(i); 565 smi ^= Smi::New(i);
564 array.SetAt(i, smi); 566 array.SetAt(i, smi);
565 } 567 }
566 writer.WriteMessage(array); 568 writer.WriteMessage(array);
567 intptr_t buffer_len = writer.BytesWritten(); 569 intptr_t buffer_len = writer.BytesWritten();
568 570
569 // Read object back from the snapshot. 571 // Read object back from the snapshot.
570 SnapshotReader reader(buffer, buffer_len, 572 SnapshotReader reader(buffer, buffer_len,
571 Snapshot::kMessage, Isolate::Current()); 573 Snapshot::kMessage, Isolate::Current(), zone.GetZone());
572 Array& serialized_array = Array::Handle(); 574 Array& serialized_array = Array::Handle();
573 serialized_array ^= reader.ReadObject(); 575 serialized_array ^= reader.ReadObject();
574 EXPECT(array.CanonicalizeEquals(serialized_array)); 576 EXPECT(array.CanonicalizeEquals(serialized_array));
575 577
576 // Read object back from the snapshot into a C structure. 578 // Read object back from the snapshot into a C structure.
577 ApiNativeScope scope; 579 ApiNativeScope scope;
578 ApiMessageReader api_reader(buffer, buffer_len, &zone_allocator); 580 ApiMessageReader api_reader(buffer, buffer_len, &zone_allocator);
579 Dart_CObject* root = api_reader.ReadMessage(); 581 Dart_CObject* root = api_reader.ReadMessage();
580 EXPECT_EQ(Dart_CObject_kArray, root->type); 582 EXPECT_EQ(Dart_CObject_kArray, root->type);
581 EXPECT_EQ(kArrayLength, root->value.as_array.length); 583 EXPECT_EQ(kArrayLength, root->value.as_array.length);
(...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after
646 // Write snapshot with object content. 648 // Write snapshot with object content.
647 uint8_t* buffer; 649 uint8_t* buffer;
648 MessageWriter writer(&buffer, &zone_allocator, true); 650 MessageWriter writer(&buffer, &zone_allocator, true);
649 const int kArrayLength = 0; 651 const int kArrayLength = 0;
650 Array& array = Array::Handle(Array::New(kArrayLength)); 652 Array& array = Array::Handle(Array::New(kArrayLength));
651 writer.WriteMessage(array); 653 writer.WriteMessage(array);
652 intptr_t buffer_len = writer.BytesWritten(); 654 intptr_t buffer_len = writer.BytesWritten();
653 655
654 // Read object back from the snapshot. 656 // Read object back from the snapshot.
655 SnapshotReader reader(buffer, buffer_len, 657 SnapshotReader reader(buffer, buffer_len,
656 Snapshot::kMessage, Isolate::Current()); 658 Snapshot::kMessage, Isolate::Current(), zone.GetZone());
657 Array& serialized_array = Array::Handle(); 659 Array& serialized_array = Array::Handle();
658 serialized_array ^= reader.ReadObject(); 660 serialized_array ^= reader.ReadObject();
659 EXPECT(array.CanonicalizeEquals(serialized_array)); 661 EXPECT(array.CanonicalizeEquals(serialized_array));
660 662
661 // Read object back from the snapshot into a C structure. 663 // Read object back from the snapshot into a C structure.
662 ApiNativeScope scope; 664 ApiNativeScope scope;
663 ApiMessageReader api_reader(buffer, buffer_len, &zone_allocator); 665 ApiMessageReader api_reader(buffer, buffer_len, &zone_allocator);
664 Dart_CObject* root = api_reader.ReadMessage(); 666 Dart_CObject* root = api_reader.ReadMessage();
665 EXPECT_EQ(Dart_CObject_kArray, root->type); 667 EXPECT_EQ(Dart_CObject_kArray, root->type);
666 EXPECT_EQ(kArrayLength, root->value.as_array.length); 668 EXPECT_EQ(kArrayLength, root->value.as_array.length);
(...skipping 12 matching lines...) Expand all
679 TypedData& typed_data = TypedData::Handle( 681 TypedData& typed_data = TypedData::Handle(
680 TypedData::New(kTypedDataUint8ArrayCid, kTypedDataLength)); 682 TypedData::New(kTypedDataUint8ArrayCid, kTypedDataLength));
681 for (int i = 0; i < kTypedDataLength; i++) { 683 for (int i = 0; i < kTypedDataLength; i++) {
682 typed_data.SetUint8(i, i); 684 typed_data.SetUint8(i, i);
683 } 685 }
684 writer.WriteMessage(typed_data); 686 writer.WriteMessage(typed_data);
685 intptr_t buffer_len = writer.BytesWritten(); 687 intptr_t buffer_len = writer.BytesWritten();
686 688
687 // Read object back from the snapshot. 689 // Read object back from the snapshot.
688 SnapshotReader reader(buffer, buffer_len, 690 SnapshotReader reader(buffer, buffer_len,
689 Snapshot::kMessage, Isolate::Current()); 691 Snapshot::kMessage, Isolate::Current(), zone.GetZone());
690 TypedData& serialized_typed_data = TypedData::Handle(); 692 TypedData& serialized_typed_data = TypedData::Handle();
691 serialized_typed_data ^= reader.ReadObject(); 693 serialized_typed_data ^= reader.ReadObject();
692 EXPECT(serialized_typed_data.IsTypedData()); 694 EXPECT(serialized_typed_data.IsTypedData());
693 695
694 // Read object back from the snapshot into a C structure. 696 // Read object back from the snapshot into a C structure.
695 ApiNativeScope scope; 697 ApiNativeScope scope;
696 ApiMessageReader api_reader(buffer, buffer_len, &zone_allocator); 698 ApiMessageReader api_reader(buffer, buffer_len, &zone_allocator);
697 Dart_CObject* root = api_reader.ReadMessage(); 699 Dart_CObject* root = api_reader.ReadMessage();
698 EXPECT_EQ(Dart_CObject_kTypedData, root->type); 700 EXPECT_EQ(Dart_CObject_kTypedData, root->type);
699 EXPECT_EQ(kTypedDataLength, root->value.as_typed_data.length); 701 EXPECT_EQ(kTypedDataLength, root->value.as_typed_data.length);
(...skipping 12 matching lines...) Expand all
712 const int kArrayLength = 127; \ 714 const int kArrayLength = 127; \
713 TypedData& array = TypedData::Handle( \ 715 TypedData& array = TypedData::Handle( \
714 TypedData::New(kTypedData##darttype##ArrayCid, kArrayLength)); \ 716 TypedData::New(kTypedData##darttype##ArrayCid, kArrayLength)); \
715 intptr_t scale = array.ElementSizeInBytes(); \ 717 intptr_t scale = array.ElementSizeInBytes(); \
716 for (int i = 0; i < kArrayLength; i++) { \ 718 for (int i = 0; i < kArrayLength; i++) { \
717 array.Set##darttype((i * scale), i); \ 719 array.Set##darttype((i * scale), i); \
718 } \ 720 } \
719 writer.WriteMessage(array); \ 721 writer.WriteMessage(array); \
720 intptr_t buffer_len = writer.BytesWritten(); \ 722 intptr_t buffer_len = writer.BytesWritten(); \
721 SnapshotReader reader(buffer, buffer_len, \ 723 SnapshotReader reader(buffer, buffer_len, \
722 Snapshot::kMessage, Isolate::Current()); \ 724 Snapshot::kMessage, Isolate::Current(), \
725 zone.GetZone()); \
723 TypedData& serialized_array = TypedData::Handle(); \ 726 TypedData& serialized_array = TypedData::Handle(); \
724 serialized_array ^= reader.ReadObject(); \ 727 serialized_array ^= reader.ReadObject(); \
725 for (int i = 0; i < kArrayLength; i++) { \ 728 for (int i = 0; i < kArrayLength; i++) { \
726 EXPECT_EQ(static_cast<ctype>(i), \ 729 EXPECT_EQ(static_cast<ctype>(i), \
727 serialized_array.Get##darttype(i*scale)); \ 730 serialized_array.Get##darttype(i*scale)); \
728 } \ 731 } \
729 } 732 }
730 733
731 734
732 #define TEST_EXTERNAL_TYPED_ARRAY(darttype, ctype) \ 735 #define TEST_EXTERNAL_TYPED_ARRAY(darttype, ctype) \
733 { \ 736 { \
734 StackZone zone(Isolate::Current()); \ 737 StackZone zone(Isolate::Current()); \
735 ctype data[] = { 0, 11, 22, 33, 44, 55, 66, 77 }; \ 738 ctype data[] = { 0, 11, 22, 33, 44, 55, 66, 77 }; \
736 intptr_t length = ARRAY_SIZE(data); \ 739 intptr_t length = ARRAY_SIZE(data); \
737 ExternalTypedData& array = ExternalTypedData::Handle( \ 740 ExternalTypedData& array = ExternalTypedData::Handle( \
738 ExternalTypedData::New(kExternalTypedData##darttype##ArrayCid, \ 741 ExternalTypedData::New(kExternalTypedData##darttype##ArrayCid, \
739 reinterpret_cast<uint8_t*>(data), length)); \ 742 reinterpret_cast<uint8_t*>(data), length)); \
740 intptr_t scale = array.ElementSizeInBytes(); \ 743 intptr_t scale = array.ElementSizeInBytes(); \
741 uint8_t* buffer; \ 744 uint8_t* buffer; \
742 MessageWriter writer(&buffer, &zone_allocator, true); \ 745 MessageWriter writer(&buffer, &zone_allocator, true); \
743 writer.WriteMessage(array); \ 746 writer.WriteMessage(array); \
744 intptr_t buffer_len = writer.BytesWritten(); \ 747 intptr_t buffer_len = writer.BytesWritten(); \
745 SnapshotReader reader(buffer, buffer_len, \ 748 SnapshotReader reader(buffer, buffer_len, \
746 Snapshot::kMessage, Isolate::Current()); \ 749 Snapshot::kMessage, Isolate::Current(), \
750 zone.GetZone()); \
747 TypedData& serialized_array = TypedData::Handle(); \ 751 TypedData& serialized_array = TypedData::Handle(); \
748 serialized_array ^= reader.ReadObject(); \ 752 serialized_array ^= reader.ReadObject(); \
749 for (int i = 0; i < length; i++) { \ 753 for (int i = 0; i < length; i++) { \
750 EXPECT_EQ(static_cast<ctype>(data[i]), \ 754 EXPECT_EQ(static_cast<ctype>(data[i]), \
751 serialized_array.Get##darttype(i*scale)); \ 755 serialized_array.Get##darttype(i*scale)); \
752 } \ 756 } \
753 } 757 }
754 758
755 759
756 TEST_CASE(SerializeTypedArray) { 760 TEST_CASE(SerializeTypedArray) {
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
788 uint8_t* buffer; 792 uint8_t* buffer;
789 MessageWriter writer(&buffer, &zone_allocator, true); 793 MessageWriter writer(&buffer, &zone_allocator, true);
790 const int kTypedDataLength = 0; 794 const int kTypedDataLength = 0;
791 TypedData& typed_data = TypedData::Handle( 795 TypedData& typed_data = TypedData::Handle(
792 TypedData::New(kTypedDataUint8ArrayCid, kTypedDataLength)); 796 TypedData::New(kTypedDataUint8ArrayCid, kTypedDataLength));
793 writer.WriteMessage(typed_data); 797 writer.WriteMessage(typed_data);
794 intptr_t buffer_len = writer.BytesWritten(); 798 intptr_t buffer_len = writer.BytesWritten();
795 799
796 // Read object back from the snapshot. 800 // Read object back from the snapshot.
797 SnapshotReader reader(buffer, buffer_len, 801 SnapshotReader reader(buffer, buffer_len,
798 Snapshot::kMessage, Isolate::Current()); 802 Snapshot::kMessage, Isolate::Current(), zone.GetZone());
799 TypedData& serialized_typed_data = TypedData::Handle(); 803 TypedData& serialized_typed_data = TypedData::Handle();
800 serialized_typed_data ^= reader.ReadObject(); 804 serialized_typed_data ^= reader.ReadObject();
801 EXPECT(serialized_typed_data.IsTypedData()); 805 EXPECT(serialized_typed_data.IsTypedData());
802 806
803 // Read object back from the snapshot into a C structure. 807 // Read object back from the snapshot into a C structure.
804 ApiNativeScope scope; 808 ApiNativeScope scope;
805 ApiMessageReader api_reader(buffer, buffer_len, &zone_allocator); 809 ApiMessageReader api_reader(buffer, buffer_len, &zone_allocator);
806 Dart_CObject* root = api_reader.ReadMessage(); 810 Dart_CObject* root = api_reader.ReadMessage();
807 EXPECT_EQ(Dart_CObject_kTypedData, root->type); 811 EXPECT_EQ(Dart_CObject_kTypedData, root->type);
808 EXPECT_EQ(Dart_TypedData_kUint8, root->value.as_typed_data.type); 812 EXPECT_EQ(Dart_TypedData_kUint8, root->value.as_typed_data.type);
(...skipping 110 matching lines...) Expand 10 before | Expand all | Expand 10 after
919 lib.Register(); 923 lib.Register();
920 EXPECT(CompilerTest::TestCompileScript(lib, script)); 924 EXPECT(CompilerTest::TestCompileScript(lib, script));
921 925
922 // Write snapshot with script content. 926 // Write snapshot with script content.
923 uint8_t* buffer; 927 uint8_t* buffer;
924 TestSnapshotWriter writer(&buffer, &malloc_allocator); 928 TestSnapshotWriter writer(&buffer, &malloc_allocator);
925 writer.WriteScript(script); 929 writer.WriteScript(script);
926 930
927 // Read object back from the snapshot. 931 // Read object back from the snapshot.
928 SnapshotReader reader(buffer, writer.BytesWritten(), 932 SnapshotReader reader(buffer, writer.BytesWritten(),
929 Snapshot::kScript, Isolate::Current()); 933 Snapshot::kScript, Isolate::Current(),
934 Thread::Current()->zone());
930 Script& serialized_script = Script::Handle(); 935 Script& serialized_script = Script::Handle();
931 serialized_script ^= reader.ReadObject(); 936 serialized_script ^= reader.ReadObject();
932 937
933 // Check if the serialized script object matches the original script. 938 // Check if the serialized script object matches the original script.
934 String& expected_literal = String::Handle(); 939 String& expected_literal = String::Handle();
935 String& actual_literal = String::Handle(); 940 String& actual_literal = String::Handle();
936 String& str = String::Handle(); 941 String& str = String::Handle();
937 str ^= serialized_script.url(); 942 str ^= serialized_script.url();
938 EXPECT(url.Equals(str)); 943 EXPECT(url.Equals(str));
939 944
(...skipping 1786 matching lines...) Expand 10 before | Expand all | Expand 10 after
2726 StackZone zone(Isolate::Current()); 2731 StackZone zone(Isolate::Current());
2727 uint8_t* buffer; 2732 uint8_t* buffer;
2728 MessageWriter writer(&buffer, &zone_allocator, true); 2733 MessageWriter writer(&buffer, &zone_allocator, true);
2729 writer.WriteInlinedObjectHeader(kOmittedObjectId); 2734 writer.WriteInlinedObjectHeader(kOmittedObjectId);
2730 // For performance, we'd like single-byte headers when ids are omitted. 2735 // For performance, we'd like single-byte headers when ids are omitted.
2731 // If this starts failing, consider renumbering the snapshot ids. 2736 // If this starts failing, consider renumbering the snapshot ids.
2732 EXPECT_EQ(1, writer.BytesWritten()); 2737 EXPECT_EQ(1, writer.BytesWritten());
2733 } 2738 }
2734 2739
2735 } // namespace dart 2740 } // namespace dart
OLDNEW
« no previous file with comments | « runtime/vm/snapshot.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698