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

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

Issue 1319583003: Use the zone in ApiNativeScope for allocating objects in the ApiMessageReader instead of passing in… (Closed) Base URL: git@github.com:dart-lang/sdk.git@master
Patch Set: address-code-review-comments Created 5 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
« no previous file with comments | « runtime/vm/native_message_handler.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_tools_api.h" 7 #include "include/dart_tools_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 117 matching lines...) Expand 10 before | Expand all | Expand 10 after
128 } 128 }
129 } 129 }
130 130
131 131
132 static void CheckEncodeDecodeMessage(Dart_CObject* root) { 132 static void CheckEncodeDecodeMessage(Dart_CObject* root) {
133 // Encode and decode the message. 133 // Encode and decode the message.
134 uint8_t* buffer = NULL; 134 uint8_t* buffer = NULL;
135 ApiMessageWriter writer(&buffer, &malloc_allocator); 135 ApiMessageWriter writer(&buffer, &malloc_allocator);
136 writer.WriteCMessage(root); 136 writer.WriteCMessage(root);
137 137
138 ApiMessageReader api_reader(buffer, writer.BytesWritten(), &zone_allocator); 138 ApiMessageReader api_reader(buffer, writer.BytesWritten());
139 Dart_CObject* new_root = api_reader.ReadMessage(); 139 Dart_CObject* new_root = api_reader.ReadMessage();
140 140
141 // Check that the two messages are the same. 141 // Check that the two messages are the same.
142 CompareDartCObjects(root, new_root); 142 CompareDartCObjects(root, new_root);
143 } 143 }
144 144
145 145
146 static void ExpectEncodeFail(Dart_CObject* root) { 146 static void ExpectEncodeFail(Dart_CObject* root) {
147 uint8_t* buffer = NULL; 147 uint8_t* buffer = NULL;
148 ApiMessageWriter writer(&buffer, &malloc_allocator); 148 ApiMessageWriter writer(&buffer, &malloc_allocator);
(...skipping 15 matching lines...) Expand all
164 // Read object back from the snapshot. 164 // Read object back from the snapshot.
165 MessageSnapshotReader reader(buffer, 165 MessageSnapshotReader reader(buffer,
166 buffer_len, 166 buffer_len,
167 Isolate::Current(), 167 Isolate::Current(),
168 zone.GetZone()); 168 zone.GetZone());
169 const Object& serialized_object = Object::Handle(reader.ReadObject()); 169 const Object& serialized_object = Object::Handle(reader.ReadObject());
170 EXPECT(Equals(null_object, serialized_object)); 170 EXPECT(Equals(null_object, serialized_object));
171 171
172 // Read object back from the snapshot into a C structure. 172 // Read object back from the snapshot into a C structure.
173 ApiNativeScope scope; 173 ApiNativeScope scope;
174 ApiMessageReader api_reader(buffer, buffer_len, &zone_allocator); 174 ApiMessageReader api_reader(buffer, buffer_len);
175 Dart_CObject* root = api_reader.ReadMessage(); 175 Dart_CObject* root = api_reader.ReadMessage();
176 EXPECT_NOTNULL(root); 176 EXPECT_NOTNULL(root);
177 EXPECT_EQ(Dart_CObject_kNull, root->type); 177 EXPECT_EQ(Dart_CObject_kNull, root->type);
178 CheckEncodeDecodeMessage(root); 178 CheckEncodeDecodeMessage(root);
179 } 179 }
180 180
181 181
182 TEST_CASE(SerializeSmi1) { 182 TEST_CASE(SerializeSmi1) {
183 StackZone zone(Thread::Current()); 183 StackZone zone(Thread::Current());
184 184
185 // Write snapshot with object content. 185 // Write snapshot with object content.
186 const Smi& smi = Smi::Handle(Smi::New(124)); 186 const Smi& smi = Smi::Handle(Smi::New(124));
187 uint8_t* buffer; 187 uint8_t* buffer;
188 MessageWriter writer(&buffer, &zone_allocator, true); 188 MessageWriter writer(&buffer, &zone_allocator, true);
189 writer.WriteMessage(smi); 189 writer.WriteMessage(smi);
190 intptr_t buffer_len = writer.BytesWritten(); 190 intptr_t buffer_len = writer.BytesWritten();
191 191
192 // Read object back from the snapshot. 192 // Read object back from the snapshot.
193 MessageSnapshotReader reader(buffer, 193 MessageSnapshotReader reader(buffer,
194 buffer_len, 194 buffer_len,
195 Isolate::Current(), 195 Isolate::Current(),
196 zone.GetZone()); 196 zone.GetZone());
197 const Object& serialized_object = Object::Handle(reader.ReadObject()); 197 const Object& serialized_object = Object::Handle(reader.ReadObject());
198 EXPECT(Equals(smi, serialized_object)); 198 EXPECT(Equals(smi, serialized_object));
199 199
200 // Read object back from the snapshot into a C structure. 200 // Read object back from the snapshot into a C structure.
201 ApiNativeScope scope; 201 ApiNativeScope scope;
202 ApiMessageReader api_reader(buffer, buffer_len, &zone_allocator); 202 ApiMessageReader api_reader(buffer, buffer_len);
203 Dart_CObject* root = api_reader.ReadMessage(); 203 Dart_CObject* root = api_reader.ReadMessage();
204 EXPECT_NOTNULL(root); 204 EXPECT_NOTNULL(root);
205 EXPECT_EQ(Dart_CObject_kInt32, root->type); 205 EXPECT_EQ(Dart_CObject_kInt32, root->type);
206 EXPECT_EQ(smi.Value(), root->value.as_int32); 206 EXPECT_EQ(smi.Value(), root->value.as_int32);
207 CheckEncodeDecodeMessage(root); 207 CheckEncodeDecodeMessage(root);
208 } 208 }
209 209
210 210
211 TEST_CASE(SerializeSmi2) { 211 TEST_CASE(SerializeSmi2) {
212 StackZone zone(Thread::Current()); 212 StackZone zone(Thread::Current());
213 213
214 // Write snapshot with object content. 214 // Write snapshot with object content.
215 const Smi& smi = Smi::Handle(Smi::New(-1)); 215 const Smi& smi = Smi::Handle(Smi::New(-1));
216 uint8_t* buffer; 216 uint8_t* buffer;
217 MessageWriter writer(&buffer, &zone_allocator, true); 217 MessageWriter writer(&buffer, &zone_allocator, true);
218 writer.WriteMessage(smi); 218 writer.WriteMessage(smi);
219 intptr_t buffer_len = writer.BytesWritten(); 219 intptr_t buffer_len = writer.BytesWritten();
220 220
221 // Read object back from the snapshot. 221 // Read object back from the snapshot.
222 MessageSnapshotReader reader(buffer, 222 MessageSnapshotReader reader(buffer,
223 buffer_len, 223 buffer_len,
224 Isolate::Current(), 224 Isolate::Current(),
225 zone.GetZone()); 225 zone.GetZone());
226 const Object& serialized_object = Object::Handle(reader.ReadObject()); 226 const Object& serialized_object = Object::Handle(reader.ReadObject());
227 EXPECT(Equals(smi, serialized_object)); 227 EXPECT(Equals(smi, serialized_object));
228 228
229 // Read object back from the snapshot into a C structure. 229 // Read object back from the snapshot into a C structure.
230 ApiNativeScope scope; 230 ApiNativeScope scope;
231 ApiMessageReader api_reader(buffer, buffer_len, &zone_allocator); 231 ApiMessageReader api_reader(buffer, buffer_len);
232 Dart_CObject* root = api_reader.ReadMessage(); 232 Dart_CObject* root = api_reader.ReadMessage();
233 EXPECT_NOTNULL(root); 233 EXPECT_NOTNULL(root);
234 EXPECT_EQ(Dart_CObject_kInt32, root->type); 234 EXPECT_EQ(Dart_CObject_kInt32, root->type);
235 EXPECT_EQ(smi.Value(), root->value.as_int32); 235 EXPECT_EQ(smi.Value(), root->value.as_int32);
236 CheckEncodeDecodeMessage(root); 236 CheckEncodeDecodeMessage(root);
237 } 237 }
238 238
239 239
240 Dart_CObject* SerializeAndDeserializeMint(const Mint& mint) { 240 Dart_CObject* SerializeAndDeserializeMint(const Mint& mint) {
241 // Write snapshot with object content. 241 // Write snapshot with object content.
242 uint8_t* buffer; 242 uint8_t* buffer;
243 MessageWriter writer(&buffer, &zone_allocator, true); 243 MessageWriter writer(&buffer, &zone_allocator, true);
244 writer.WriteMessage(mint); 244 writer.WriteMessage(mint);
245 intptr_t buffer_len = writer.BytesWritten(); 245 intptr_t buffer_len = writer.BytesWritten();
246 246
247 { 247 {
248 // Switch to a regular zone, where VM handle allocation is allowed. 248 // Switch to a regular zone, where VM handle allocation is allowed.
249 StackZone zone(Thread::Current()); 249 StackZone zone(Thread::Current());
250 // Read object back from the snapshot. 250 // Read object back from the snapshot.
251 MessageSnapshotReader reader(buffer, 251 MessageSnapshotReader reader(buffer,
252 buffer_len, 252 buffer_len,
253 Isolate::Current(), 253 Isolate::Current(),
254 Thread::Current()->zone()); 254 Thread::Current()->zone());
255 const Object& serialized_object = Object::Handle(reader.ReadObject()); 255 const Object& serialized_object = Object::Handle(reader.ReadObject());
256 EXPECT(serialized_object.IsMint()); 256 EXPECT(serialized_object.IsMint());
257 } 257 }
258 258
259 // Read object back from the snapshot into a C structure. 259 // Read object back from the snapshot into a C structure.
260 ApiMessageReader api_reader(buffer, buffer_len, &zone_allocator); 260 ApiMessageReader api_reader(buffer, buffer_len);
261 Dart_CObject* root = api_reader.ReadMessage(); 261 Dart_CObject* root = api_reader.ReadMessage();
262 EXPECT_NOTNULL(root); 262 EXPECT_NOTNULL(root);
263 CheckEncodeDecodeMessage(root); 263 CheckEncodeDecodeMessage(root);
264 return root; 264 return root;
265 } 265 }
266 266
267 267
268 void CheckMint(int64_t value) { 268 void CheckMint(int64_t value) {
269 StackZone zone(Thread::Current()); 269 StackZone zone(Thread::Current());
270 270
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after
324 // Read object back from the snapshot. 324 // Read object back from the snapshot.
325 MessageSnapshotReader reader(buffer, 325 MessageSnapshotReader reader(buffer,
326 buffer_len, 326 buffer_len,
327 Isolate::Current(), 327 Isolate::Current(),
328 zone.GetZone()); 328 zone.GetZone());
329 const Object& serialized_object = Object::Handle(reader.ReadObject()); 329 const Object& serialized_object = Object::Handle(reader.ReadObject());
330 EXPECT(Equals(dbl, serialized_object)); 330 EXPECT(Equals(dbl, serialized_object));
331 331
332 // Read object back from the snapshot into a C structure. 332 // Read object back from the snapshot into a C structure.
333 ApiNativeScope scope; 333 ApiNativeScope scope;
334 ApiMessageReader api_reader(buffer, buffer_len, &zone_allocator); 334 ApiMessageReader api_reader(buffer, buffer_len);
335 Dart_CObject* root = api_reader.ReadMessage(); 335 Dart_CObject* root = api_reader.ReadMessage();
336 EXPECT_NOTNULL(root); 336 EXPECT_NOTNULL(root);
337 EXPECT_EQ(Dart_CObject_kDouble, root->type); 337 EXPECT_EQ(Dart_CObject_kDouble, root->type);
338 EXPECT_EQ(dbl.value(), root->value.as_double); 338 EXPECT_EQ(dbl.value(), root->value.as_double);
339 CheckEncodeDecodeMessage(root); 339 CheckEncodeDecodeMessage(root);
340 } 340 }
341 341
342 342
343 TEST_CASE(SerializeTrue) { 343 TEST_CASE(SerializeTrue) {
344 StackZone zone(Thread::Current()); 344 StackZone zone(Thread::Current());
(...skipping 10 matching lines...) Expand all
355 buffer_len, 355 buffer_len,
356 Isolate::Current(), 356 Isolate::Current(),
357 zone.GetZone()); 357 zone.GetZone());
358 const Object& serialized_object = Object::Handle(reader.ReadObject()); 358 const Object& serialized_object = Object::Handle(reader.ReadObject());
359 fprintf(stderr, "%s / %s\n", bl.ToCString(), serialized_object.ToCString()); 359 fprintf(stderr, "%s / %s\n", bl.ToCString(), serialized_object.ToCString());
360 360
361 EXPECT(Equals(bl, serialized_object)); 361 EXPECT(Equals(bl, serialized_object));
362 362
363 // Read object back from the snapshot into a C structure. 363 // Read object back from the snapshot into a C structure.
364 ApiNativeScope scope; 364 ApiNativeScope scope;
365 ApiMessageReader api_reader(buffer, buffer_len, &zone_allocator); 365 ApiMessageReader api_reader(buffer, buffer_len);
366 Dart_CObject* root = api_reader.ReadMessage(); 366 Dart_CObject* root = api_reader.ReadMessage();
367 EXPECT_NOTNULL(root); 367 EXPECT_NOTNULL(root);
368 EXPECT_EQ(Dart_CObject_kBool, root->type); 368 EXPECT_EQ(Dart_CObject_kBool, root->type);
369 EXPECT_EQ(true, root->value.as_bool); 369 EXPECT_EQ(true, root->value.as_bool);
370 CheckEncodeDecodeMessage(root); 370 CheckEncodeDecodeMessage(root);
371 } 371 }
372 372
373 373
374 TEST_CASE(SerializeFalse) { 374 TEST_CASE(SerializeFalse) {
375 StackZone zone(Thread::Current()); 375 StackZone zone(Thread::Current());
376 376
377 // Write snapshot with false object. 377 // Write snapshot with false object.
378 const Bool& bl = Bool::False(); 378 const Bool& bl = Bool::False();
379 uint8_t* buffer; 379 uint8_t* buffer;
380 MessageWriter writer(&buffer, &zone_allocator, true); 380 MessageWriter writer(&buffer, &zone_allocator, true);
381 writer.WriteMessage(bl); 381 writer.WriteMessage(bl);
382 intptr_t buffer_len = writer.BytesWritten(); 382 intptr_t buffer_len = writer.BytesWritten();
383 383
384 // Read object back from the snapshot. 384 // Read object back from the snapshot.
385 MessageSnapshotReader reader(buffer, 385 MessageSnapshotReader reader(buffer,
386 buffer_len, 386 buffer_len,
387 Isolate::Current(), 387 Isolate::Current(),
388 zone.GetZone()); 388 zone.GetZone());
389 const Object& serialized_object = Object::Handle(reader.ReadObject()); 389 const Object& serialized_object = Object::Handle(reader.ReadObject());
390 EXPECT(Equals(bl, serialized_object)); 390 EXPECT(Equals(bl, serialized_object));
391 391
392 // Read object back from the snapshot into a C structure. 392 // Read object back from the snapshot into a C structure.
393 ApiNativeScope scope; 393 ApiNativeScope scope;
394 ApiMessageReader api_reader(buffer, buffer_len, &zone_allocator); 394 ApiMessageReader api_reader(buffer, buffer_len);
395 Dart_CObject* root = api_reader.ReadMessage(); 395 Dart_CObject* root = api_reader.ReadMessage();
396 EXPECT_NOTNULL(root); 396 EXPECT_NOTNULL(root);
397 EXPECT_EQ(Dart_CObject_kBool, root->type); 397 EXPECT_EQ(Dart_CObject_kBool, root->type);
398 EXPECT_EQ(false, root->value.as_bool); 398 EXPECT_EQ(false, root->value.as_bool);
399 CheckEncodeDecodeMessage(root); 399 CheckEncodeDecodeMessage(root);
400 } 400 }
401 401
402 402
403 static uword allocator(intptr_t size) { 403 static uword allocator(intptr_t size) {
404 return reinterpret_cast<uword>(malloc(size)); 404 return reinterpret_cast<uword>(malloc(size));
(...skipping 15 matching lines...) Expand all
420 buffer_len, 420 buffer_len,
421 Isolate::Current(), 421 Isolate::Current(),
422 zone.GetZone()); 422 zone.GetZone());
423 Capability& obj = Capability::Handle(); 423 Capability& obj = Capability::Handle();
424 obj ^= reader.ReadObject(); 424 obj ^= reader.ReadObject();
425 425
426 EXPECT_STREQ(12345, obj.Id()); 426 EXPECT_STREQ(12345, obj.Id());
427 427
428 // Read object back from the snapshot into a C structure. 428 // Read object back from the snapshot into a C structure.
429 ApiNativeScope scope; 429 ApiNativeScope scope;
430 ApiMessageReader api_reader(buffer, buffer_len, &zone_allocator); 430 ApiMessageReader api_reader(buffer, buffer_len);
431 Dart_CObject* root = api_reader.ReadMessage(); 431 Dart_CObject* root = api_reader.ReadMessage();
432 EXPECT_NOTNULL(root); 432 EXPECT_NOTNULL(root);
433 EXPECT_EQ(Dart_CObject_kCapability, root->type); 433 EXPECT_EQ(Dart_CObject_kCapability, root->type);
434 int64_t id = root->value.as_capability.id; 434 int64_t id = root->value.as_capability.id;
435 EXPECT_EQ(12345, id); 435 EXPECT_EQ(12345, id);
436 CheckEncodeDecodeMessage(root); 436 CheckEncodeDecodeMessage(root);
437 } 437 }
438 438
439 439
440 TEST_CASE(SerializeBigint) { 440 TEST_CASE(SerializeBigint) {
(...skipping 14 matching lines...) Expand all
455 buffer_len, 455 buffer_len,
456 Isolate::Current(), 456 Isolate::Current(),
457 zone.GetZone()); 457 zone.GetZone());
458 Bigint& obj = Bigint::Handle(); 458 Bigint& obj = Bigint::Handle();
459 obj ^= reader.ReadObject(); 459 obj ^= reader.ReadObject();
460 460
461 EXPECT_STREQ(bigint.ToHexCString(allocator), obj.ToHexCString(allocator)); 461 EXPECT_STREQ(bigint.ToHexCString(allocator), obj.ToHexCString(allocator));
462 462
463 // Read object back from the snapshot into a C structure. 463 // Read object back from the snapshot into a C structure.
464 ApiNativeScope scope; 464 ApiNativeScope scope;
465 ApiMessageReader api_reader(buffer, buffer_len, &zone_allocator); 465 ApiMessageReader api_reader(buffer, buffer_len);
466 Dart_CObject* root = api_reader.ReadMessage(); 466 Dart_CObject* root = api_reader.ReadMessage();
467 EXPECT_NOTNULL(root); 467 EXPECT_NOTNULL(root);
468 EXPECT_EQ(Dart_CObject_kBigint, root->type); 468 EXPECT_EQ(Dart_CObject_kBigint, root->type);
469 char* hex_value = TestCase::BigintToHexValue(root); 469 char* hex_value = TestCase::BigintToHexValue(root);
470 EXPECT_STREQ(cstr, hex_value); 470 EXPECT_STREQ(cstr, hex_value);
471 free(hex_value); 471 free(hex_value);
472 CheckEncodeDecodeMessage(root); 472 CheckEncodeDecodeMessage(root);
473 } 473 }
474 474
475 475
(...skipping 15 matching lines...) Expand all
491 Bigint& serialized_bigint = Bigint::Handle(); 491 Bigint& serialized_bigint = Bigint::Handle();
492 serialized_bigint ^= reader.ReadObject(); 492 serialized_bigint ^= reader.ReadObject();
493 const char* str1 = bigint.ToHexCString(allocator); 493 const char* str1 = bigint.ToHexCString(allocator);
494 const char* str2 = serialized_bigint.ToHexCString(allocator); 494 const char* str2 = serialized_bigint.ToHexCString(allocator);
495 EXPECT_STREQ(str1, str2); 495 EXPECT_STREQ(str1, str2);
496 free(const_cast<char*>(str1)); 496 free(const_cast<char*>(str1));
497 free(const_cast<char*>(str2)); 497 free(const_cast<char*>(str2));
498 } 498 }
499 499
500 // Read object back from the snapshot into a C structure. 500 // Read object back from the snapshot into a C structure.
501 ApiMessageReader api_reader(buffer, buffer_len, &zone_allocator); 501 ApiMessageReader api_reader(buffer, buffer_len);
502 Dart_CObject* root = api_reader.ReadMessage(); 502 Dart_CObject* root = api_reader.ReadMessage();
503 // Bigint not supported. 503 // Bigint not supported.
504 EXPECT_NOTNULL(root); 504 EXPECT_NOTNULL(root);
505 CheckEncodeDecodeMessage(root); 505 CheckEncodeDecodeMessage(root);
506 return root; 506 return root;
507 } 507 }
508 508
509 509
510 void CheckBigint(const char* bigint_value) { 510 void CheckBigint(const char* bigint_value) {
511 StackZone zone(Thread::Current()); 511 StackZone zone(Thread::Current());
(...skipping 74 matching lines...) Expand 10 before | Expand all | Expand 10 after
586 MessageSnapshotReader reader(buffer, 586 MessageSnapshotReader reader(buffer,
587 buffer_len, 587 buffer_len,
588 Isolate::Current(), 588 Isolate::Current(),
589 zone.GetZone()); 589 zone.GetZone());
590 String& serialized_str = String::Handle(); 590 String& serialized_str = String::Handle();
591 serialized_str ^= reader.ReadObject(); 591 serialized_str ^= reader.ReadObject();
592 EXPECT(str.Equals(serialized_str)); 592 EXPECT(str.Equals(serialized_str));
593 593
594 // Read object back from the snapshot into a C structure. 594 // Read object back from the snapshot into a C structure.
595 ApiNativeScope scope; 595 ApiNativeScope scope;
596 ApiMessageReader api_reader(buffer, buffer_len, &zone_allocator); 596 ApiMessageReader api_reader(buffer, buffer_len);
597 Dart_CObject* root = api_reader.ReadMessage(); 597 Dart_CObject* root = api_reader.ReadMessage();
598 EXPECT_EQ(Dart_CObject_kString, root->type); 598 EXPECT_EQ(Dart_CObject_kString, root->type);
599 EXPECT_STREQ(cstr, root->value.as_string); 599 EXPECT_STREQ(cstr, root->value.as_string);
600 CheckEncodeDecodeMessage(root); 600 CheckEncodeDecodeMessage(root);
601 } 601 }
602 602
603 603
604 TEST_CASE(SerializeString) { 604 TEST_CASE(SerializeString) {
605 TestString("This string shall be serialized"); 605 TestString("This string shall be serialized");
606 TestString("æøå"); // This file is UTF-8 encoded. 606 TestString("æøå"); // This file is UTF-8 encoded.
(...skipping 29 matching lines...) Expand all
636 MessageSnapshotReader reader(buffer, 636 MessageSnapshotReader reader(buffer,
637 buffer_len, 637 buffer_len,
638 Isolate::Current(), 638 Isolate::Current(),
639 zone.GetZone()); 639 zone.GetZone());
640 Array& serialized_array = Array::Handle(); 640 Array& serialized_array = Array::Handle();
641 serialized_array ^= reader.ReadObject(); 641 serialized_array ^= reader.ReadObject();
642 EXPECT(array.CanonicalizeEquals(serialized_array)); 642 EXPECT(array.CanonicalizeEquals(serialized_array));
643 643
644 // Read object back from the snapshot into a C structure. 644 // Read object back from the snapshot into a C structure.
645 ApiNativeScope scope; 645 ApiNativeScope scope;
646 ApiMessageReader api_reader(buffer, buffer_len, &zone_allocator); 646 ApiMessageReader api_reader(buffer, buffer_len);
647 Dart_CObject* root = api_reader.ReadMessage(); 647 Dart_CObject* root = api_reader.ReadMessage();
648 EXPECT_EQ(Dart_CObject_kArray, root->type); 648 EXPECT_EQ(Dart_CObject_kArray, root->type);
649 EXPECT_EQ(kArrayLength, root->value.as_array.length); 649 EXPECT_EQ(kArrayLength, root->value.as_array.length);
650 for (int i = 0; i < kArrayLength; i++) { 650 for (int i = 0; i < kArrayLength; i++) {
651 Dart_CObject* element = root->value.as_array.values[i]; 651 Dart_CObject* element = root->value.as_array.values[i];
652 EXPECT_EQ(Dart_CObject_kInt32, element->type); 652 EXPECT_EQ(Dart_CObject_kInt32, element->type);
653 EXPECT_EQ(i, element->value.as_int32); 653 EXPECT_EQ(i, element->value.as_int32);
654 } 654 }
655 CheckEncodeDecodeMessage(root); 655 CheckEncodeDecodeMessage(root);
656 } 656 }
(...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after
723 MessageSnapshotReader reader(buffer, 723 MessageSnapshotReader reader(buffer,
724 buffer_len, 724 buffer_len,
725 Isolate::Current(), 725 Isolate::Current(),
726 zone.GetZone()); 726 zone.GetZone());
727 Array& serialized_array = Array::Handle(); 727 Array& serialized_array = Array::Handle();
728 serialized_array ^= reader.ReadObject(); 728 serialized_array ^= reader.ReadObject();
729 EXPECT(array.CanonicalizeEquals(serialized_array)); 729 EXPECT(array.CanonicalizeEquals(serialized_array));
730 730
731 // Read object back from the snapshot into a C structure. 731 // Read object back from the snapshot into a C structure.
732 ApiNativeScope scope; 732 ApiNativeScope scope;
733 ApiMessageReader api_reader(buffer, buffer_len, &zone_allocator); 733 ApiMessageReader api_reader(buffer, buffer_len);
734 Dart_CObject* root = api_reader.ReadMessage(); 734 Dart_CObject* root = api_reader.ReadMessage();
735 EXPECT_EQ(Dart_CObject_kArray, root->type); 735 EXPECT_EQ(Dart_CObject_kArray, root->type);
736 EXPECT_EQ(kArrayLength, root->value.as_array.length); 736 EXPECT_EQ(kArrayLength, root->value.as_array.length);
737 EXPECT(root->value.as_array.values == NULL); 737 EXPECT(root->value.as_array.values == NULL);
738 CheckEncodeDecodeMessage(root); 738 CheckEncodeDecodeMessage(root);
739 } 739 }
740 740
741 741
742 TEST_CASE(SerializeByteArray) { 742 TEST_CASE(SerializeByteArray) {
743 StackZone zone(Thread::Current()); 743 StackZone zone(Thread::Current());
(...skipping 14 matching lines...) Expand all
758 MessageSnapshotReader reader(buffer, 758 MessageSnapshotReader reader(buffer,
759 buffer_len, 759 buffer_len,
760 Isolate::Current(), 760 Isolate::Current(),
761 zone.GetZone()); 761 zone.GetZone());
762 TypedData& serialized_typed_data = TypedData::Handle(); 762 TypedData& serialized_typed_data = TypedData::Handle();
763 serialized_typed_data ^= reader.ReadObject(); 763 serialized_typed_data ^= reader.ReadObject();
764 EXPECT(serialized_typed_data.IsTypedData()); 764 EXPECT(serialized_typed_data.IsTypedData());
765 765
766 // Read object back from the snapshot into a C structure. 766 // Read object back from the snapshot into a C structure.
767 ApiNativeScope scope; 767 ApiNativeScope scope;
768 ApiMessageReader api_reader(buffer, buffer_len, &zone_allocator); 768 ApiMessageReader api_reader(buffer, buffer_len);
769 Dart_CObject* root = api_reader.ReadMessage(); 769 Dart_CObject* root = api_reader.ReadMessage();
770 EXPECT_EQ(Dart_CObject_kTypedData, root->type); 770 EXPECT_EQ(Dart_CObject_kTypedData, root->type);
771 EXPECT_EQ(kTypedDataLength, root->value.as_typed_data.length); 771 EXPECT_EQ(kTypedDataLength, root->value.as_typed_data.length);
772 for (int i = 0; i < kTypedDataLength; i++) { 772 for (int i = 0; i < kTypedDataLength; i++) {
773 EXPECT(root->value.as_typed_data.values[i] == i); 773 EXPECT(root->value.as_typed_data.values[i] == i);
774 } 774 }
775 CheckEncodeDecodeMessage(root); 775 CheckEncodeDecodeMessage(root);
776 } 776 }
777 777
778 778
(...skipping 92 matching lines...) Expand 10 before | Expand all | Expand 10 after
871 MessageSnapshotReader reader(buffer, 871 MessageSnapshotReader reader(buffer,
872 buffer_len, 872 buffer_len,
873 Isolate::Current(), 873 Isolate::Current(),
874 zone.GetZone()); 874 zone.GetZone());
875 TypedData& serialized_typed_data = TypedData::Handle(); 875 TypedData& serialized_typed_data = TypedData::Handle();
876 serialized_typed_data ^= reader.ReadObject(); 876 serialized_typed_data ^= reader.ReadObject();
877 EXPECT(serialized_typed_data.IsTypedData()); 877 EXPECT(serialized_typed_data.IsTypedData());
878 878
879 // Read object back from the snapshot into a C structure. 879 // Read object back from the snapshot into a C structure.
880 ApiNativeScope scope; 880 ApiNativeScope scope;
881 ApiMessageReader api_reader(buffer, buffer_len, &zone_allocator); 881 ApiMessageReader api_reader(buffer, buffer_len);
882 Dart_CObject* root = api_reader.ReadMessage(); 882 Dart_CObject* root = api_reader.ReadMessage();
883 EXPECT_EQ(Dart_CObject_kTypedData, root->type); 883 EXPECT_EQ(Dart_CObject_kTypedData, root->type);
884 EXPECT_EQ(Dart_TypedData_kUint8, root->value.as_typed_data.type); 884 EXPECT_EQ(Dart_TypedData_kUint8, root->value.as_typed_data.type);
885 EXPECT_EQ(kTypedDataLength, root->value.as_typed_data.length); 885 EXPECT_EQ(kTypedDataLength, root->value.as_typed_data.length);
886 EXPECT(root->value.as_typed_data.values == NULL); 886 EXPECT(root->value.as_typed_data.values == NULL);
887 CheckEncodeDecodeMessage(root); 887 CheckEncodeDecodeMessage(root);
888 } 888 }
889 889
890 890
891 class TestSnapshotWriter : public SnapshotWriter { 891 class TestSnapshotWriter : public SnapshotWriter {
(...skipping 831 matching lines...) Expand 10 before | Expand all | Expand 10 after
1723 uint8_t* buffer = NULL; 1723 uint8_t* buffer = NULL;
1724 ApiMessageWriter writer(&buffer, &zone_allocator); 1724 ApiMessageWriter writer(&buffer, &zone_allocator);
1725 1725
1726 static const int kArrayLength = 2; 1726 static const int kArrayLength = 2;
1727 intptr_t data[kArrayLength] = {1, 2}; 1727 intptr_t data[kArrayLength] = {1, 2};
1728 int len = kArrayLength; 1728 int len = kArrayLength;
1729 writer.WriteMessage(len, data); 1729 writer.WriteMessage(len, data);
1730 1730
1731 // Read object back from the snapshot into a C structure. 1731 // Read object back from the snapshot into a C structure.
1732 ApiNativeScope scope; 1732 ApiNativeScope scope;
1733 ApiMessageReader api_reader(buffer, 1733 ApiMessageReader api_reader(buffer, writer.BytesWritten());
1734 writer.BytesWritten(),
1735 &zone_allocator);
1736 Dart_CObject* root = api_reader.ReadMessage(); 1734 Dart_CObject* root = api_reader.ReadMessage();
1737 EXPECT_EQ(Dart_CObject_kArray, root->type); 1735 EXPECT_EQ(Dart_CObject_kArray, root->type);
1738 EXPECT_EQ(kArrayLength, root->value.as_array.length); 1736 EXPECT_EQ(kArrayLength, root->value.as_array.length);
1739 for (int i = 0; i < kArrayLength; i++) { 1737 for (int i = 0; i < kArrayLength; i++) {
1740 Dart_CObject* element = root->value.as_array.values[i]; 1738 Dart_CObject* element = root->value.as_array.values[i];
1741 EXPECT_EQ(Dart_CObject_kInt32, element->type); 1739 EXPECT_EQ(Dart_CObject_kInt32, element->type);
1742 EXPECT_EQ(i + 1, element->value.as_int32); 1740 EXPECT_EQ(i + 1, element->value.as_int32);
1743 } 1741 }
1744 CheckEncodeDecodeMessage(root); 1742 CheckEncodeDecodeMessage(root);
1745 } 1743 }
(...skipping 13 matching lines...) Expand all
1759 MessageWriter writer(&buffer, &zone_allocator, false); 1757 MessageWriter writer(&buffer, &zone_allocator, false);
1760 writer.WriteMessage(obj); 1758 writer.WriteMessage(obj);
1761 *buffer_len = writer.BytesWritten(); 1759 *buffer_len = writer.BytesWritten();
1762 return buffer; 1760 return buffer;
1763 } 1761 }
1764 1762
1765 1763
1766 // Helper function to deserialize the result into a Dart_CObject structure. 1764 // Helper function to deserialize the result into a Dart_CObject structure.
1767 static Dart_CObject* GetDeserialized(uint8_t* buffer, intptr_t buffer_len) { 1765 static Dart_CObject* GetDeserialized(uint8_t* buffer, intptr_t buffer_len) {
1768 // Read object back from the snapshot into a C structure. 1766 // Read object back from the snapshot into a C structure.
1769 ApiMessageReader api_reader(buffer, buffer_len, &zone_allocator); 1767 ApiMessageReader api_reader(buffer, buffer_len);
1770 return api_reader.ReadMessage(); 1768 return api_reader.ReadMessage();
1771 } 1769 }
1772 1770
1773 1771
1774 static void CheckString(Dart_Handle dart_string, const char* expected) { 1772 static void CheckString(Dart_Handle dart_string, const char* expected) {
1775 StackZone zone(Thread::Current()); 1773 StackZone zone(Thread::Current());
1776 String& str = String::Handle(); 1774 String& str = String::Handle();
1777 str ^= Api::UnwrapHandle(dart_string); 1775 str ^= Api::UnwrapHandle(dart_string);
1778 uint8_t* buffer; 1776 uint8_t* buffer;
1779 MessageWriter writer(&buffer, &zone_allocator, false); 1777 MessageWriter writer(&buffer, &zone_allocator, false);
1780 writer.WriteMessage(str); 1778 writer.WriteMessage(str);
1781 intptr_t buffer_len = writer.BytesWritten(); 1779 intptr_t buffer_len = writer.BytesWritten();
1782 1780
1783 // Read object back from the snapshot into a C structure. 1781 // Read object back from the snapshot into a C structure.
1784 ApiNativeScope scope; 1782 ApiNativeScope scope;
1785 ApiMessageReader api_reader(buffer, buffer_len, &zone_allocator); 1783 ApiMessageReader api_reader(buffer, buffer_len);
1786 Dart_CObject* root = api_reader.ReadMessage(); 1784 Dart_CObject* root = api_reader.ReadMessage();
1787 EXPECT_NOTNULL(root); 1785 EXPECT_NOTNULL(root);
1788 EXPECT_EQ(Dart_CObject_kString, root->type); 1786 EXPECT_EQ(Dart_CObject_kString, root->type);
1789 EXPECT_STREQ(expected, root->value.as_string); 1787 EXPECT_STREQ(expected, root->value.as_string);
1790 CheckEncodeDecodeMessage(root); 1788 CheckEncodeDecodeMessage(root);
1791 } 1789 }
1792 1790
1793 1791
1794 static void CheckStringInvalid(Dart_Handle dart_string) { 1792 static void CheckStringInvalid(Dart_Handle dart_string) {
1795 StackZone zone(Thread::Current()); 1793 StackZone zone(Thread::Current());
1796 String& str = String::Handle(); 1794 String& str = String::Handle();
1797 str ^= Api::UnwrapHandle(dart_string); 1795 str ^= Api::UnwrapHandle(dart_string);
1798 uint8_t* buffer; 1796 uint8_t* buffer;
1799 MessageWriter writer(&buffer, &zone_allocator, false); 1797 MessageWriter writer(&buffer, &zone_allocator, false);
1800 writer.WriteMessage(str); 1798 writer.WriteMessage(str);
1801 intptr_t buffer_len = writer.BytesWritten(); 1799 intptr_t buffer_len = writer.BytesWritten();
1802 1800
1803 // Read object back from the snapshot into a C structure. 1801 // Read object back from the snapshot into a C structure.
1804 ApiNativeScope scope; 1802 ApiNativeScope scope;
1805 ApiMessageReader api_reader(buffer, buffer_len, &zone_allocator); 1803 ApiMessageReader api_reader(buffer, buffer_len);
1806 Dart_CObject* root = api_reader.ReadMessage(); 1804 Dart_CObject* root = api_reader.ReadMessage();
1807 EXPECT_NOTNULL(root); 1805 EXPECT_NOTNULL(root);
1808 EXPECT_EQ(Dart_CObject_kUnsupported, root->type); 1806 EXPECT_EQ(Dart_CObject_kUnsupported, root->type);
1809 } 1807 }
1810 1808
1811 1809
1812 UNIT_TEST_CASE(DartGeneratedMessages) { 1810 UNIT_TEST_CASE(DartGeneratedMessages) {
1813 static const char* kCustomIsolateScriptChars = 1811 static const char* kCustomIsolateScriptChars =
1814 "getSmi() {\n" 1812 "getSmi() {\n"
1815 " return 42;\n" 1813 " return 42;\n"
(...skipping 89 matching lines...) Expand 10 before | Expand all | Expand 10 after
1905 StackZone zone(Thread::Current()); 1903 StackZone zone(Thread::Current());
1906 Smi& smi = Smi::Handle(); 1904 Smi& smi = Smi::Handle();
1907 smi ^= Api::UnwrapHandle(smi_result); 1905 smi ^= Api::UnwrapHandle(smi_result);
1908 uint8_t* buffer; 1906 uint8_t* buffer;
1909 MessageWriter writer(&buffer, &zone_allocator, false); 1907 MessageWriter writer(&buffer, &zone_allocator, false);
1910 writer.WriteMessage(smi); 1908 writer.WriteMessage(smi);
1911 intptr_t buffer_len = writer.BytesWritten(); 1909 intptr_t buffer_len = writer.BytesWritten();
1912 1910
1913 // Read object back from the snapshot into a C structure. 1911 // Read object back from the snapshot into a C structure.
1914 ApiNativeScope scope; 1912 ApiNativeScope scope;
1915 ApiMessageReader api_reader(buffer, buffer_len, &zone_allocator); 1913 ApiMessageReader api_reader(buffer, buffer_len);
1916 Dart_CObject* root = api_reader.ReadMessage(); 1914 Dart_CObject* root = api_reader.ReadMessage();
1917 EXPECT_NOTNULL(root); 1915 EXPECT_NOTNULL(root);
1918 EXPECT_EQ(Dart_CObject_kInt32, root->type); 1916 EXPECT_EQ(Dart_CObject_kInt32, root->type);
1919 EXPECT_EQ(42, root->value.as_int32); 1917 EXPECT_EQ(42, root->value.as_int32);
1920 CheckEncodeDecodeMessage(root); 1918 CheckEncodeDecodeMessage(root);
1921 } 1919 }
1922 { 1920 {
1923 StackZone zone(Thread::Current()); 1921 StackZone zone(Thread::Current());
1924 Bigint& bigint = Bigint::Handle(); 1922 Bigint& bigint = Bigint::Handle();
1925 bigint ^= Api::UnwrapHandle(bigint_result); 1923 bigint ^= Api::UnwrapHandle(bigint_result);
1926 uint8_t* buffer; 1924 uint8_t* buffer;
1927 MessageWriter writer(&buffer, &zone_allocator, false); 1925 MessageWriter writer(&buffer, &zone_allocator, false);
1928 writer.WriteMessage(bigint); 1926 writer.WriteMessage(bigint);
1929 intptr_t buffer_len = writer.BytesWritten(); 1927 intptr_t buffer_len = writer.BytesWritten();
1930 1928
1931 // Read object back from the snapshot into a C structure. 1929 // Read object back from the snapshot into a C structure.
1932 ApiNativeScope scope; 1930 ApiNativeScope scope;
1933 ApiMessageReader api_reader(buffer, buffer_len, &zone_allocator); 1931 ApiMessageReader api_reader(buffer, buffer_len);
1934 Dart_CObject* root = api_reader.ReadMessage(); 1932 Dart_CObject* root = api_reader.ReadMessage();
1935 EXPECT_NOTNULL(root); 1933 EXPECT_NOTNULL(root);
1936 EXPECT_EQ(Dart_CObject_kBigint, root->type); 1934 EXPECT_EQ(Dart_CObject_kBigint, root->type);
1937 char* hex_value = TestCase::BigintToHexValue(root); 1935 char* hex_value = TestCase::BigintToHexValue(root);
1938 EXPECT_STREQ("-0x424242424242424242424242424242424242", hex_value); 1936 EXPECT_STREQ("-0x424242424242424242424242424242424242", hex_value);
1939 free(hex_value); 1937 free(hex_value);
1940 CheckEncodeDecodeMessage(root); 1938 CheckEncodeDecodeMessage(root);
1941 } 1939 }
1942 CheckString(ascii_string_result, "Hello, world!"); 1940 CheckString(ascii_string_result, "Hello, world!");
1943 CheckString(non_ascii_string_result, "Blåbærgrød"); 1941 CheckString(non_ascii_string_result, "Blåbærgrød");
(...skipping 1112 matching lines...) Expand 10 before | Expand all | Expand 10 after
3056 StackZone zone(Thread::Current()); 3054 StackZone zone(Thread::Current());
3057 uint8_t* buffer; 3055 uint8_t* buffer;
3058 MessageWriter writer(&buffer, &zone_allocator, true); 3056 MessageWriter writer(&buffer, &zone_allocator, true);
3059 writer.WriteInlinedObjectHeader(kOmittedObjectId); 3057 writer.WriteInlinedObjectHeader(kOmittedObjectId);
3060 // For performance, we'd like single-byte headers when ids are omitted. 3058 // For performance, we'd like single-byte headers when ids are omitted.
3061 // If this starts failing, consider renumbering the snapshot ids. 3059 // If this starts failing, consider renumbering the snapshot ids.
3062 EXPECT_EQ(1, writer.BytesWritten()); 3060 EXPECT_EQ(1, writer.BytesWritten());
3063 } 3061 }
3064 3062
3065 } // namespace dart 3063 } // namespace dart
OLDNEW
« no previous file with comments | « runtime/vm/native_message_handler.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698