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

Side by Side Diff: third_party/WebKit/Source/platform/heap/HeapPage.cpp

Issue 2384213003: reflow comments in platform/heap (Closed)
Patch Set: Created 4 years, 2 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
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 283 matching lines...) Expand 10 before | Expand all | Expand 10 after
294 // Sweep a page and move the page from m_firstUnsweptPages to 294 // Sweep a page and move the page from m_firstUnsweptPages to
295 // m_firstPages. 295 // m_firstPages.
296 page->sweep(); 296 page->sweep();
297 page->unlink(&m_firstUnsweptPage); 297 page->unlink(&m_firstUnsweptPage);
298 page->link(&m_firstPage); 298 page->link(&m_firstPage);
299 page->markAsSwept(); 299 page->markAsSwept();
300 } 300 }
301 } 301 }
302 302
303 bool BaseArena::lazySweepWithDeadline(double deadlineSeconds) { 303 bool BaseArena::lazySweepWithDeadline(double deadlineSeconds) {
304 // It might be heavy to call Platform::current()->monotonicallyIncreasingTimeS econds() 304 // It might be heavy to call
305 // per page (i.e., 128 KB sweep or one LargeObject sweep), so we check 305 // Platform::current()->monotonicallyIncreasingTimeSeconds() per page (i.e.,
306 // the deadline per 10 pages. 306 // 128 KB sweep or one LargeObject sweep), so we check the deadline per 10
307 // pages.
307 static const int deadlineCheckInterval = 10; 308 static const int deadlineCheckInterval = 10;
308 309
309 RELEASE_ASSERT(getThreadState()->isSweepingInProgress()); 310 RELEASE_ASSERT(getThreadState()->isSweepingInProgress());
310 ASSERT(getThreadState()->sweepForbidden()); 311 ASSERT(getThreadState()->sweepForbidden());
311 ASSERT(!getThreadState()->isMainThread() || 312 ASSERT(!getThreadState()->isMainThread() ||
312 ScriptForbiddenScope::isScriptForbidden()); 313 ScriptForbiddenScope::isScriptForbidden());
313 314
314 NormalPageArena* normalArena = nullptr; 315 NormalPageArena* normalArena = nullptr;
315 if (m_firstUnsweptPage && !m_firstUnsweptPage->isLargeObjectPage()) { 316 if (m_firstUnsweptPage && !m_firstUnsweptPage->isLargeObjectPage()) {
316 // Mark this NormalPageArena as being lazily swept. 317 // Mark this NormalPageArena as being lazily swept.
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after
357 LargeObjectArena* largeObjectArena = static_cast<LargeObjectArena*>( 358 LargeObjectArena* largeObjectArena = static_cast<LargeObjectArena*>(
358 getThreadState()->arena(BlinkGC::LargeObjectArenaIndex)); 359 getThreadState()->arena(BlinkGC::LargeObjectArenaIndex));
359 Address largeObject = 360 Address largeObject =
360 largeObjectArena->allocateLargeObjectPage(allocationSize, gcInfoIndex); 361 largeObjectArena->allocateLargeObjectPage(allocationSize, gcInfoIndex);
361 ASAN_MARK_LARGE_VECTOR_CONTAINER(this, largeObject); 362 ASAN_MARK_LARGE_VECTOR_CONTAINER(this, largeObject);
362 return largeObject; 363 return largeObject;
363 } 364 }
364 365
365 bool BaseArena::willObjectBeLazilySwept(BasePage* page, 366 bool BaseArena::willObjectBeLazilySwept(BasePage* page,
366 void* objectPointer) const { 367 void* objectPointer) const {
367 // If not on the current page being (potentially) lazily swept, |objectPointer | 368 // If not on the current page being (potentially) lazily swept,
368 // is an unmarked, sweepable object. 369 // |objectPointer| is an unmarked, sweepable object.
369 if (page != m_firstUnsweptPage) 370 if (page != m_firstUnsweptPage)
370 return true; 371 return true;
371 372
372 DCHECK(!page->isLargeObjectPage()); 373 DCHECK(!page->isLargeObjectPage());
373 // Check if the arena is currently being lazily swept. 374 // Check if the arena is currently being lazily swept.
374 NormalPage* normalPage = reinterpret_cast<NormalPage*>(page); 375 NormalPage* normalPage = reinterpret_cast<NormalPage*>(page);
375 NormalPageArena* normalArena = normalPage->arenaForNormalPage(); 376 NormalPageArena* normalArena = normalPage->arenaForNormalPage();
376 if (!normalArena->isLazySweeping()) 377 if (!normalArena->isLazySweeping())
377 return true; 378 return true;
378 379
379 // Rare special case: unmarked object is on the page being lazily swept, 380 // Rare special case: unmarked object is on the page being lazily swept,
380 // and a finalizer for an object on that page calls ThreadHeap::willObjectBeLa zilySwept(). 381 // and a finalizer for an object on that page calls
382 // ThreadHeap::willObjectBeLazilySwept().
381 // 383 //
382 // Need to determine if |objectPointer| represents a live (unmarked) object or an 384 // Need to determine if |objectPointer| represents a live (unmarked) object or
383 // unmarked object that will be lazily swept later. As lazy page sweeping 385 // an unmarked object that will be lazily swept later. As lazy page sweeping
384 // doesn't record a frontier pointer representing how far along it is, the 386 // doesn't record a frontier pointer representing how far along it is, the
385 // page is scanned from the start, skipping past freed & unmarked regions. 387 // page is scanned from the start, skipping past freed & unmarked regions.
386 // 388 //
387 // If no marked objects are encountered before |objectPointer|, we know 389 // If no marked objects are encountered before |objectPointer|, we know that
388 // that the finalizing object calling willObjectBeLazilySwept() comes later, 390 // the finalizing object calling willObjectBeLazilySwept() comes later, and
389 // and |objectPointer| has been deemed to be alive already (=> it won't be swe pt.) 391 // |objectPointer| has been deemed to be alive already (=> it won't be swept.)
390 // 392 //
391 // If a marked object is encountered before |objectPointer|, it will 393 // If a marked object is encountered before |objectPointer|, it will
392 // not have been lazily swept past already. Hence it represents an unmarked, 394 // not have been lazily swept past already. Hence it represents an unmarked,
393 // sweepable object. 395 // sweepable object.
394 // 396 //
395 // As willObjectBeLazilySwept() is used rarely and it happening to be 397 // As willObjectBeLazilySwept() is used rarely and it happening to be
396 // used while runnning a finalizer on the page being lazily swept is 398 // used while runnning a finalizer on the page being lazily swept is
397 // even rarer, the page scan is considered acceptable and something 399 // even rarer, the page scan is considered acceptable and something
398 // really wanted -- willObjectBeLazilySwept()'s result can be trusted. 400 // really wanted -- willObjectBeLazilySwept()'s result can be trusted.
399 Address pageEnd = normalPage->payloadEnd(); 401 Address pageEnd = normalPage->payloadEnd();
(...skipping 328 matching lines...) Expand 10 before | Expand all | Expand 10 after
728 } 730 }
729 return result; 731 return result;
730 } 732 }
731 733
732 void NormalPageArena::setRemainingAllocationSize( 734 void NormalPageArena::setRemainingAllocationSize(
733 size_t newRemainingAllocationSize) { 735 size_t newRemainingAllocationSize) {
734 m_remainingAllocationSize = newRemainingAllocationSize; 736 m_remainingAllocationSize = newRemainingAllocationSize;
735 737
736 // Sync recorded allocated-object size: 738 // Sync recorded allocated-object size:
737 // - if previous alloc checkpoint is larger, allocation size has increased. 739 // - if previous alloc checkpoint is larger, allocation size has increased.
738 // - if smaller, a net reduction in size since last call to updateRemainingAl locationSize(). 740 // - if smaller, a net reduction in size since last call to
741 // updateRemainingAllocationSize().
739 if (m_lastRemainingAllocationSize > m_remainingAllocationSize) 742 if (m_lastRemainingAllocationSize > m_remainingAllocationSize)
740 getThreadState()->increaseAllocatedObjectSize( 743 getThreadState()->increaseAllocatedObjectSize(
741 m_lastRemainingAllocationSize - m_remainingAllocationSize); 744 m_lastRemainingAllocationSize - m_remainingAllocationSize);
742 else if (m_lastRemainingAllocationSize != m_remainingAllocationSize) 745 else if (m_lastRemainingAllocationSize != m_remainingAllocationSize)
743 getThreadState()->decreaseAllocatedObjectSize( 746 getThreadState()->decreaseAllocatedObjectSize(
744 m_remainingAllocationSize - m_lastRemainingAllocationSize); 747 m_remainingAllocationSize - m_lastRemainingAllocationSize);
745 m_lastRemainingAllocationSize = m_remainingAllocationSize; 748 m_lastRemainingAllocationSize = m_remainingAllocationSize;
746 } 749 }
747 750
748 void NormalPageArena::updateRemainingAllocationSize() { 751 void NormalPageArena::updateRemainingAllocationSize() {
(...skipping 727 matching lines...) Expand 10 before | Expand all | Expand 10 after
1476 pageDump->AddScalar("live_size", "bytes", liveSize); 1479 pageDump->AddScalar("live_size", "bytes", liveSize);
1477 pageDump->AddScalar("dead_size", "bytes", deadSize); 1480 pageDump->AddScalar("dead_size", "bytes", deadSize);
1478 pageDump->AddScalar("free_size", "bytes", freeSize); 1481 pageDump->AddScalar("free_size", "bytes", freeSize);
1479 heapInfo.freeSize += freeSize; 1482 heapInfo.freeSize += freeSize;
1480 heapInfo.freeCount += freeCount; 1483 heapInfo.freeCount += freeCount;
1481 } 1484 }
1482 1485
1483 #if ENABLE(ASSERT) 1486 #if ENABLE(ASSERT)
1484 bool NormalPage::contains(Address addr) { 1487 bool NormalPage::contains(Address addr) {
1485 Address blinkPageStart = roundToBlinkPageStart(getAddress()); 1488 Address blinkPageStart = roundToBlinkPageStart(getAddress());
1486 ASSERT( 1489 // Page is at aligned address plus guard page size.
1487 blinkPageStart == 1490 ASSERT(blinkPageStart == getAddress() - blinkGuardPageSize);
1488 getAddress() -
1489 blinkGuardPageSize); // Page is at aligned address plus guard page si ze.
1490 return blinkPageStart <= addr && addr < blinkPageStart + blinkPageSize; 1491 return blinkPageStart <= addr && addr < blinkPageStart + blinkPageSize;
1491 } 1492 }
1492 #endif 1493 #endif
1493 1494
1494 LargeObjectPage::LargeObjectPage(PageMemory* storage, 1495 LargeObjectPage::LargeObjectPage(PageMemory* storage,
1495 BaseArena* arena, 1496 BaseArena* arena,
1496 size_t payloadSize) 1497 size_t payloadSize)
1497 : BasePage(storage, arena), 1498 : BasePage(storage, arena),
1498 m_payloadSize(payloadSize) 1499 m_payloadSize(payloadSize)
1499 #if ENABLE(ASAN_CONTAINER_ANNOTATIONS) 1500 #if ENABLE(ASAN_CONTAINER_ANNOTATIONS)
(...skipping 130 matching lines...) Expand 10 before | Expand all | Expand 10 after
1630 1631
1631 m_hasEntries = true; 1632 m_hasEntries = true;
1632 size_t index = hash(address); 1633 size_t index = hash(address);
1633 ASSERT(!(index & 1)); 1634 ASSERT(!(index & 1));
1634 Address cachePage = roundToBlinkPageStart(address); 1635 Address cachePage = roundToBlinkPageStart(address);
1635 m_entries[index + 1] = m_entries[index]; 1636 m_entries[index + 1] = m_entries[index];
1636 m_entries[index] = cachePage; 1637 m_entries[index] = cachePage;
1637 } 1638 }
1638 1639
1639 } // namespace blink 1640 } // namespace blink
OLDNEW
« no previous file with comments | « third_party/WebKit/Source/platform/heap/HeapPage.h ('k') | third_party/WebKit/Source/platform/heap/HeapTerminatedArray.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698