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

Side by Side Diff: test/cctest/test-serialize.cc

Issue 2310143002: [heap] Introduce enum of garbage collection reasons. (Closed)
Patch Set: rebase Created 4 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 | « test/cctest/test-mementos.cc ('k') | test/cctest/test-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 2007-2010 the V8 project authors. All rights reserved. 1 // Copyright 2007-2010 the V8 project authors. All rights reserved.
2 // Redistribution and use in source and binary forms, with or without 2 // Redistribution and use in source and binary forms, with or without
3 // modification, are permitted provided that the following conditions are 3 // modification, are permitted provided that the following conditions are
4 // met: 4 // met:
5 // 5 //
6 // * Redistributions of source code must retain the above copyright 6 // * Redistributions of source code must retain the above copyright
7 // notice, this list of conditions and the following disclaimer. 7 // notice, this list of conditions and the following disclaimer.
8 // * Redistributions in binary form must reproduce the above 8 // * Redistributions in binary form must reproduce the above
9 // copyright notice, this list of conditions and the following 9 // copyright notice, this list of conditions and the following
10 // disclaimer in the documentation and/or other materials provided 10 // disclaimer in the documentation and/or other materials provided
(...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after
83 // can be loaded from v8natives.js and their addresses can be processed. This 83 // can be loaded from v8natives.js and their addresses can be processed. This
84 // will clear the pending fixups array, which would otherwise contain GC roots 84 // will clear the pending fixups array, which would otherwise contain GC roots
85 // that would confuse the serialization/deserialization process. 85 // that would confuse the serialization/deserialization process.
86 v8::Isolate::Scope isolate_scope(isolate); 86 v8::Isolate::Scope isolate_scope(isolate);
87 { 87 {
88 v8::HandleScope scope(isolate); 88 v8::HandleScope scope(isolate);
89 v8::Context::New(isolate); 89 v8::Context::New(isolate);
90 } 90 }
91 91
92 Isolate* internal_isolate = reinterpret_cast<Isolate*>(isolate); 92 Isolate* internal_isolate = reinterpret_cast<Isolate*>(isolate);
93 internal_isolate->heap()->CollectAllAvailableGarbage("serialize"); 93 internal_isolate->heap()->CollectAllAvailableGarbage(
94 i::GarbageCollectionReason::kTesting);
94 StartupSerializer ser(internal_isolate, 95 StartupSerializer ser(internal_isolate,
95 v8::SnapshotCreator::FunctionCodeHandling::kClear); 96 v8::SnapshotCreator::FunctionCodeHandling::kClear);
96 ser.SerializeStrongReferences(); 97 ser.SerializeStrongReferences();
97 ser.SerializeWeakReferencesAndDeferred(); 98 ser.SerializeWeakReferencesAndDeferred();
98 SnapshotData snapshot_data(&ser); 99 SnapshotData snapshot_data(&ser);
99 return WritePayload(snapshot_data.RawData()); 100 return WritePayload(snapshot_data.RawData());
100 } 101 }
101 102
102 103
103 Vector<const uint8_t> ConstructSource(Vector<const uint8_t> head, 104 Vector<const uint8_t> ConstructSource(Vector<const uint8_t> head,
(...skipping 152 matching lines...) Expand 10 before | Expand all | Expand 10 after
256 v8::HandleScope handle_scope(v8_isolate); 257 v8::HandleScope handle_scope(v8_isolate);
257 v8::Local<v8::Context>::New(v8_isolate, env)->Enter(); 258 v8::Local<v8::Context>::New(v8_isolate, env)->Enter();
258 } 259 }
259 // Make sure all builtin scripts are cached. 260 // Make sure all builtin scripts are cached.
260 { 261 {
261 HandleScope scope(isolate); 262 HandleScope scope(isolate);
262 for (int i = 0; i < Natives::GetBuiltinsCount(); i++) { 263 for (int i = 0; i < Natives::GetBuiltinsCount(); i++) {
263 isolate->bootstrapper()->SourceLookup<Natives>(i); 264 isolate->bootstrapper()->SourceLookup<Natives>(i);
264 } 265 }
265 } 266 }
266 heap->CollectAllGarbage(); 267 heap->CollectAllGarbage(i::Heap::kFinalizeIncrementalMarkingMask,
267 heap->CollectAllGarbage(); 268 i::GarbageCollectionReason::kTesting);
269 heap->CollectAllGarbage(i::Heap::kFinalizeIncrementalMarkingMask,
270 i::GarbageCollectionReason::kTesting);
268 271
269 Object* raw_foo; 272 Object* raw_foo;
270 { 273 {
271 v8::HandleScope handle_scope(v8_isolate); 274 v8::HandleScope handle_scope(v8_isolate);
272 v8::Local<v8::String> foo = v8_str("foo"); 275 v8::Local<v8::String> foo = v8_str("foo");
273 CHECK(!foo.IsEmpty()); 276 CHECK(!foo.IsEmpty());
274 raw_foo = *(v8::Utils::OpenHandle(*foo)); 277 raw_foo = *(v8::Utils::OpenHandle(*foo));
275 } 278 }
276 279
277 { 280 {
(...skipping 81 matching lines...) Expand 10 before | Expand all | Expand 10 after
359 } 362 }
360 // Make sure all builtin scripts are cached. 363 // Make sure all builtin scripts are cached.
361 { 364 {
362 HandleScope scope(isolate); 365 HandleScope scope(isolate);
363 for (int i = 0; i < Natives::GetBuiltinsCount(); i++) { 366 for (int i = 0; i < Natives::GetBuiltinsCount(); i++) {
364 isolate->bootstrapper()->SourceLookup<Natives>(i); 367 isolate->bootstrapper()->SourceLookup<Natives>(i);
365 } 368 }
366 } 369 }
367 // If we don't do this then we end up with a stray root pointing at the 370 // If we don't do this then we end up with a stray root pointing at the
368 // context even after we have disposed of env. 371 // context even after we have disposed of env.
369 heap->CollectAllGarbage(); 372 heap->CollectAllGarbage(i::Heap::kFinalizeIncrementalMarkingMask,
373 i::GarbageCollectionReason::kTesting);
370 374
371 { 375 {
372 v8::HandleScope handle_scope(v8_isolate); 376 v8::HandleScope handle_scope(v8_isolate);
373 v8::Local<v8::Context>::New(v8_isolate, env)->Exit(); 377 v8::Local<v8::Context>::New(v8_isolate, env)->Exit();
374 } 378 }
375 379
376 i::Object* raw_context = *v8::Utils::OpenPersistent(env); 380 i::Object* raw_context = *v8::Utils::OpenPersistent(env);
377 381
378 env.Reset(); 382 env.Reset();
379 383
(...skipping 97 matching lines...) Expand 10 before | Expand all | Expand 10 after
477 } 481 }
478 // Make sure all builtin scripts are cached. 482 // Make sure all builtin scripts are cached.
479 { 483 {
480 HandleScope scope(isolate); 484 HandleScope scope(isolate);
481 for (int i = 0; i < Natives::GetBuiltinsCount(); i++) { 485 for (int i = 0; i < Natives::GetBuiltinsCount(); i++) {
482 isolate->bootstrapper()->SourceLookup<Natives>(i); 486 isolate->bootstrapper()->SourceLookup<Natives>(i);
483 } 487 }
484 } 488 }
485 // If we don't do this then we end up with a stray root pointing at the 489 // If we don't do this then we end up with a stray root pointing at the
486 // context even after we have disposed of env. 490 // context even after we have disposed of env.
487 isolate->heap()->CollectAllAvailableGarbage("snapshotting"); 491 isolate->heap()->CollectAllAvailableGarbage(
492 i::GarbageCollectionReason::kTesting);
488 493
489 { 494 {
490 v8::HandleScope handle_scope(v8_isolate); 495 v8::HandleScope handle_scope(v8_isolate);
491 v8::Local<v8::Context>::New(v8_isolate, env)->Exit(); 496 v8::Local<v8::Context>::New(v8_isolate, env)->Exit();
492 } 497 }
493 498
494 i::Object* raw_context = *v8::Utils::OpenPersistent(env); 499 i::Object* raw_context = *v8::Utils::OpenPersistent(env);
495 500
496 env.Reset(); 501 env.Reset();
497 502
(...skipping 1389 matching lines...) Expand 10 before | Expand all | Expand 10 after
1887 1892
1888 delete script_data; 1893 delete script_data;
1889 } 1894 }
1890 #endif // V8_TARGET_ARCH_X64 1895 #endif // V8_TARGET_ARCH_X64
1891 1896
1892 TEST(CodeSerializerEmbeddedObject) { 1897 TEST(CodeSerializerEmbeddedObject) {
1893 FLAG_serialize_toplevel = true; 1898 FLAG_serialize_toplevel = true;
1894 LocalContext context; 1899 LocalContext context;
1895 Isolate* isolate = CcTest::i_isolate(); 1900 Isolate* isolate = CcTest::i_isolate();
1896 isolate->compilation_cache()->Disable(); // Disable same-isolate code cache. 1901 isolate->compilation_cache()->Disable(); // Disable same-isolate code cache.
1897 Heap* heap = isolate->heap();
1898 v8::HandleScope scope(CcTest::isolate()); 1902 v8::HandleScope scope(CcTest::isolate());
1899 1903
1900 size_t actual_size; 1904 size_t actual_size;
1901 byte* buffer = static_cast<byte*>(v8::base::OS::Allocate( 1905 byte* buffer = static_cast<byte*>(v8::base::OS::Allocate(
1902 Assembler::kMinimalBufferSize, &actual_size, true)); 1906 Assembler::kMinimalBufferSize, &actual_size, true));
1903 CHECK(buffer); 1907 CHECK(buffer);
1904 HandleScope handles(isolate); 1908 HandleScope handles(isolate);
1905 1909
1906 MacroAssembler assembler(isolate, buffer, static_cast<int>(actual_size), 1910 MacroAssembler assembler(isolate, buffer, static_cast<int>(actual_size),
1907 v8::internal::CodeObjectRequired::kYes); 1911 v8::internal::CodeObjectRequired::kYes);
(...skipping 19 matching lines...) Expand all
1927 ScriptData* script_data = CodeSerializer::Serialize(isolate, sfi, source); 1931 ScriptData* script_data = CodeSerializer::Serialize(isolate, sfi, source);
1928 1932
1929 Handle<SharedFunctionInfo> copy = 1933 Handle<SharedFunctionInfo> copy =
1930 CodeSerializer::Deserialize(isolate, script_data, source) 1934 CodeSerializer::Deserialize(isolate, script_data, source)
1931 .ToHandleChecked(); 1935 .ToHandleChecked();
1932 RelocIterator rit2(copy->code(), 1936 RelocIterator rit2(copy->code(),
1933 RelocInfo::ModeMask(RelocInfo::EMBEDDED_OBJECT)); 1937 RelocInfo::ModeMask(RelocInfo::EMBEDDED_OBJECT));
1934 CHECK(rit2.rinfo()->target_object()->IsHeapNumber()); 1938 CHECK(rit2.rinfo()->target_object()->IsHeapNumber());
1935 CHECK_EQ(0.3, HeapNumber::cast(rit2.rinfo()->target_object())->value()); 1939 CHECK_EQ(0.3, HeapNumber::cast(rit2.rinfo()->target_object())->value());
1936 1940
1937 heap->CollectAllAvailableGarbage(); 1941 CcTest::CollectAllAvailableGarbage();
1938 1942
1939 RelocIterator rit3(copy->code(), 1943 RelocIterator rit3(copy->code(),
1940 RelocInfo::ModeMask(RelocInfo::EMBEDDED_OBJECT)); 1944 RelocInfo::ModeMask(RelocInfo::EMBEDDED_OBJECT));
1941 CHECK(rit3.rinfo()->target_object()->IsHeapNumber()); 1945 CHECK(rit3.rinfo()->target_object()->IsHeapNumber());
1942 CHECK_EQ(0.3, HeapNumber::cast(rit3.rinfo()->target_object())->value()); 1946 CHECK_EQ(0.3, HeapNumber::cast(rit3.rinfo()->target_object())->value());
1943 1947
1944 delete script_data; 1948 delete script_data;
1945 } 1949 }
1946 1950
1947 TEST(SnapshotCreatorMultipleContexts) { 1951 TEST(SnapshotCreatorMultipleContexts) {
(...skipping 226 matching lines...) Expand 10 before | Expand all | Expand 10 after
2174 } 2178 }
2175 delete[] blob.data; 2179 delete[] blob.data;
2176 } 2180 }
2177 2181
2178 TEST(SerializationMemoryStats) { 2182 TEST(SerializationMemoryStats) {
2179 FLAG_profile_deserialization = true; 2183 FLAG_profile_deserialization = true;
2180 FLAG_always_opt = false; 2184 FLAG_always_opt = false;
2181 v8::StartupData blob = v8::V8::CreateSnapshotDataBlob(); 2185 v8::StartupData blob = v8::V8::CreateSnapshotDataBlob();
2182 delete[] blob.data; 2186 delete[] blob.data;
2183 } 2187 }
OLDNEW
« no previous file with comments | « test/cctest/test-mementos.cc ('k') | test/cctest/test-symbols.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698