OLD | NEW |
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 1916 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1927 s_postMarkingCallbackStack = new CallbackStack(); | 1927 s_postMarkingCallbackStack = new CallbackStack(); |
1928 s_globalWeakCallbackStack = new CallbackStack(); | 1928 s_globalWeakCallbackStack = new CallbackStack(); |
1929 s_ephemeronStack = new CallbackStack(); | 1929 s_ephemeronStack = new CallbackStack(); |
1930 s_heapDoesNotContainCache = new HeapDoesNotContainCache(); | 1930 s_heapDoesNotContainCache = new HeapDoesNotContainCache(); |
1931 s_freePagePool = new FreePagePool(); | 1931 s_freePagePool = new FreePagePool(); |
1932 s_orphanedPagePool = new OrphanedPagePool(); | 1932 s_orphanedPagePool = new OrphanedPagePool(); |
1933 s_allocatedSpace = 0; | 1933 s_allocatedSpace = 0; |
1934 s_allocatedObjectSize = 0; | 1934 s_allocatedObjectSize = 0; |
1935 s_objectSizeAtLastGC = 0; | 1935 s_objectSizeAtLastGC = 0; |
1936 s_markedObjectSize = 0; | 1936 s_markedObjectSize = 0; |
| 1937 s_markedObjectSizeAtLastCompleteSweep = 0; |
1937 s_persistentCount = 0; | 1938 s_persistentCount = 0; |
1938 s_persistentCountAtLastGC = 0; | 1939 s_persistentCountAtLastGC = 0; |
1939 s_collectedPersistentCount = 0; | 1940 s_collectedPersistentCount = 0; |
1940 s_partitionAllocSizeAtLastGC = WTF::Partitions::totalSizeOfCommittedPages(); | 1941 s_partitionAllocSizeAtLastGC = WTF::Partitions::totalSizeOfCommittedPages(); |
1941 // Initially, the total heap size is very small. Thus we'll hit the GC | |
1942 // condition (i.e., 50% increase on the heap size etc) even if we don't | |
1943 // take into account the memory usage explained by the collected persistent | |
1944 // handles. So it is OK to set a large initial value. | |
1945 s_heapSizePerPersistent = 1024 * 1024; | |
1946 s_estimatedMarkingTimePerByte = 0.0; | 1942 s_estimatedMarkingTimePerByte = 0.0; |
1947 | 1943 |
1948 GCInfoTable::init(); | 1944 GCInfoTable::init(); |
1949 | 1945 |
1950 if (Platform::current() && Platform::current()->currentThread()) | 1946 if (Platform::current() && Platform::current()->currentThread()) |
1951 Platform::current()->registerMemoryDumpProvider(BlinkGCMemoryDumpProvide
r::instance()); | 1947 Platform::current()->registerMemoryDumpProvider(BlinkGCMemoryDumpProvide
r::instance()); |
1952 } | 1948 } |
1953 | 1949 |
1954 void Heap::shutdown() | 1950 void Heap::shutdown() |
1955 { | 1951 { |
(...skipping 441 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2397 observedMaxSizeInMB = sizeInMB; | 2393 observedMaxSizeInMB = sizeInMB; |
2398 } | 2394 } |
2399 } | 2395 } |
2400 | 2396 |
2401 void Heap::reportMemoryUsageForTracing() | 2397 void Heap::reportMemoryUsageForTracing() |
2402 { | 2398 { |
2403 // These values are divided by 1024 to avoid overflow in practical cases (TR
ACE_COUNTER values are 32-bit ints). | 2399 // These values are divided by 1024 to avoid overflow in practical cases (TR
ACE_COUNTER values are 32-bit ints). |
2404 // They are capped to INT_MAX just in case. | 2400 // They are capped to INT_MAX just in case. |
2405 TRACE_COUNTER1("blink_gc", "Heap::allocatedObjectSizeKB", std::min(Heap::all
ocatedObjectSize() / 1024, static_cast<size_t>(INT_MAX))); | 2401 TRACE_COUNTER1("blink_gc", "Heap::allocatedObjectSizeKB", std::min(Heap::all
ocatedObjectSize() / 1024, static_cast<size_t>(INT_MAX))); |
2406 TRACE_COUNTER1("blink_gc", "Heap::markedObjectSizeKB", std::min(Heap::marked
ObjectSize() / 1024, static_cast<size_t>(INT_MAX))); | 2402 TRACE_COUNTER1("blink_gc", "Heap::markedObjectSizeKB", std::min(Heap::marked
ObjectSize() / 1024, static_cast<size_t>(INT_MAX))); |
| 2403 TRACE_COUNTER1("blink_gc", "Heap::markedObjectSizeAtLastCompleteSweepKB", st
d::min(Heap::markedObjectSizeAtLastCompleteSweep() / 1024, static_cast<size_t>(I
NT_MAX))); |
2407 TRACE_COUNTER1("blink_gc", "Heap::allocatedSpaceKB", std::min(Heap::allocate
dSpace() / 1024, static_cast<size_t>(INT_MAX))); | 2404 TRACE_COUNTER1("blink_gc", "Heap::allocatedSpaceKB", std::min(Heap::allocate
dSpace() / 1024, static_cast<size_t>(INT_MAX))); |
2408 TRACE_COUNTER1("blink_gc", "Heap::objectSizeAtLastGCKB", std::min(Heap::obje
ctSizeAtLastGC() / 1024, static_cast<size_t>(INT_MAX))); | 2405 TRACE_COUNTER1("blink_gc", "Heap::objectSizeAtLastGCKB", std::min(Heap::obje
ctSizeAtLastGC() / 1024, static_cast<size_t>(INT_MAX))); |
2409 TRACE_COUNTER1("blink_gc", "Heap::persistentCount", std::min(Heap::persisten
tCount(), static_cast<size_t>(INT_MAX))); | 2406 TRACE_COUNTER1("blink_gc", "Heap::persistentCount", std::min(Heap::persisten
tCount(), static_cast<size_t>(INT_MAX))); |
2410 TRACE_COUNTER1("blink_gc", "Heap::persistentCountAtLastGC", std::min(Heap::p
ersistentCountAtLastGC(), static_cast<size_t>(INT_MAX))); | 2407 TRACE_COUNTER1("blink_gc", "Heap::persistentCountAtLastGC", std::min(Heap::p
ersistentCountAtLastGC(), static_cast<size_t>(INT_MAX))); |
2411 TRACE_COUNTER1("blink_gc", "Heap::collectedPersistentCount", std::min(Heap::
collectedPersistentCount(), static_cast<size_t>(INT_MAX))); | 2408 TRACE_COUNTER1("blink_gc", "Heap::collectedPersistentCount", std::min(Heap::
collectedPersistentCount(), static_cast<size_t>(INT_MAX))); |
2412 TRACE_COUNTER1("blink_gc", "Heap::heapSizePerPersistent", std::min(Heap::hea
pSizePerPersistent(), static_cast<size_t>(INT_MAX))); | |
2413 TRACE_COUNTER1("blink_gc", "Heap::partitionAllocSizeAtLastGCKB", std::min(He
ap::partitionAllocSizeAtLastGC() / 1024, static_cast<size_t>(INT_MAX))); | 2409 TRACE_COUNTER1("blink_gc", "Heap::partitionAllocSizeAtLastGCKB", std::min(He
ap::partitionAllocSizeAtLastGC() / 1024, static_cast<size_t>(INT_MAX))); |
2414 TRACE_COUNTER1("blink_gc", "Partitions::totalSizeOfCommittedPagesKB", std::m
in(WTF::Partitions::totalSizeOfCommittedPages() / 1024, static_cast<size_t>(INT_
MAX))); | 2410 TRACE_COUNTER1("blink_gc", "Partitions::totalSizeOfCommittedPagesKB", std::m
in(WTF::Partitions::totalSizeOfCommittedPages() / 1024, static_cast<size_t>(INT_
MAX))); |
2415 } | 2411 } |
2416 | 2412 |
2417 size_t Heap::objectPayloadSizeForTesting() | 2413 size_t Heap::objectPayloadSizeForTesting() |
2418 { | 2414 { |
2419 size_t objectPayloadSize = 0; | 2415 size_t objectPayloadSize = 0; |
2420 for (ThreadState* state : ThreadState::attachedThreads()) { | 2416 for (ThreadState* state : ThreadState::attachedThreads()) { |
2421 state->setGCState(ThreadState::GCRunning); | 2417 state->setGCState(ThreadState::GCRunning); |
2422 state->makeConsistentForGC(); | 2418 state->makeConsistentForGC(); |
(...skipping 97 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2520 delete current; | 2516 delete current; |
2521 } | 2517 } |
2522 | 2518 |
2523 void Heap::resetHeapCounters() | 2519 void Heap::resetHeapCounters() |
2524 { | 2520 { |
2525 ASSERT(ThreadState::current()->isInGC()); | 2521 ASSERT(ThreadState::current()->isInGC()); |
2526 | 2522 |
2527 Heap::reportMemoryUsageForTracing(); | 2523 Heap::reportMemoryUsageForTracing(); |
2528 | 2524 |
2529 s_objectSizeAtLastGC = s_allocatedObjectSize + s_markedObjectSize; | 2525 s_objectSizeAtLastGC = s_allocatedObjectSize + s_markedObjectSize; |
| 2526 s_partitionAllocSizeAtLastGC = WTF::Partitions::totalSizeOfCommittedPages(); |
2530 s_allocatedObjectSize = 0; | 2527 s_allocatedObjectSize = 0; |
2531 s_markedObjectSize = 0; | 2528 s_markedObjectSize = 0; |
2532 s_partitionAllocSizeAtLastGC = WTF::Partitions::totalSizeOfCommittedPages(); | |
2533 s_persistentCountAtLastGC = s_persistentCount; | 2529 s_persistentCountAtLastGC = s_persistentCount; |
2534 s_collectedPersistentCount = 0; | 2530 s_collectedPersistentCount = 0; |
2535 } | 2531 } |
2536 | 2532 |
2537 CallbackStack* Heap::s_markingStack; | 2533 CallbackStack* Heap::s_markingStack; |
2538 CallbackStack* Heap::s_postMarkingCallbackStack; | 2534 CallbackStack* Heap::s_postMarkingCallbackStack; |
2539 CallbackStack* Heap::s_globalWeakCallbackStack; | 2535 CallbackStack* Heap::s_globalWeakCallbackStack; |
2540 CallbackStack* Heap::s_ephemeronStack; | 2536 CallbackStack* Heap::s_ephemeronStack; |
2541 HeapDoesNotContainCache* Heap::s_heapDoesNotContainCache; | 2537 HeapDoesNotContainCache* Heap::s_heapDoesNotContainCache; |
2542 bool Heap::s_shutdownCalled = false; | 2538 bool Heap::s_shutdownCalled = false; |
2543 FreePagePool* Heap::s_freePagePool; | 2539 FreePagePool* Heap::s_freePagePool; |
2544 OrphanedPagePool* Heap::s_orphanedPagePool; | 2540 OrphanedPagePool* Heap::s_orphanedPagePool; |
2545 Heap::RegionTree* Heap::s_regionTree = nullptr; | 2541 Heap::RegionTree* Heap::s_regionTree = nullptr; |
2546 size_t Heap::s_allocatedSpace = 0; | 2542 size_t Heap::s_allocatedSpace = 0; |
2547 size_t Heap::s_allocatedObjectSize = 0; | 2543 size_t Heap::s_allocatedObjectSize = 0; |
2548 size_t Heap::s_objectSizeAtLastGC = 0; | 2544 size_t Heap::s_objectSizeAtLastGC = 0; |
2549 size_t Heap::s_markedObjectSize = 0; | 2545 size_t Heap::s_markedObjectSize = 0; |
| 2546 size_t Heap::s_markedObjectSizeAtLastCompleteSweep = 0; |
2550 size_t Heap::s_persistentCount = 0; | 2547 size_t Heap::s_persistentCount = 0; |
2551 size_t Heap::s_persistentCountAtLastGC = 0; | 2548 size_t Heap::s_persistentCountAtLastGC = 0; |
2552 size_t Heap::s_collectedPersistentCount = 0; | 2549 size_t Heap::s_collectedPersistentCount = 0; |
2553 size_t Heap::s_partitionAllocSizeAtLastGC = 0; | 2550 size_t Heap::s_partitionAllocSizeAtLastGC = 0; |
2554 size_t Heap::s_heapSizePerPersistent = 0; | |
2555 double Heap::s_estimatedMarkingTimePerByte = 0.0; | 2551 double Heap::s_estimatedMarkingTimePerByte = 0.0; |
2556 | 2552 |
2557 } // namespace blink | 2553 } // namespace blink |
OLD | NEW |