diff options
author | Lorry Tar Creator <lorry-tar-importer@lorry> | 2016-05-24 08:28:08 +0000 |
---|---|---|
committer | Lorry Tar Creator <lorry-tar-importer@lorry> | 2016-05-24 08:28:08 +0000 |
commit | a4e969f4965059196ca948db781e52f7cfebf19e (patch) | |
tree | 6ca352808c8fdc52006a0f33f6ae3c593b23867d /Source/JavaScriptCore/heap/HeapStatistics.cpp | |
parent | 41386e9cb918eed93b3f13648cbef387e371e451 (diff) | |
download | WebKitGtk-tarball-a4e969f4965059196ca948db781e52f7cfebf19e.tar.gz |
webkitgtk-2.12.3webkitgtk-2.12.3
Diffstat (limited to 'Source/JavaScriptCore/heap/HeapStatistics.cpp')
-rw-r--r-- | Source/JavaScriptCore/heap/HeapStatistics.cpp | 75 |
1 files changed, 32 insertions, 43 deletions
diff --git a/Source/JavaScriptCore/heap/HeapStatistics.cpp b/Source/JavaScriptCore/heap/HeapStatistics.cpp index f23def711..12d12ce92 100644 --- a/Source/JavaScriptCore/heap/HeapStatistics.cpp +++ b/Source/JavaScriptCore/heap/HeapStatistics.cpp @@ -28,16 +28,17 @@ #include "Heap.h" #include "HeapIterationScope.h" +#include "JSCInlines.h" #include "JSObject.h" -#include "Operations.h" #include "Options.h" #include <stdlib.h> +#include <wtf/CurrentTime.h> +#include <wtf/DataLog.h> +#include <wtf/StdLibExtras.h> + #if OS(UNIX) #include <sys/resource.h> #endif -#include <wtf/CurrentTime.h> -#include <wtf/DataLog.h> -#include <wtf/Deque.h> namespace JSC { @@ -132,6 +133,7 @@ void HeapStatistics::logStatistics() void HeapStatistics::exitWithFailure() { + exit(-1); } void HeapStatistics::reportSuccess() @@ -140,33 +142,11 @@ void HeapStatistics::reportSuccess() #endif // OS(UNIX) -size_t HeapStatistics::parseMemoryAmount(char* s) -{ - size_t multiplier = 1; - char* afterS; - size_t value = strtol(s, &afterS, 10); - char next = afterS[0]; - switch (next) { - case 'K': - multiplier = KB; - break; - case 'M': - multiplier = MB; - break; - case 'G': - multiplier = GB; - break; - default: - break; - } - return value * multiplier; -} - class StorageStatistics : public MarkedBlock::VoidFunctor { public: StorageStatistics(); - void operator()(JSCell*); + IterationStatus operator()(JSCell*); size_t objectWithOutOfLineStorageCount(); size_t objectCount(); @@ -175,6 +155,8 @@ public: size_t storageCapacity(); private: + void visit(JSCell*); + size_t m_objectWithOutOfLineStorageCount; size_t m_objectCount; size_t m_storageSize; @@ -189,13 +171,13 @@ inline StorageStatistics::StorageStatistics() { } -inline void StorageStatistics::operator()(JSCell* cell) +inline void StorageStatistics::visit(JSCell* cell) { if (!cell->isObject()) return; JSObject* object = jsCast<JSObject*>(cell); - if (hasIndexedProperties(object->structure()->indexingType())) + if (hasIndexedProperties(object->indexingType())) return; if (object->structure()->isUncacheableDictionary()) @@ -208,6 +190,12 @@ inline void StorageStatistics::operator()(JSCell* cell) m_storageCapacity += object->structure()->totalStorageCapacity() * sizeof(WriteBarrierBase<Unknown>); } +inline IterationStatus StorageStatistics::operator()(JSCell* cell) +{ + visit(cell); + return IterationStatus::Continue; +} + inline size_t StorageStatistics::objectWithOutOfLineStorageCount() { return m_objectWithOutOfLineStorageCount; @@ -228,30 +216,31 @@ inline size_t StorageStatistics::storageCapacity() return m_storageCapacity; } -void HeapStatistics::showObjectStatistics(Heap* heap) +void HeapStatistics::dumpObjectStatistics(Heap* heap) { dataLogF("\n=== Heap Statistics: ===\n"); dataLogF("size: %ldkB\n", static_cast<long>(heap->m_sizeAfterLastCollect / KB)); dataLogF("capacity: %ldkB\n", static_cast<long>(heap->capacity() / KB)); - dataLogF("pause time: %lfms\n\n", heap->m_lastGCLength); + dataLogF("pause time: %lfs\n\n", heap->m_lastFullGCLength); StorageStatistics storageStatistics; { HeapIterationScope iterationScope(*heap); heap->m_objectSpace.forEachLiveCell(iterationScope, storageStatistics); } - dataLogF("wasted .property storage: %ldkB (%ld%%)\n", - static_cast<long>( - (storageStatistics.storageCapacity() - storageStatistics.storageSize()) / KB), - static_cast<long>( - (storageStatistics.storageCapacity() - storageStatistics.storageSize()) * 100 - / storageStatistics.storageCapacity())); - dataLogF("objects with out-of-line .property storage: %ld (%ld%%)\n", - static_cast<long>( - storageStatistics.objectWithOutOfLineStorageCount()), - static_cast<long>( - storageStatistics.objectWithOutOfLineStorageCount() * 100 - / storageStatistics.objectCount())); + long wastedPropertyStorageBytes = 0; + long wastedPropertyStoragePercent = 0; + long objectWithOutOfLineStorageCount = 0; + long objectsWithOutOfLineStoragePercent = 0; + if ((storageStatistics.storageCapacity() > 0) && (storageStatistics.objectCount() > 0)) { + wastedPropertyStorageBytes = static_cast<long>((storageStatistics.storageCapacity() - storageStatistics.storageSize()) / KB); + wastedPropertyStoragePercent = static_cast<long>( + (storageStatistics.storageCapacity() - storageStatistics.storageSize()) * 100 / storageStatistics.storageCapacity()); + objectWithOutOfLineStorageCount = static_cast<long>(storageStatistics.objectWithOutOfLineStorageCount()); + objectsWithOutOfLineStoragePercent = objectWithOutOfLineStorageCount * 100 / storageStatistics.objectCount(); + } + dataLogF("wasted .property storage: %ldkB (%ld%%)\n", wastedPropertyStorageBytes, wastedPropertyStoragePercent); + dataLogF("objects with out-of-line .property storage: %ld (%ld%%)\n", objectWithOutOfLineStorageCount, objectsWithOutOfLineStoragePercent); } } // namespace JSC |