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

Side by Side Diff: Source/platform/heap/Heap.h

Issue 1211243006: Oilpan: Replace checkHeader() with ASSERT(checkHeader()) (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Created 5 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
« no previous file with comments | « Source/platform/heap/Handle.h ('k') | Source/platform/heap/Heap.cpp » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* 1 /*
2 * Copyright (C) 2013 Google Inc. All rights reserved. 2 * Copyright (C) 2013 Google Inc. All rights reserved.
3 * 3 *
4 * Redistribution and use in source and binary forms, with or without 4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions are 5 * modification, are permitted provided that the following conditions are
6 * met: 6 * met:
7 * 7 *
8 * * Redistributions of source code must retain the above copyright 8 * * Redistributions of source code must retain the above copyright
9 * notice, this list of conditions and the following disclaimer. 9 * notice, this list of conditions and the following disclaimer.
10 * * Redistributions in binary form must reproduce the above 10 * * Redistributions in binary form must reproduce the above
(...skipping 166 matching lines...) Expand 10 before | Expand all | Expand 10 after
177 bool isMarked() const; 177 bool isMarked() const;
178 void mark(); 178 void mark();
179 void unmark(); 179 void unmark();
180 void markDead(); 180 void markDead();
181 bool isDead() const; 181 bool isDead() const;
182 182
183 Address payload(); 183 Address payload();
184 size_t payloadSize(); 184 size_t payloadSize();
185 Address payloadEnd(); 185 Address payloadEnd();
186 186
187 void checkHeader() const;
188 #if ENABLE(ASSERT) 187 #if ENABLE(ASSERT)
188 bool checkHeader() const;
189 // Zap magic number with a new magic number that means there was once an 189 // Zap magic number with a new magic number that means there was once an
190 // object allocated here, but it was freed because nobody marked it during 190 // object allocated here, but it was freed because nobody marked it during
191 // GC. 191 // GC.
192 void zapMagic(); 192 void zapMagic();
193 #endif 193 #endif
194 194
195 void finalize(Address, size_t); 195 void finalize(Address, size_t);
196 static HeapObjectHeader* fromPayload(const void*); 196 static HeapObjectHeader* fromPayload(const void*);
197 197
198 static const uint16_t magic = 0xfff1; 198 static const uint16_t magic = 0xfff1;
(...skipping 1038 matching lines...) Expand 10 before | Expand all | Expand 10 after
1237 { 1237 {
1238 size_t result = m_encoded & headerSizeMask; 1238 size_t result = m_encoded & headerSizeMask;
1239 // Large objects should not refer to header->size(). 1239 // Large objects should not refer to header->size().
1240 // The actual size of a large object is stored in 1240 // The actual size of a large object is stored in
1241 // LargeObjectPage::m_payloadSize. 1241 // LargeObjectPage::m_payloadSize.
1242 ASSERT(result != largeObjectSizeInHeader); 1242 ASSERT(result != largeObjectSizeInHeader);
1243 ASSERT(!pageFromObject(this)->isLargeObjectPage()); 1243 ASSERT(!pageFromObject(this)->isLargeObjectPage());
1244 return result; 1244 return result;
1245 } 1245 }
1246 1246
1247 #if ENABLE(ASSERT)
1247 NO_SANITIZE_ADDRESS inline 1248 NO_SANITIZE_ADDRESS inline
1248 void HeapObjectHeader::checkHeader() const 1249 bool HeapObjectHeader::checkHeader() const
1249 { 1250 {
1250 ASSERT(!pageFromObject(this)->orphaned()); 1251 return !pageFromObject(this)->orphaned() && m_magic == magic;
1251 ASSERT(m_magic == magic);
1252 } 1252 }
1253 #endif
1253 1254
1254 inline Address HeapObjectHeader::payload() 1255 inline Address HeapObjectHeader::payload()
1255 { 1256 {
1256 return reinterpret_cast<Address>(this) + sizeof(HeapObjectHeader); 1257 return reinterpret_cast<Address>(this) + sizeof(HeapObjectHeader);
1257 } 1258 }
1258 1259
1259 inline Address HeapObjectHeader::payloadEnd() 1260 inline Address HeapObjectHeader::payloadEnd()
1260 { 1261 {
1261 return reinterpret_cast<Address>(this) + size(); 1262 return reinterpret_cast<Address>(this) + size();
1262 } 1263 }
1263 1264
1264 NO_SANITIZE_ADDRESS inline 1265 NO_SANITIZE_ADDRESS inline
1265 size_t HeapObjectHeader::payloadSize() 1266 size_t HeapObjectHeader::payloadSize()
1266 { 1267 {
1267 size_t size = m_encoded & headerSizeMask; 1268 size_t size = m_encoded & headerSizeMask;
1268 if (UNLIKELY(size == largeObjectSizeInHeader)) { 1269 if (UNLIKELY(size == largeObjectSizeInHeader)) {
1269 ASSERT(pageFromObject(this)->isLargeObjectPage()); 1270 ASSERT(pageFromObject(this)->isLargeObjectPage());
1270 return static_cast<LargeObjectPage*>(pageFromObject(this))->payloadSize( ); 1271 return static_cast<LargeObjectPage*>(pageFromObject(this))->payloadSize( );
1271 } 1272 }
1272 ASSERT(!pageFromObject(this)->isLargeObjectPage()); 1273 ASSERT(!pageFromObject(this)->isLargeObjectPage());
1273 return size - sizeof(HeapObjectHeader); 1274 return size - sizeof(HeapObjectHeader);
1274 } 1275 }
1275 1276
1276 inline HeapObjectHeader* HeapObjectHeader::fromPayload(const void* payload) 1277 inline HeapObjectHeader* HeapObjectHeader::fromPayload(const void* payload)
1277 { 1278 {
1278 Address addr = reinterpret_cast<Address>(const_cast<void*>(payload)); 1279 Address addr = reinterpret_cast<Address>(const_cast<void*>(payload));
1279 HeapObjectHeader* header = reinterpret_cast<HeapObjectHeader*>(addr - sizeof (HeapObjectHeader)); 1280 HeapObjectHeader* header = reinterpret_cast<HeapObjectHeader*>(addr - sizeof (HeapObjectHeader));
1280 header->checkHeader(); 1281 ASSERT(header->checkHeader());
1281 return header; 1282 return header;
1282 } 1283 }
1283 1284
1284 NO_SANITIZE_ADDRESS inline 1285 NO_SANITIZE_ADDRESS inline
1285 bool HeapObjectHeader::isMarked() const 1286 bool HeapObjectHeader::isMarked() const
1286 { 1287 {
1287 checkHeader(); 1288 ASSERT(checkHeader());
1288 return m_encoded & headerMarkBitMask; 1289 return m_encoded & headerMarkBitMask;
1289 } 1290 }
1290 1291
1291 NO_SANITIZE_ADDRESS inline 1292 NO_SANITIZE_ADDRESS inline
1292 void HeapObjectHeader::mark() 1293 void HeapObjectHeader::mark()
1293 { 1294 {
1294 checkHeader(); 1295 ASSERT(checkHeader());
1295 ASSERT(!isMarked()); 1296 ASSERT(!isMarked());
1296 m_encoded = m_encoded | headerMarkBitMask; 1297 m_encoded = m_encoded | headerMarkBitMask;
1297 } 1298 }
1298 1299
1299 NO_SANITIZE_ADDRESS inline 1300 NO_SANITIZE_ADDRESS inline
1300 void HeapObjectHeader::unmark() 1301 void HeapObjectHeader::unmark()
1301 { 1302 {
1302 checkHeader(); 1303 ASSERT(checkHeader());
1303 ASSERT(isMarked()); 1304 ASSERT(isMarked());
1304 m_encoded &= ~headerMarkBitMask; 1305 m_encoded &= ~headerMarkBitMask;
1305 } 1306 }
1306 1307
1307 NO_SANITIZE_ADDRESS inline 1308 NO_SANITIZE_ADDRESS inline
1308 bool HeapObjectHeader::isDead() const 1309 bool HeapObjectHeader::isDead() const
1309 { 1310 {
1310 checkHeader(); 1311 ASSERT(checkHeader());
1311 return m_encoded & headerDeadBitMask; 1312 return m_encoded & headerDeadBitMask;
1312 } 1313 }
1313 1314
1314 NO_SANITIZE_ADDRESS inline 1315 NO_SANITIZE_ADDRESS inline
1315 void HeapObjectHeader::markDead() 1316 void HeapObjectHeader::markDead()
1316 { 1317 {
1317 checkHeader(); 1318 ASSERT(checkHeader());
1318 ASSERT(!isMarked()); 1319 ASSERT(!isMarked());
1319 m_encoded |= headerDeadBitMask; 1320 m_encoded |= headerDeadBitMask;
1320 } 1321 }
1321 1322
1322 inline Address NormalPageHeap::allocateObject(size_t allocationSize, size_t gcIn foIndex) 1323 inline Address NormalPageHeap::allocateObject(size_t allocationSize, size_t gcIn foIndex)
1323 { 1324 {
1324 #if ENABLE(GC_PROFILING) 1325 #if ENABLE(GC_PROFILING)
1325 m_cumulativeAllocationSize += allocationSize; 1326 m_cumulativeAllocationSize += allocationSize;
1326 ++m_allocationCount; 1327 ++m_allocationCount;
1327 #endif 1328 #endif
(...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after
1400 size_t copySize = previousHeader->payloadSize(); 1401 size_t copySize = previousHeader->payloadSize();
1401 if (copySize > size) 1402 if (copySize > size)
1402 copySize = size; 1403 copySize = size;
1403 memcpy(address, previous, copySize); 1404 memcpy(address, previous, copySize);
1404 return address; 1405 return address;
1405 } 1406 }
1406 1407
1407 } // namespace blink 1408 } // namespace blink
1408 1409
1409 #endif // Heap_h 1410 #endif // Heap_h
OLDNEW
« no previous file with comments | « Source/platform/heap/Handle.h ('k') | Source/platform/heap/Heap.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698