From d43f995ead75fd755fe90f18c9f2477fc96bb466 Mon Sep 17 00:00:00 2001 From: Nikolay Chashnikov Date: Wed, 22 Apr 2020 20:28:07 +0300 Subject: [PATCH] [workspace model] add utility to dump memory snapshot GitOrigin-RevId: cd6f049ffc5b0f83fb98ef002dd3a9d453d12e19 --- .../jps/WorkspaceModelMemoryDumper.kt | 35 +++++++++++++++++++ 1 file changed, 35 insertions(+) create mode 100644 platform/workspaceModel-ide-tests/testSrc/com/intellij/workspace/jps/WorkspaceModelMemoryDumper.kt diff --git a/platform/workspaceModel-ide-tests/testSrc/com/intellij/workspace/jps/WorkspaceModelMemoryDumper.kt b/platform/workspaceModel-ide-tests/testSrc/com/intellij/workspace/jps/WorkspaceModelMemoryDumper.kt new file mode 100644 index 000000000000..d03e43a30d21 --- /dev/null +++ b/platform/workspaceModel-ide-tests/testSrc/com/intellij/workspace/jps/WorkspaceModelMemoryDumper.kt @@ -0,0 +1,35 @@ +// Copyright 2000-2020 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file. +package com.intellij.workspace.jps + +import com.intellij.openapi.application.PathManager +import com.intellij.openapi.util.io.FileUtil +import com.intellij.testFramework.TestApplicationManager +import com.intellij.util.MemoryDumpHelper +import com.intellij.util.SystemProperties +import com.intellij.workspace.api.TypedEntityStorage +import com.intellij.workspace.api.TypedEntityStorageBuilder +import com.intellij.workspace.ide.VirtualFileUrlManagerImpl +import java.io.File +import java.nio.file.Paths +import kotlin.system.exitProcess + +/** + * Dumps memory snapshot for workspace model of IDEA Ultimate project to user home directory + */ +fun main() { + TestApplicationManager.getInstance() + val data = loadProject() + val dumpFile = File(SystemProperties.getUserHome(), "workspace-model.hprof") + FileUtil.delete(dumpFile) + MemoryDumpHelper.captureMemoryDump(dumpFile.absolutePath) + println(data) + exitProcess(0) +} + +private fun loadProject(): Pair { + val builder = TypedEntityStorageBuilder.create() + val virtualFileManager = VirtualFileUrlManagerImpl() + val projectDir = File(PathManager.getHomePath()).asConfigLocation(virtualFileManager) + val serializers = JpsProjectEntitiesLoader.loadProject(projectDir, builder, Paths.get("/tmp"), virtualFileManager) + return Pair(serializers, builder.toStorage()) +} \ No newline at end of file