From aa475ea4502e18bac460953db1a302aa77be21e8 Mon Sep 17 00:00:00 2001 From: Dmitry Jemerov Date: Mon, 1 Dec 2014 20:29:34 +0100 Subject: [PATCH] report some statistics after test execution is completed --- .../openapi/application/ApplicationManager.java | 2 ++ .../openapi/project/impl/ProjectManagerImpl.java | 3 +++ platform/testFramework/src/_LastInSuiteTest.java | 14 ++++++++++++++ 3 files changed, 19 insertions(+) diff --git a/platform/core-api/src/com/intellij/openapi/application/ApplicationManager.java b/platform/core-api/src/com/intellij/openapi/application/ApplicationManager.java index 5e0831458cb3..892bdb241ef5 100644 --- a/platform/core-api/src/com/intellij/openapi/application/ApplicationManager.java +++ b/platform/core-api/src/com/intellij/openapi/application/ApplicationManager.java @@ -26,6 +26,7 @@ import org.jetbrains.annotations.NotNull; */ public class ApplicationManager { protected static Application ourApplication = null; + public static int ourApplicationChanges = 0; /** * Gets Application. @@ -38,6 +39,7 @@ public class ApplicationManager { private static void setApplication(@NotNull Application instance) { ourApplication = instance; + ourApplicationChanges++; CachedSingletonsRegistry.cleanupCachedFields(); } diff --git a/platform/platform-impl/src/com/intellij/openapi/project/impl/ProjectManagerImpl.java b/platform/platform-impl/src/com/intellij/openapi/project/impl/ProjectManagerImpl.java index 9368e8ee9cab..0a299f299d65 100644 --- a/platform/platform-impl/src/com/intellij/openapi/project/impl/ProjectManagerImpl.java +++ b/platform/platform-impl/src/com/intellij/openapi/project/impl/ProjectManagerImpl.java @@ -109,6 +109,8 @@ public class ProjectManagerImpl extends ProjectManagerEx implements PersistentSt private final ProgressManager myProgressManager; private volatile boolean myDefaultProjectWasDisposed = false; + public static int TEST_PROJECTS_OPENED = 0; + private final Runnable restartApplicationOrReloadProjectTask = new Runnable() { @Override public void run() { @@ -718,6 +720,7 @@ public class ProjectManagerImpl extends ProjectManagerEx implements PersistentSt synchronized (myOpenProjects) { assert ApplicationManager.getApplication().isUnitTestMode(); assert !project.isDisposed() : "Must not open already disposed project"; + TEST_PROJECTS_OPENED++; myTestProjects.add(project); } } diff --git a/platform/testFramework/src/_LastInSuiteTest.java b/platform/testFramework/src/_LastInSuiteTest.java index 5dd2126815c0..790600fcbbb4 100644 --- a/platform/testFramework/src/_LastInSuiteTest.java +++ b/platform/testFramework/src/_LastInSuiteTest.java @@ -17,6 +17,7 @@ import com.intellij.openapi.application.ApplicationManager; import com.intellij.openapi.application.impl.ApplicationImpl; import com.intellij.openapi.command.WriteCommandAction; +import com.intellij.openapi.project.impl.ProjectManagerImpl; import com.intellij.openapi.util.Disposer; import com.intellij.testFramework.LeakHunter; import com.intellij.testFramework.LightPlatformTestCase; @@ -24,6 +25,8 @@ import com.intellij.util.ReflectionUtil; import com.intellij.util.ui.UIUtil; import junit.framework.TestCase; +import java.lang.management.GarbageCollectorMXBean; +import java.lang.management.ManagementFactory; import java.lang.reflect.Method; /** @@ -61,6 +64,17 @@ public class _LastInSuiteTest extends TestCase { } } + @SuppressWarnings("UseOfSystemOutOrSystemErr") + public void testStatistics() throws Exception { + System.out.println("----- TEST STATISTICS -----"); + System.out.println(String.format("Application reinitializations: %d", ApplicationManager.ourApplicationChanges)); + System.out.println(String.format("Test projects opened: %d", ProjectManagerImpl.TEST_PROJECTS_OPENED)); + for (GarbageCollectorMXBean mxBean : ManagementFactory.getGarbageCollectorMXBeans()) { + System.out.println(String.format("Garbage collection in memory pool %s: %d ms", mxBean.getName(), mxBean.getCollectionTime())); + } + System.out.println(String.format("Total classes loaded: %d", ManagementFactory.getClassLoadingMXBean().getTotalLoadedClassCount())); + } + private static void captureMemorySnapshot() { try { Method snapshot = ReflectionUtil.getMethod(Class.forName("com.intellij.util.ProfilingUtil"), "forceCaptureMemorySnapshot");