| OLD | NEW |
| 1 // Copyright 2012 the V8 project authors. All rights reserved. | 1 // Copyright 2012 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 1601 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1612 // g should now have available an optimized function, unmarked by gc. The | 1612 // g should now have available an optimized function, unmarked by gc. The |
| 1613 // CompileLazy built-in will discover it and install it in the closure, and | 1613 // CompileLazy built-in will discover it and install it in the closure, and |
| 1614 // the incremental write barrier should be used. | 1614 // the incremental write barrier should be used. |
| 1615 CompileRun("g();"); | 1615 CompileRun("g();"); |
| 1616 CHECK(g_function->is_compiled()); | 1616 CHECK(g_function->is_compiled()); |
| 1617 } | 1617 } |
| 1618 | 1618 |
| 1619 TEST(CompilationCacheCachingBehavior) { | 1619 TEST(CompilationCacheCachingBehavior) { |
| 1620 // If we do not flush code, or have the compilation cache turned off, this | 1620 // If we do not flush code, or have the compilation cache turned off, this |
| 1621 // test is invalid. | 1621 // test is invalid. |
| 1622 i::FLAG_allow_natives_syntax = true; | |
| 1623 if (!FLAG_flush_code || !FLAG_compilation_cache) { | 1622 if (!FLAG_flush_code || !FLAG_compilation_cache) { |
| 1624 return; | 1623 return; |
| 1625 } | 1624 } |
| 1626 CcTest::InitializeVM(); | 1625 CcTest::InitializeVM(); |
| 1627 Isolate* isolate = CcTest::i_isolate(); | 1626 Isolate* isolate = CcTest::i_isolate(); |
| 1628 Factory* factory = isolate->factory(); | 1627 Factory* factory = isolate->factory(); |
| 1629 CompilationCache* compilation_cache = isolate->compilation_cache(); | 1628 CompilationCache* compilation_cache = isolate->compilation_cache(); |
| 1630 LanguageMode language_mode = construct_language_mode(FLAG_use_strict); | 1629 LanguageMode language_mode = construct_language_mode(FLAG_use_strict); |
| 1631 | 1630 |
| 1632 v8::HandleScope scope(CcTest::isolate()); | 1631 v8::HandleScope scope(CcTest::isolate()); |
| (...skipping 23 matching lines...) Expand all Loading... |
| 1656 // immediately.) | 1655 // immediately.) |
| 1657 if (!FLAG_optimize_for_size) { | 1656 if (!FLAG_optimize_for_size) { |
| 1658 CcTest::CollectAllGarbage(i::Heap::kFinalizeIncrementalMarkingMask); | 1657 CcTest::CollectAllGarbage(i::Heap::kFinalizeIncrementalMarkingMask); |
| 1659 info = compilation_cache->LookupScript(source, Handle<Object>(), 0, 0, | 1658 info = compilation_cache->LookupScript(source, Handle<Object>(), 0, 0, |
| 1660 v8::ScriptOriginOptions(true, false), | 1659 v8::ScriptOriginOptions(true, false), |
| 1661 native_context, language_mode); | 1660 native_context, language_mode); |
| 1662 CHECK(!info.is_null()); | 1661 CHECK(!info.is_null()); |
| 1663 } | 1662 } |
| 1664 | 1663 |
| 1665 // Progress code age until it's old and ready for GC. | 1664 // Progress code age until it's old and ready for GC. |
| 1666 while (!info.ToHandleChecked()->code()->IsOld()) { | 1665 const int kAgingThreshold = 6; |
| 1666 for (int i = 0; i < kAgingThreshold; i++) { |
| 1667 info.ToHandleChecked()->code()->MakeOlder(); | 1667 info.ToHandleChecked()->code()->MakeOlder(); |
| 1668 if (info.ToHandleChecked()->HasBytecodeArray()) { |
| 1669 info.ToHandleChecked()->bytecode_array()->MakeOlder(); |
| 1670 } |
| 1668 } | 1671 } |
| 1669 | 1672 |
| 1670 CcTest::CollectAllGarbage(i::Heap::kFinalizeIncrementalMarkingMask); | 1673 CcTest::CollectAllGarbage(i::Heap::kFinalizeIncrementalMarkingMask); |
| 1671 // Ensure code aging cleared the entry from the cache. | 1674 // Ensure code aging cleared the entry from the cache. |
| 1672 info = compilation_cache->LookupScript(source, Handle<Object>(), 0, 0, | 1675 info = compilation_cache->LookupScript(source, Handle<Object>(), 0, 0, |
| 1673 v8::ScriptOriginOptions(true, false), | 1676 v8::ScriptOriginOptions(true, false), |
| 1674 native_context, language_mode); | 1677 native_context, language_mode); |
| 1675 CHECK(info.is_null()); | 1678 CHECK(info.is_null()); |
| 1676 } | 1679 } |
| 1677 | 1680 |
| (...skipping 5366 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 7044 SlotSet::FREE_EMPTY_BUCKETS); | 7047 SlotSet::FREE_EMPTY_BUCKETS); |
| 7045 slots[chunk->area_end() - kPointerSize] = false; | 7048 slots[chunk->area_end() - kPointerSize] = false; |
| 7046 RememberedSet<OLD_TO_NEW>::Iterate(chunk, [&slots](Address addr) { | 7049 RememberedSet<OLD_TO_NEW>::Iterate(chunk, [&slots](Address addr) { |
| 7047 CHECK(slots[addr]); | 7050 CHECK(slots[addr]); |
| 7048 return KEEP_SLOT; | 7051 return KEEP_SLOT; |
| 7049 }); | 7052 }); |
| 7050 } | 7053 } |
| 7051 | 7054 |
| 7052 } // namespace internal | 7055 } // namespace internal |
| 7053 } // namespace v8 | 7056 } // namespace v8 |
| OLD | NEW |