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

Side by Side Diff: src/spaces.cc

Issue 149324: * Move almost all roots into an array ready for use by a constant-pool... (Closed) Base URL: http://v8.googlecode.com/svn/branches/bleeding_edge/
Patch Set: Created 11 years, 5 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 | Annotate | Revision Log
OLDNEW
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 1123 matching lines...) Expand 10 before | Expand all | Expand 10 after
1134 heap_histograms[i].name(), 1134 heap_histograms[i].name(),
1135 heap_histograms[i].number(), 1135 heap_histograms[i].number(),
1136 heap_histograms[i].bytes()); 1136 heap_histograms[i].bytes());
1137 } 1137 }
1138 } 1138 }
1139 PrintF("\n"); 1139 PrintF("\n");
1140 1140
1141 // Summarize string types. 1141 // Summarize string types.
1142 int string_number = 0; 1142 int string_number = 0;
1143 int string_bytes = 0; 1143 int string_bytes = 0;
1144 #define INCREMENT(type, size, name) \ 1144 #define INCREMENT(type, size, name, camel_name) \
1145 string_number += heap_histograms[type].number(); \ 1145 string_number += heap_histograms[type].number(); \
1146 string_bytes += heap_histograms[type].bytes(); 1146 string_bytes += heap_histograms[type].bytes();
1147 STRING_TYPE_LIST(INCREMENT) 1147 STRING_TYPE_LIST(INCREMENT)
1148 #undef INCREMENT 1148 #undef INCREMENT
1149 if (string_number > 0) { 1149 if (string_number > 0) {
1150 PrintF(" %-33s%10d (%10d bytes)\n\n", "STRING_TYPE", string_number, 1150 PrintF(" %-33s%10d (%10d bytes)\n\n", "STRING_TYPE", string_number,
1151 string_bytes); 1151 string_bytes);
1152 } 1152 }
1153 1153
1154 if (FLAG_collect_heap_spill_statistics && print_spill) { 1154 if (FLAG_collect_heap_spill_statistics && print_spill) {
(...skipping 23 matching lines...) Expand all
1178 while (it.has_next()) RecordAllocation(it.next()); 1178 while (it.has_next()) RecordAllocation(it.next());
1179 } 1179 }
1180 1180
1181 1181
1182 #ifdef ENABLE_LOGGING_AND_PROFILING 1182 #ifdef ENABLE_LOGGING_AND_PROFILING
1183 static void DoReportStatistics(HistogramInfo* info, const char* description) { 1183 static void DoReportStatistics(HistogramInfo* info, const char* description) {
1184 LOG(HeapSampleBeginEvent("NewSpace", description)); 1184 LOG(HeapSampleBeginEvent("NewSpace", description));
1185 // Lump all the string types together. 1185 // Lump all the string types together.
1186 int string_number = 0; 1186 int string_number = 0;
1187 int string_bytes = 0; 1187 int string_bytes = 0;
1188 #define INCREMENT(type, size, name) \ 1188 #define INCREMENT(type, size, name, camel_name) \
1189 string_number += info[type].number(); \ 1189 string_number += info[type].number(); \
1190 string_bytes += info[type].bytes(); 1190 string_bytes += info[type].bytes();
1191 STRING_TYPE_LIST(INCREMENT) 1191 STRING_TYPE_LIST(INCREMENT)
1192 #undef INCREMENT 1192 #undef INCREMENT
1193 if (string_number > 0) { 1193 if (string_number > 0) {
1194 LOG(HeapSampleItemEvent("STRING_TYPE", string_number, string_bytes)); 1194 LOG(HeapSampleItemEvent("STRING_TYPE", string_number, string_bytes));
1195 } 1195 }
1196 1196
1197 // Then do the other types. 1197 // Then do the other types.
1198 for (int i = FIRST_NONSTRING_TYPE; i <= LAST_TYPE; ++i) { 1198 for (int i = FIRST_NONSTRING_TYPE; i <= LAST_TYPE; ++i) {
1199 if (info[i].number() > 0) { 1199 if (info[i].number() > 0) {
(...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after
1259 ASSERT(IsAligned(size_in_bytes, kPointerSize)); 1259 ASSERT(IsAligned(size_in_bytes, kPointerSize));
1260 1260
1261 // We write a map and possibly size information to the block. If the block 1261 // We write a map and possibly size information to the block. If the block
1262 // is big enough to be a ByteArray with at least one extra word (the next 1262 // is big enough to be a ByteArray with at least one extra word (the next
1263 // pointer), we set its map to be the byte array map and its size to an 1263 // pointer), we set its map to be the byte array map and its size to an
1264 // appropriate array length for the desired size from HeapObject::Size(). 1264 // appropriate array length for the desired size from HeapObject::Size().
1265 // If the block is too small (eg, one or two words), to hold both a size 1265 // If the block is too small (eg, one or two words), to hold both a size
1266 // field and a next pointer, we give it a filler map that gives it the 1266 // field and a next pointer, we give it a filler map that gives it the
1267 // correct size. 1267 // correct size.
1268 if (size_in_bytes > ByteArray::kHeaderSize) { 1268 if (size_in_bytes > ByteArray::kHeaderSize) {
1269 set_map(Heap::byte_array_map()); 1269 set_map(Heap::raw_unchecked_byte_array_map());
1270 ByteArray::cast(this)->set_length(ByteArray::LengthFor(size_in_bytes)); 1270 ByteArray::cast(this)->set_length(ByteArray::LengthFor(size_in_bytes));
1271 } else if (size_in_bytes == kPointerSize) { 1271 } else if (size_in_bytes == kPointerSize) {
1272 set_map(Heap::one_word_filler_map()); 1272 set_map(Heap::raw_unchecked_one_word_filler_map());
1273 } else if (size_in_bytes == 2 * kPointerSize) { 1273 } else if (size_in_bytes == 2 * kPointerSize) {
1274 set_map(Heap::two_word_filler_map()); 1274 set_map(Heap::raw_unchecked_two_word_filler_map());
1275 } else { 1275 } else {
1276 UNREACHABLE(); 1276 UNREACHABLE();
1277 } 1277 }
1278 ASSERT(Size() == size_in_bytes); 1278 ASSERT(Size() == size_in_bytes);
1279 } 1279 }
1280 1280
1281 1281
1282 Address FreeListNode::next() { 1282 Address FreeListNode::next() {
1283 ASSERT(map() == Heap::byte_array_map()); 1283 ASSERT(map() == Heap::raw_unchecked_byte_array_map());
1284 ASSERT(Size() >= kNextOffset + kPointerSize); 1284 ASSERT(Size() >= kNextOffset + kPointerSize);
1285 return Memory::Address_at(address() + kNextOffset); 1285 return Memory::Address_at(address() + kNextOffset);
1286 } 1286 }
1287 1287
1288 1288
1289 void FreeListNode::set_next(Address next) { 1289 void FreeListNode::set_next(Address next) {
1290 ASSERT(map() == Heap::byte_array_map()); 1290 ASSERT(map() == Heap::raw_unchecked_byte_array_map());
1291 ASSERT(Size() >= kNextOffset + kPointerSize); 1291 ASSERT(Size() >= kNextOffset + kPointerSize);
1292 Memory::Address_at(address() + kNextOffset) = next; 1292 Memory::Address_at(address() + kNextOffset) = next;
1293 } 1293 }
1294 1294
1295 1295
1296 OldSpaceFreeList::OldSpaceFreeList(AllocationSpace owner) : owner_(owner) { 1296 OldSpaceFreeList::OldSpaceFreeList(AllocationSpace owner) : owner_(owner) {
1297 Reset(); 1297 Reset();
1298 } 1298 }
1299 1299
1300 1300
(...skipping 548 matching lines...) Expand 10 before | Expand all | Expand 10 after
1849 int rset = Memory::int_at(rset_addr); 1849 int rset = Memory::int_at(rset_addr);
1850 if (rset != 0) { 1850 if (rset != 0) {
1851 // Bits were set 1851 // Bits were set
1852 int intoff = rset_addr - p->address(); 1852 int intoff = rset_addr - p->address();
1853 int bitoff = 0; 1853 int bitoff = 0;
1854 for (; bitoff < kBitsPerInt; ++bitoff) { 1854 for (; bitoff < kBitsPerInt; ++bitoff) {
1855 if ((rset & (1 << bitoff)) != 0) { 1855 if ((rset & (1 << bitoff)) != 0) {
1856 int bitpos = intoff*kBitsPerByte + bitoff; 1856 int bitpos = intoff*kBitsPerByte + bitoff;
1857 Address slot = p->OffsetToAddress(bitpos << kObjectAlignmentBits); 1857 Address slot = p->OffsetToAddress(bitpos << kObjectAlignmentBits);
1858 Object** obj = reinterpret_cast<Object**>(slot); 1858 Object** obj = reinterpret_cast<Object**>(slot);
1859 if (*obj == Heap::fixed_array_map()) { 1859 if (*obj == Heap::raw_unchecked_fixed_array_map()) {
1860 rset_marked_arrays++; 1860 rset_marked_arrays++;
1861 FixedArray* fa = FixedArray::cast(HeapObject::FromAddress(slot)); 1861 FixedArray* fa = FixedArray::cast(HeapObject::FromAddress(slot));
1862 1862
1863 rset_marked_array_elements += fa->length(); 1863 rset_marked_array_elements += fa->length();
1864 // Manually inline FixedArray::IterateBody 1864 // Manually inline FixedArray::IterateBody
1865 Address elm_start = slot + FixedArray::kHeaderSize; 1865 Address elm_start = slot + FixedArray::kHeaderSize;
1866 Address elm_stop = elm_start + fa->length() * kPointerSize; 1866 Address elm_stop = elm_start + fa->length() * kPointerSize;
1867 for (Address elm_addr = elm_start; 1867 for (Address elm_addr = elm_start;
1868 elm_addr < elm_stop; elm_addr += kPointerSize) { 1868 elm_addr < elm_stop; elm_addr += kPointerSize) {
1869 // Filter non-heap-object pointers 1869 // Filter non-heap-object pointers
(...skipping 759 matching lines...) Expand 10 before | Expand all | Expand 10 after
2629 reinterpret_cast<Object**>(object->address() 2629 reinterpret_cast<Object**>(object->address()
2630 + Page::kObjectAreaSize), 2630 + Page::kObjectAreaSize),
2631 allocation_top); 2631 allocation_top);
2632 PrintF("\n"); 2632 PrintF("\n");
2633 } 2633 }
2634 } 2634 }
2635 } 2635 }
2636 #endif // DEBUG 2636 #endif // DEBUG
2637 2637
2638 } } // namespace v8::internal 2638 } } // namespace v8::internal
OLDNEW
« src/mark-compact.cc ('K') | « src/objects-inl.h ('k') | src/stub-cache.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698