| OLD | NEW |
| 1 // Copyright 2011 the V8 project authors. All rights reserved. | 1 // Copyright 2011 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 1759 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1770 HeapObjectCallback size_func) { | 1770 HeapObjectCallback size_func) { |
| 1771 SemiSpace::AssertValidRange(start, end); | 1771 SemiSpace::AssertValidRange(start, end); |
| 1772 current_ = start; | 1772 current_ = start; |
| 1773 limit_ = end; | 1773 limit_ = end; |
| 1774 size_func_ = size_func; | 1774 size_func_ = size_func; |
| 1775 } | 1775 } |
| 1776 | 1776 |
| 1777 | 1777 |
| 1778 #ifdef DEBUG | 1778 #ifdef DEBUG |
| 1779 // heap_histograms is shared, always clear it before using it. | 1779 // heap_histograms is shared, always clear it before using it. |
| 1780 static void ClearHistograms() { | 1780 static void ClearHistograms(Isolate* isolate) { |
| 1781 Isolate* isolate = Isolate::Current(); | |
| 1782 // We reset the name each time, though it hasn't changed. | 1781 // We reset the name each time, though it hasn't changed. |
| 1783 #define DEF_TYPE_NAME(name) isolate->heap_histograms()[name].set_name(#name); | 1782 #define DEF_TYPE_NAME(name) isolate->heap_histograms()[name].set_name(#name); |
| 1784 INSTANCE_TYPE_LIST(DEF_TYPE_NAME) | 1783 INSTANCE_TYPE_LIST(DEF_TYPE_NAME) |
| 1785 #undef DEF_TYPE_NAME | 1784 #undef DEF_TYPE_NAME |
| 1786 | 1785 |
| 1787 #define CLEAR_HISTOGRAM(name) isolate->heap_histograms()[name].clear(); | 1786 #define CLEAR_HISTOGRAM(name) isolate->heap_histograms()[name].clear(); |
| 1788 INSTANCE_TYPE_LIST(CLEAR_HISTOGRAM) | 1787 INSTANCE_TYPE_LIST(CLEAR_HISTOGRAM) |
| 1789 #undef CLEAR_HISTOGRAM | 1788 #undef CLEAR_HISTOGRAM |
| 1790 | 1789 |
| 1791 isolate->js_spill_information()->Clear(); | 1790 isolate->js_spill_information()->Clear(); |
| (...skipping 30 matching lines...) Expand all Loading... |
| 1822 | 1821 |
| 1823 if (FLAG_collect_heap_spill_statistics && obj->IsJSObject()) { | 1822 if (FLAG_collect_heap_spill_statistics && obj->IsJSObject()) { |
| 1824 JSObject::cast(obj)->IncrementSpillStatistics( | 1823 JSObject::cast(obj)->IncrementSpillStatistics( |
| 1825 isolate->js_spill_information()); | 1824 isolate->js_spill_information()); |
| 1826 } | 1825 } |
| 1827 | 1826 |
| 1828 return obj->Size(); | 1827 return obj->Size(); |
| 1829 } | 1828 } |
| 1830 | 1829 |
| 1831 | 1830 |
| 1832 static void ReportHistogram(bool print_spill) { | 1831 static void ReportHistogram(Isolate* isolate, bool print_spill) { |
| 1833 Isolate* isolate = Isolate::Current(); | |
| 1834 PrintF("\n Object Histogram:\n"); | 1832 PrintF("\n Object Histogram:\n"); |
| 1835 for (int i = 0; i <= LAST_TYPE; i++) { | 1833 for (int i = 0; i <= LAST_TYPE; i++) { |
| 1836 if (isolate->heap_histograms()[i].number() > 0) { | 1834 if (isolate->heap_histograms()[i].number() > 0) { |
| 1837 PrintF(" %-34s%10d (%10d bytes)\n", | 1835 PrintF(" %-34s%10d (%10d bytes)\n", |
| 1838 isolate->heap_histograms()[i].name(), | 1836 isolate->heap_histograms()[i].name(), |
| 1839 isolate->heap_histograms()[i].number(), | 1837 isolate->heap_histograms()[i].number(), |
| 1840 isolate->heap_histograms()[i].bytes()); | 1838 isolate->heap_histograms()[i].bytes()); |
| 1841 } | 1839 } |
| 1842 } | 1840 } |
| 1843 PrintF("\n"); | 1841 PrintF("\n"); |
| (...skipping 834 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2678 HeapObject* object = free_list_.Allocate(size_in_bytes); | 2676 HeapObject* object = free_list_.Allocate(size_in_bytes); |
| 2679 if (object != NULL) return object; | 2677 if (object != NULL) return object; |
| 2680 } | 2678 } |
| 2681 | 2679 |
| 2682 // Finally, fail. | 2680 // Finally, fail. |
| 2683 return NULL; | 2681 return NULL; |
| 2684 } | 2682 } |
| 2685 | 2683 |
| 2686 | 2684 |
| 2687 #ifdef DEBUG | 2685 #ifdef DEBUG |
| 2688 void PagedSpace::ReportCodeStatistics() { | 2686 void PagedSpace::ReportCodeStatistics(Isolate* isolate) { |
| 2689 Isolate* isolate = Isolate::Current(); | |
| 2690 CommentStatistic* comments_statistics = | 2687 CommentStatistic* comments_statistics = |
| 2691 isolate->paged_space_comments_statistics(); | 2688 isolate->paged_space_comments_statistics(); |
| 2692 ReportCodeKindStatistics(isolate->code_kind_statistics()); | 2689 ReportCodeKindStatistics(isolate->code_kind_statistics()); |
| 2693 PrintF("Code comment statistics (\" [ comment-txt : size/ " | 2690 PrintF("Code comment statistics (\" [ comment-txt : size/ " |
| 2694 "count (average)\"):\n"); | 2691 "count (average)\"):\n"); |
| 2695 for (int i = 0; i <= CommentStatistic::kMaxComments; i++) { | 2692 for (int i = 0; i <= CommentStatistic::kMaxComments; i++) { |
| 2696 const CommentStatistic& cs = comments_statistics[i]; | 2693 const CommentStatistic& cs = comments_statistics[i]; |
| 2697 if (cs.size > 0) { | 2694 if (cs.size > 0) { |
| 2698 PrintF(" %-30s: %10d/%6d (%d)\n", cs.comment, cs.size, cs.count, | 2695 PrintF(" %-30s: %10d/%6d (%d)\n", cs.comment, cs.size, cs.count, |
| 2699 cs.size/cs.count); | 2696 cs.size/cs.count); |
| 2700 } | 2697 } |
| 2701 } | 2698 } |
| 2702 PrintF("\n"); | 2699 PrintF("\n"); |
| 2703 } | 2700 } |
| 2704 | 2701 |
| 2705 | 2702 |
| 2706 void PagedSpace::ResetCodeStatistics() { | 2703 void PagedSpace::ResetCodeStatistics(Isolate* isolate) { |
| 2707 Isolate* isolate = Isolate::Current(); | |
| 2708 CommentStatistic* comments_statistics = | 2704 CommentStatistic* comments_statistics = |
| 2709 isolate->paged_space_comments_statistics(); | 2705 isolate->paged_space_comments_statistics(); |
| 2710 ClearCodeKindStatistics(isolate->code_kind_statistics()); | 2706 ClearCodeKindStatistics(isolate->code_kind_statistics()); |
| 2711 for (int i = 0; i < CommentStatistic::kMaxComments; i++) { | 2707 for (int i = 0; i < CommentStatistic::kMaxComments; i++) { |
| 2712 comments_statistics[i].Clear(); | 2708 comments_statistics[i].Clear(); |
| 2713 } | 2709 } |
| 2714 comments_statistics[CommentStatistic::kMaxComments].comment = "Unknown"; | 2710 comments_statistics[CommentStatistic::kMaxComments].comment = "Unknown"; |
| 2715 comments_statistics[CommentStatistic::kMaxComments].size = 0; | 2711 comments_statistics[CommentStatistic::kMaxComments].size = 0; |
| 2716 comments_statistics[CommentStatistic::kMaxComments].count = 0; | 2712 comments_statistics[CommentStatistic::kMaxComments].count = 0; |
| 2717 } | 2713 } |
| (...skipping 94 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2812 | 2808 |
| 2813 | 2809 |
| 2814 void PagedSpace::ReportStatistics() { | 2810 void PagedSpace::ReportStatistics() { |
| 2815 int pct = static_cast<int>(Available() * 100 / Capacity()); | 2811 int pct = static_cast<int>(Available() * 100 / Capacity()); |
| 2816 PrintF(" capacity: %" V8_PTR_PREFIX "d" | 2812 PrintF(" capacity: %" V8_PTR_PREFIX "d" |
| 2817 ", waste: %" V8_PTR_PREFIX "d" | 2813 ", waste: %" V8_PTR_PREFIX "d" |
| 2818 ", available: %" V8_PTR_PREFIX "d, %%%d\n", | 2814 ", available: %" V8_PTR_PREFIX "d, %%%d\n", |
| 2819 Capacity(), Waste(), Available(), pct); | 2815 Capacity(), Waste(), Available(), pct); |
| 2820 | 2816 |
| 2821 if (was_swept_conservatively_) return; | 2817 if (was_swept_conservatively_) return; |
| 2822 ClearHistograms(); | 2818 ClearHistograms(heap()->isolate()); |
| 2823 HeapObjectIterator obj_it(this); | 2819 HeapObjectIterator obj_it(this); |
| 2824 for (HeapObject* obj = obj_it.Next(); obj != NULL; obj = obj_it.Next()) | 2820 for (HeapObject* obj = obj_it.Next(); obj != NULL; obj = obj_it.Next()) |
| 2825 CollectHistogramInfo(obj); | 2821 CollectHistogramInfo(obj); |
| 2826 ReportHistogram(true); | 2822 ReportHistogram(heap()->isolate(), true); |
| 2827 } | 2823 } |
| 2828 #endif | 2824 #endif |
| 2829 | 2825 |
| 2830 // ----------------------------------------------------------------------------- | 2826 // ----------------------------------------------------------------------------- |
| 2831 // FixedSpace implementation | 2827 // FixedSpace implementation |
| 2832 | 2828 |
| 2833 void FixedSpace::PrepareForMarkCompact() { | 2829 void FixedSpace::PrepareForMarkCompact() { |
| 2834 // Call prepare of the super class. | 2830 // Call prepare of the super class. |
| 2835 PagedSpace::PrepareForMarkCompact(); | 2831 PagedSpace::PrepareForMarkCompact(); |
| 2836 | 2832 |
| (...skipping 316 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3153 LargeObjectIterator it(this); | 3149 LargeObjectIterator it(this); |
| 3154 for (HeapObject* obj = it.Next(); obj != NULL; obj = it.Next()) { | 3150 for (HeapObject* obj = it.Next(); obj != NULL; obj = it.Next()) { |
| 3155 obj->Print(); | 3151 obj->Print(); |
| 3156 } | 3152 } |
| 3157 } | 3153 } |
| 3158 | 3154 |
| 3159 | 3155 |
| 3160 void LargeObjectSpace::ReportStatistics() { | 3156 void LargeObjectSpace::ReportStatistics() { |
| 3161 PrintF(" size: %" V8_PTR_PREFIX "d\n", size_); | 3157 PrintF(" size: %" V8_PTR_PREFIX "d\n", size_); |
| 3162 int num_objects = 0; | 3158 int num_objects = 0; |
| 3163 ClearHistograms(); | 3159 ClearHistograms(heap()->isolate()); |
| 3164 LargeObjectIterator it(this); | 3160 LargeObjectIterator it(this); |
| 3165 for (HeapObject* obj = it.Next(); obj != NULL; obj = it.Next()) { | 3161 for (HeapObject* obj = it.Next(); obj != NULL; obj = it.Next()) { |
| 3166 num_objects++; | 3162 num_objects++; |
| 3167 CollectHistogramInfo(obj); | 3163 CollectHistogramInfo(obj); |
| 3168 } | 3164 } |
| 3169 | 3165 |
| 3170 PrintF(" number of objects %d, " | 3166 PrintF(" number of objects %d, " |
| 3171 "size of objects %" V8_PTR_PREFIX "d\n", num_objects, objects_size_); | 3167 "size of objects %" V8_PTR_PREFIX "d\n", num_objects, objects_size_); |
| 3172 if (num_objects > 0) ReportHistogram(false); | 3168 if (num_objects > 0) ReportHistogram(heap()->isolate(), false); |
| 3173 } | 3169 } |
| 3174 | 3170 |
| 3175 | 3171 |
| 3176 void LargeObjectSpace::CollectCodeStatistics() { | 3172 void LargeObjectSpace::CollectCodeStatistics() { |
| 3177 Isolate* isolate = heap()->isolate(); | 3173 Isolate* isolate = heap()->isolate(); |
| 3178 LargeObjectIterator obj_it(this); | 3174 LargeObjectIterator obj_it(this); |
| 3179 for (HeapObject* obj = obj_it.Next(); obj != NULL; obj = obj_it.Next()) { | 3175 for (HeapObject* obj = obj_it.Next(); obj != NULL; obj = obj_it.Next()) { |
| 3180 if (obj->IsCode()) { | 3176 if (obj->IsCode()) { |
| 3181 Code* code = Code::cast(obj); | 3177 Code* code = Code::cast(obj); |
| 3182 isolate->code_kind_statistics()[code->kind()] += code->Size(); | 3178 isolate->code_kind_statistics()[code->kind()] += code->Size(); |
| (...skipping 21 matching lines...) Expand all Loading... |
| 3204 object->ShortPrint(); | 3200 object->ShortPrint(); |
| 3205 PrintF("\n"); | 3201 PrintF("\n"); |
| 3206 } | 3202 } |
| 3207 printf(" --------------------------------------\n"); | 3203 printf(" --------------------------------------\n"); |
| 3208 printf(" Marked: %x, LiveCount: %x\n", mark_size, LiveBytes()); | 3204 printf(" Marked: %x, LiveCount: %x\n", mark_size, LiveBytes()); |
| 3209 } | 3205 } |
| 3210 | 3206 |
| 3211 #endif // DEBUG | 3207 #endif // DEBUG |
| 3212 | 3208 |
| 3213 } } // namespace v8::internal | 3209 } } // namespace v8::internal |
| OLD | NEW |