History

V8 heap object statistics

ksuprynowicz committed 3 years ago

Commit a57c7a51 parent 6466d396 files · +74 −14Browse files

Showing the changes to libraries/script-engine/src/v8/ScriptEngineV8.cpp (1 of 6 files). Show all

Unified · Split

libraries/script-engine/src/v8/ScriptEngineV8.cpp+31−4
@@ -42,6 +42,8 @@ · 41 unmodified lines
4242
4343 #include <Profile.h>
4444
45+#include <v8-profiler.h>
46+
4547 #include "../ScriptEngineLogging.h"
4648 #include "../ScriptProgram.h"
4749 #include "../ScriptValue.h"
@@ -282,7 +284,11 @@ ScriptEngineV8::ScriptEngineV8(ScriptManager *manager) : ScriptEngine(manager), · 234 unmodified lines
282284 // --assert-types
283285
284286 v8::V8::InitializeICU();
285− v8::V8::SetFlagsFromString("--stack-size=256 --verify-heap --assert-types");
287+#ifdef OVERTE_V8_MEMORY_DEBUG
288+ v8::V8::SetFlagsFromString("--stack-size=256 --track_gc_object_stats --assert-types");
289+#else
290+ v8::V8::SetFlagsFromString("--stack-size=256");
291+#endif
286292 //v8::V8::SetFlagsFromString("--stack-size=256 --single-threaded");
287293 v8::Platform* platform = getV8Platform();
288294 v8::V8::InitializePlatform(platform);
@@ -1720,10 +1726,31 @@ ScriptEngineMemoryStatistics ScriptEngineV8::getMemoryUsageStatistics() { · 1431 unmodified lines
17201726 statistics.totalAvailableSize = heapStatistics.total_available_size();
17211727 statistics.totalGlobalHandlesSize = heapStatistics.total_global_handles_size();
17221728 statistics.usedGlobalHandlesSize = heapStatistics.used_global_handles_size();
1723−#ifdef OVERTE_V8_HANDLE_COUNTERS
1729+#ifdef OVERTE_V8_MEMORY_DEBUG
17241730 statistics.scriptValueCount = scriptValueCount;
17251731 statistics.scriptValueProxyCount = scriptValueProxyCount;
17261732 #endif
1727−
17281733 return statistics;
1729−}
1734+}
1735+
1736+void ScriptEngineV8::startCollectingObjectStatistics() {
1737+ auto heapProfiler = _v8Isolate->GetHeapProfiler();
1738+ heapProfiler->StartTrackingHeapObjects();
1739+}
1740+
1741+void ScriptEngineV8::dumpHeapObjectStatistics() {
1742+ // V8TODO: this is not very elegant, but very convenient
1743+ QFile dumpFile("/tmp/heap_objectStatistics_dump.csv");
1744+ if (!dumpFile.open(QFile::WriteOnly | QFile::Truncate)) {
1745+ return;
1746+ }
1747+ QTextStream dump(&dumpFile);
1748+ size_t objectTypeCount = _v8Isolate->NumberOfTrackedHeapObjectTypes();
1749+ for (size_t i = 0; i < objectTypeCount; i++) {
1750+ v8::HeapObjectStatistics statistics;
1751+ if (_v8Isolate->GetHeapObjectStatisticsAtLastGC(&statistics, i)) {
1752+ dump << statistics.object_type() << " " << statistics.object_sub_type() << " " << statistics.object_count() << " "
1753+ << statistics.object_size() << "\n";
1754+ }
1755+ }
1756+}