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

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

Issue 1399663002: 1. Do not mark an object by storing the object id used during serialization in the object header. (Closed) Base URL: git@github.com:dart-lang/sdk.git@master
Patch Set: code-review-comments Created 5 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
« 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_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 237 matching lines...) Expand 10 before | Expand all | Expand 10 after
248 // Read object back from the snapshot into a C structure. 248 // Read object back from the snapshot into a C structure.
249 ApiMessageReader api_reader(buffer, buffer_len); 249 ApiMessageReader api_reader(buffer, buffer_len);
250 Dart_CObject* root = api_reader.ReadMessage(); 250 Dart_CObject* root = api_reader.ReadMessage();
251 EXPECT_NOTNULL(root); 251 EXPECT_NOTNULL(root);
252 CheckEncodeDecodeMessage(root); 252 CheckEncodeDecodeMessage(root);
253 return root; 253 return root;
254 } 254 }
255 255
256 256
257 void CheckMint(int64_t value) { 257 void CheckMint(int64_t value) {
258 ApiNativeScope scope;
258 StackZone zone(Thread::Current()); 259 StackZone zone(Thread::Current());
259 260
260 Mint& mint = Mint::Handle(); 261 Mint& mint = Mint::Handle();
261 mint ^= Integer::New(value); 262 mint ^= Integer::New(value);
262 ApiNativeScope scope;
263 Dart_CObject* mint_cobject = SerializeAndDeserializeMint(mint); 263 Dart_CObject* mint_cobject = SerializeAndDeserializeMint(mint);
264 // On 64-bit platforms mints always require 64-bits as the smi range 264 // On 64-bit platforms mints always require 64-bits as the smi range
265 // here covers most of the 64-bit range. On 32-bit platforms the smi 265 // here covers most of the 64-bit range. On 32-bit platforms the smi
266 // range covers most of the 32-bit range and values outside that 266 // range covers most of the 32-bit range and values outside that
267 // range are also represented as mints. 267 // range are also represented as mints.
268 #if defined(ARCH_IS_64_BIT) 268 #if defined(ARCH_IS_64_BIT)
269 EXPECT_EQ(Dart_CObject_kInt64, mint_cobject->type); 269 EXPECT_EQ(Dart_CObject_kInt64, mint_cobject->type);
270 EXPECT_EQ(value, mint_cobject->value.as_int64); 270 EXPECT_EQ(value, mint_cobject->value.as_int64);
271 #else 271 #else
272 if (kMinInt32 < value && value < kMaxInt32) { 272 if (kMinInt32 < value && value < kMaxInt32) {
(...skipping 196 matching lines...) Expand 10 before | Expand all | Expand 10 after
469 ApiMessageReader api_reader(buffer, buffer_len); 469 ApiMessageReader api_reader(buffer, buffer_len);
470 Dart_CObject* root = api_reader.ReadMessage(); 470 Dart_CObject* root = api_reader.ReadMessage();
471 // Bigint not supported. 471 // Bigint not supported.
472 EXPECT_NOTNULL(root); 472 EXPECT_NOTNULL(root);
473 CheckEncodeDecodeMessage(root); 473 CheckEncodeDecodeMessage(root);
474 return root; 474 return root;
475 } 475 }
476 476
477 477
478 void CheckBigint(const char* bigint_value) { 478 void CheckBigint(const char* bigint_value) {
479 ApiNativeScope scope;
479 StackZone zone(Thread::Current()); 480 StackZone zone(Thread::Current());
480 Bigint& bigint = Bigint::Handle(); 481 Bigint& bigint = Bigint::Handle();
481 bigint ^= Bigint::NewFromCString(bigint_value); 482 bigint ^= Bigint::NewFromCString(bigint_value);
482 ApiNativeScope scope;
483 Dart_CObject* bigint_cobject = SerializeAndDeserializeBigint(bigint); 483 Dart_CObject* bigint_cobject = SerializeAndDeserializeBigint(bigint);
484 EXPECT_EQ(Dart_CObject_kBigint, bigint_cobject->type); 484 EXPECT_EQ(Dart_CObject_kBigint, bigint_cobject->type);
485 char* hex_value = TestCase::BigintToHexValue(bigint_cobject); 485 char* hex_value = TestCase::BigintToHexValue(bigint_cobject);
486 EXPECT_STREQ(bigint_value, hex_value); 486 EXPECT_STREQ(bigint_value, hex_value);
487 free(hex_value); 487 free(hex_value);
488 } 488 }
489 489
490 490
491 TEST_CASE(SerializeBigint2) { 491 TEST_CASE(SerializeBigint2) {
492 CheckBigint("0x0"); 492 CheckBigint("0x0");
(...skipping 331 matching lines...) Expand 10 before | Expand all | Expand 10 after
824 EXPECT(root->value.as_typed_data.values == NULL); 824 EXPECT(root->value.as_typed_data.values == NULL);
825 CheckEncodeDecodeMessage(root); 825 CheckEncodeDecodeMessage(root);
826 } 826 }
827 827
828 828
829 class TestSnapshotWriter : public SnapshotWriter { 829 class TestSnapshotWriter : public SnapshotWriter {
830 public: 830 public:
831 static const intptr_t kInitialSize = 64 * KB; 831 static const intptr_t kInitialSize = 64 * KB;
832 TestSnapshotWriter(uint8_t** buffer, ReAlloc alloc) 832 TestSnapshotWriter(uint8_t** buffer, ReAlloc alloc)
833 : SnapshotWriter(Snapshot::kScript, 833 : SnapshotWriter(Snapshot::kScript,
834 Thread::Current(),
834 buffer, 835 buffer,
835 alloc, 836 alloc,
836 kInitialSize, 837 kInitialSize,
837 &forward_list_, 838 &forward_list_,
838 NULL, /* test_writer */ 839 NULL, /* test_writer */
839 true, /* can_send_any_object */ 840 true, /* can_send_any_object */
840 false, /* snapshot_code */ 841 false, /* snapshot_code */
841 true /* vm_isolate_is_symbolic */), 842 true /* vm_isolate_is_symbolic */),
842 forward_list_(kMaxPredefinedObjectIds) { 843 forward_list_(thread(), kMaxPredefinedObjectIds) {
843 ASSERT(buffer != NULL); 844 ASSERT(buffer != NULL);
844 ASSERT(alloc != NULL); 845 ASSERT(alloc != NULL);
845 } 846 }
846 ~TestSnapshotWriter() { } 847 ~TestSnapshotWriter() { }
847 848
848 // Writes just a script object 849 // Writes just a script object
849 void WriteScript(const Script& script) { 850 void WriteScript(const Script& script) {
850 WriteObject(script.raw()); 851 WriteObject(script.raw());
851 UnmarkAll();
852 } 852 }
853 853
854 private: 854 private:
855 ForwardList forward_list_; 855 ForwardList forward_list_;
856 856
857 DISALLOW_COPY_AND_ASSIGN(TestSnapshotWriter); 857 DISALLOW_COPY_AND_ASSIGN(TestSnapshotWriter);
858 }; 858 };
859 859
860 860
861 static void GenerateSourceAndCheck(const Script& script) { 861 static void GenerateSourceAndCheck(const Script& script) {
(...skipping 2134 matching lines...) Expand 10 before | Expand all | Expand 10 after
2996 StackZone zone(Thread::Current()); 2996 StackZone zone(Thread::Current());
2997 uint8_t* buffer; 2997 uint8_t* buffer;
2998 MessageWriter writer(&buffer, &zone_allocator, true); 2998 MessageWriter writer(&buffer, &zone_allocator, true);
2999 writer.WriteInlinedObjectHeader(kOmittedObjectId); 2999 writer.WriteInlinedObjectHeader(kOmittedObjectId);
3000 // For performance, we'd like single-byte headers when ids are omitted. 3000 // For performance, we'd like single-byte headers when ids are omitted.
3001 // If this starts failing, consider renumbering the snapshot ids. 3001 // If this starts failing, consider renumbering the snapshot ids.
3002 EXPECT_EQ(1, writer.BytesWritten()); 3002 EXPECT_EQ(1, writer.BytesWritten());
3003 } 3003 }
3004 3004
3005 } // namespace dart 3005 } // 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