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

Unified Diff: Source/platform/heap/ThreadState.cpp

Issue 1297493002: Oilpan: Remove Heap::s_heapSizePerPersistent (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Created 5 years, 4 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « Source/platform/heap/Heap.cpp ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: Source/platform/heap/ThreadState.cpp
diff --git a/Source/platform/heap/ThreadState.cpp b/Source/platform/heap/ThreadState.cpp
index 658354db8c8cfbcc431f05489667bcc5faaddd07..3971b8206bada4336caa2e1b62f5e4394600ca45 100644
--- a/Source/platform/heap/ThreadState.cpp
+++ b/Source/platform/heap/ThreadState.cpp
@@ -576,6 +576,11 @@ size_t ThreadState::currentObjectSize()
size_t ThreadState::estimatedLiveObjectSize()
{
+ if (Heap::persistentCountAtLastGC() == 0) {
+ // We'll reach here only before hitting the first GC.
+ return 0;
+ }
+
// We estimate the live object size with the following equations.
//
// heapSizePerPersistent = (marked(t0, t1) + partitionAlloc(t0)) / persistentCount(t0)
@@ -591,19 +596,20 @@ size_t ThreadState::estimatedLiveObjectSize()
// The number of persistent handles collected between
// t0 and t.
// partitionAlloc(t): The size of allocated memory in PartitionAlloc at t.
+ size_t heapSizeRetainedByCollectedPersistents = static_cast<size_t>(1.0 * (Heap::markedObjectSizeAtLastCompleteSweep() + Heap::partitionAllocSizeAtLastGC()) / Heap::persistentCountAtLastGC() * Heap::collectedPersistentCount());
size_t currentHeapSize = currentObjectSize();
- size_t heapSizeRetainedByCollectedPersistents = Heap::heapSizePerPersistent() * Heap::collectedPersistentCount();
- size_t estimatedSize = 0;
- if (currentHeapSize > heapSizeRetainedByCollectedPersistents)
- estimatedSize = currentHeapSize - heapSizeRetainedByCollectedPersistents;
- return estimatedSize;
+ if (currentHeapSize < heapSizeRetainedByCollectedPersistents)
+ return 0;
+ return currentHeapSize - heapSizeRetainedByCollectedPersistents;
}
double ThreadState::heapGrowingRate()
{
size_t currentSize = currentObjectSize();
size_t estimatedSize = estimatedLiveObjectSize();
- double growingRate = 1.0 * currentSize / estimatedSize;
+ // If the estimatedSize is 0, we set a very high growing rate
+ // to trigger a GC.
+ double growingRate = estimatedSize > 0 ? 1.0 * currentSize / estimatedSize : 100;
TRACE_COUNTER1("blink_gc", "ThreadState::currentHeapSizeKB", std::min(currentSize / 1024, static_cast<size_t>(INT_MAX)));
TRACE_COUNTER1("blink_gc", "ThreadState::estimatedLiveObjectSizeKB", std::min(estimatedSize / 1024, static_cast<size_t>(INT_MAX)));
TRACE_COUNTER1("blink_gc", "ThreadState::heapGrowingRate", static_cast<int>(100 * growingRate));
@@ -655,17 +661,11 @@ bool ThreadState::shouldSchedulePreciseGC()
bool ThreadState::shouldSchedulePageNavigationGC(float estimatedRemovalRatio)
{
- if (isGCForbidden())
- return false;
-
return judgeGCThreshold(1024 * 1024, 1.5);
}
bool ThreadState::shouldForceConservativeGC()
{
- if (isGCForbidden())
- return false;
-
// TODO(haraken): 400% is too large. Lower the heap growing factor.
return judgeGCThreshold(32 * 1024 * 1024, 5.0);
}
@@ -673,6 +673,9 @@ bool ThreadState::shouldForceConservativeGC()
void ThreadState::schedulePageNavigationGCIfNeeded(float estimatedRemovalRatio)
{
ASSERT(checkThread());
+ if (isGCForbidden())
+ return;
+
// Finish on-going lazy sweeping.
// TODO(haraken): It might not make sense to force completeSweep() for all
// page navigations.
@@ -695,6 +698,9 @@ void ThreadState::schedulePageNavigationGC()
void ThreadState::scheduleGCIfNeeded()
{
ASSERT(checkThread());
+ if (isGCForbidden())
+ return;
+
// Allocation is allowed during sweeping, but those allocations should not
// trigger nested GCs.
if (isSweepingInProgress())
@@ -1146,14 +1152,9 @@ void ThreadState::postSweep()
collectionRate = 1 - 1.0 * Heap::markedObjectSize() / Heap::objectSizeAtLastGC();
TRACE_COUNTER1("blink_gc", "ThreadState::collectionRate", static_cast<int>(100 * collectionRate));
- // See the comment in estimatedLiveObjectSize() for what we're
- // calculating here.
- //
// Heap::markedObjectSize() may be underestimated here if any other
// thread has not yet finished lazy sweeping.
- if (Heap::persistentCountAtLastGC() > 0) {
- Heap::setHeapSizePerPersistent((Heap::markedObjectSize() + Heap::partitionAllocSizeAtLastGC()) / Heap::persistentCountAtLastGC());
- }
+ Heap::setMarkedObjectSizeAtLastCompleteSweep(Heap::markedObjectSize());
}
switch (gcState()) {
« no previous file with comments | « Source/platform/heap/Heap.cpp ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698