| OLD | NEW |
| 1 // Copyright 2006-2008 the V8 project authors. All rights reserved. | 1 // Copyright 2006-2008 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 825 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 836 } | 836 } |
| 837 | 837 |
| 838 // True if we have reached the allocation limit in the old generation that | 838 // True if we have reached the allocation limit in the old generation that |
| 839 // should artificially cause a GC right now. | 839 // should artificially cause a GC right now. |
| 840 static bool OldGenerationAllocationLimitReached() { | 840 static bool OldGenerationAllocationLimitReached() { |
| 841 return (PromotedSpaceSize() + PromotedExternalMemorySize()) | 841 return (PromotedSpaceSize() + PromotedExternalMemorySize()) |
| 842 > old_gen_allocation_limit_; | 842 > old_gen_allocation_limit_; |
| 843 } | 843 } |
| 844 | 844 |
| 845 // Can be called when the embedding application is idle. | 845 // Can be called when the embedding application is idle. |
| 846 static bool IdleNotification() { | 846 static bool IdleNotification(); |
| 847 static const int kIdlesBeforeCollection = 7; | |
| 848 static int number_idle_notifications = 0; | |
| 849 static int last_gc_count = gc_count_; | |
| 850 | |
| 851 bool finished = false; | |
| 852 | |
| 853 if (last_gc_count == gc_count_) { | |
| 854 number_idle_notifications++; | |
| 855 } else { | |
| 856 number_idle_notifications = 0; | |
| 857 last_gc_count = gc_count_; | |
| 858 } | |
| 859 | |
| 860 if (number_idle_notifications >= kIdlesBeforeCollection) { | |
| 861 // The first time through we collect without forcing compaction. | |
| 862 // The second time through we force compaction and quit. | |
| 863 bool force_compaction = | |
| 864 number_idle_notifications > kIdlesBeforeCollection; | |
| 865 CollectAllGarbage(force_compaction); | |
| 866 last_gc_count = gc_count_; | |
| 867 if (force_compaction) { | |
| 868 number_idle_notifications = 0; | |
| 869 finished = true; | |
| 870 } | |
| 871 } | |
| 872 | |
| 873 // Uncommit unused memory in new space. | |
| 874 Heap::UncommitFromSpace(); | |
| 875 return finished; | |
| 876 } | |
| 877 | 847 |
| 878 // Declare all the root indices. | 848 // Declare all the root indices. |
| 879 enum RootListIndex { | 849 enum RootListIndex { |
| 880 #define ROOT_INDEX_DECLARATION(type, name, camel_name) k##camel_name##RootIndex, | 850 #define ROOT_INDEX_DECLARATION(type, name, camel_name) k##camel_name##RootIndex, |
| 881 STRONG_ROOT_LIST(ROOT_INDEX_DECLARATION) | 851 STRONG_ROOT_LIST(ROOT_INDEX_DECLARATION) |
| 882 #undef ROOT_INDEX_DECLARATION | 852 #undef ROOT_INDEX_DECLARATION |
| 883 | 853 |
| 884 // Utility type maps | 854 // Utility type maps |
| 885 #define DECLARE_STRUCT_MAP(NAME, Name, name) k##Name##MapRootIndex, | 855 #define DECLARE_STRUCT_MAP(NAME, Name, name) k##Name##MapRootIndex, |
| 886 STRUCT_LIST(DECLARE_STRUCT_MAP) | 856 STRUCT_LIST(DECLARE_STRUCT_MAP) |
| (...skipping 642 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1529 int marked_count_; | 1499 int marked_count_; |
| 1530 | 1500 |
| 1531 // The count from the end of the previous full GC. Will be zero if there | 1501 // The count from the end of the previous full GC. Will be zero if there |
| 1532 // was no previous full GC. | 1502 // was no previous full GC. |
| 1533 int previous_marked_count_; | 1503 int previous_marked_count_; |
| 1534 }; | 1504 }; |
| 1535 | 1505 |
| 1536 } } // namespace v8::internal | 1506 } } // namespace v8::internal |
| 1537 | 1507 |
| 1538 #endif // V8_HEAP_H_ | 1508 #endif // V8_HEAP_H_ |
| OLD | NEW |