From ddba19c74078b39aaa6ec199ef8a0634babf3dfd Mon Sep 17 00:00:00 2001 From: Alexey Kudravtsev Date: Fri, 27 Jun 2014 14:07:22 +0400 Subject: [PATCH] do not do expensive consistency checks during performance tests --- .../application/impl/ApplicationInfoImpl.java | 8 ++++++++ .../intellij/openapi/editor/impl/CharArray.java | 7 +++++-- .../intellij/openapi/editor/impl/DocumentImpl.java | 1 - .../openapi/editor/impl/RangeMarkerTree.java | 4 +++- .../vfs/impl/VirtualFilePointerContainerImpl.java | 3 ++- .../src/com/intellij/psi/impl/DebugUtil.java | 5 +++-- .../daemon/impl/PassExecutorService.java | 3 ++- .../vfs/newvfs/impl/VirtualDirectoryImpl.java | 3 ++- .../testFramework/LightPlatformTestCase.java | 3 +++ .../intellij/testFramework/PlatformTestCase.java | 14 ++++++-------- .../com/intellij/testFramework/UsefulTestCase.java | 2 -- 11 files changed, 34 insertions(+), 19 deletions(-) diff --git a/platform/core-impl/src/com/intellij/openapi/application/impl/ApplicationInfoImpl.java b/platform/core-impl/src/com/intellij/openapi/application/impl/ApplicationInfoImpl.java index 4f3c08629128..78ce83cc5154 100644 --- a/platform/core-impl/src/com/intellij/openapi/application/impl/ApplicationInfoImpl.java +++ b/platform/core-impl/src/com/intellij/openapi/application/impl/ApplicationInfoImpl.java @@ -779,4 +779,12 @@ public class ApplicationInfoImpl extends ApplicationInfoEx implements JDOMExtern return myDependentPlugin; } } + + private static volatile boolean myInPerformanceTest; + public static boolean isInPerformanceTest() { + return myInPerformanceTest; + } + public static void setInPerformanceTest(boolean inPerformanceTest) { + myInPerformanceTest = inPerformanceTest; + } } diff --git a/platform/core-impl/src/com/intellij/openapi/editor/impl/CharArray.java b/platform/core-impl/src/com/intellij/openapi/editor/impl/CharArray.java index 5fba46ac4ed7..efa2d2d34a61 100644 --- a/platform/core-impl/src/com/intellij/openapi/editor/impl/CharArray.java +++ b/platform/core-impl/src/com/intellij/openapi/editor/impl/CharArray.java @@ -1,5 +1,5 @@ /* - * Copyright 2000-2013 JetBrains s.r.o. + * Copyright 2000-2014 JetBrains s.r.o. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -16,6 +16,8 @@ package com.intellij.openapi.editor.impl; import com.intellij.diagnostic.Dumpable; +import com.intellij.openapi.application.ApplicationManager; +import com.intellij.openapi.application.impl.ApplicationInfoImpl; import com.intellij.openapi.diagnostic.Logger; import com.intellij.openapi.editor.event.DocumentEvent; import com.intellij.openapi.util.text.StringUtil; @@ -39,6 +41,7 @@ import java.util.concurrent.locks.ReentrantLock; * @author cdr */ abstract class CharArray implements CharSequenceBackedByArray, Dumpable { + private static final boolean CHECK_DOCUMENT_CONSISTENCY = ApplicationManager.getApplication() != null && ApplicationManager.getApplication().isUnitTestMode() && !ApplicationInfoImpl.isInPerformanceTest(); private static final Logger LOG = Logger.getInstance("#" + CharArray.class.getName()); @SuppressWarnings("UseOfArchaicSystemPropertyAccessors") @@ -77,7 +80,7 @@ abstract class CharArray implements CharSequenceBackedByArray, Dumpable { private final boolean myDebug = isDebug(); boolean isDebug() { - return DEBUG_DEFERRED_PROCESSING || DocumentImpl.CHECK_DOCUMENT_CONSISTENCY; + return DEBUG_DEFERRED_PROCESSING || CHECK_DOCUMENT_CONSISTENCY; } /** diff --git a/platform/core-impl/src/com/intellij/openapi/editor/impl/DocumentImpl.java b/platform/core-impl/src/com/intellij/openapi/editor/impl/DocumentImpl.java index 8a343f7279dd..fa234e109d49 100644 --- a/platform/core-impl/src/com/intellij/openapi/editor/impl/DocumentImpl.java +++ b/platform/core-impl/src/com/intellij/openapi/editor/impl/DocumentImpl.java @@ -56,7 +56,6 @@ import java.util.List; public class DocumentImpl extends UserDataHolderBase implements DocumentEx { private static final Logger LOG = Logger.getInstance("#com.intellij.openapi.editor.impl.DocumentImpl"); - public static boolean CHECK_DOCUMENT_CONSISTENCY = ApplicationManager.getApplication() != null && ApplicationManager.getApplication().isUnitTestMode(); private final Ref myCachedDocumentListeners = Ref.create(null); private final List myDocumentListeners = ContainerUtil.createLockFreeCopyOnWriteList(); diff --git a/platform/core-impl/src/com/intellij/openapi/editor/impl/RangeMarkerTree.java b/platform/core-impl/src/com/intellij/openapi/editor/impl/RangeMarkerTree.java index 2e7ebadc3892..31c135764481 100644 --- a/platform/core-impl/src/com/intellij/openapi/editor/impl/RangeMarkerTree.java +++ b/platform/core-impl/src/com/intellij/openapi/editor/impl/RangeMarkerTree.java @@ -16,6 +16,7 @@ package com.intellij.openapi.editor.impl; import com.intellij.openapi.application.ApplicationManager; +import com.intellij.openapi.application.impl.ApplicationInfoImpl; import com.intellij.openapi.diagnostic.Logger; import com.intellij.openapi.editor.Document; import com.intellij.openapi.editor.event.DocumentEvent; @@ -37,7 +38,8 @@ import java.util.concurrent.atomic.AtomicInteger; */ public class RangeMarkerTree extends IntervalTreeImpl { private static final Logger LOG = Logger.getInstance("#com.intellij.openapi.editor.impl.RangeMarkerTree"); - private static final boolean DEBUG = LOG.isDebugEnabled() || ApplicationManager.getApplication() != null && (ApplicationManager.getApplication().isUnitTestMode() || ApplicationManager.getApplication().isInternal()); + private static final boolean DEBUG = LOG.isDebugEnabled() || ApplicationManager.getApplication() != null && (ApplicationManager.getApplication().isUnitTestMode() && !ApplicationInfoImpl + .isInPerformanceTest() || ApplicationManager.getApplication().isInternal()); private final PrioritizedDocumentListener myListener; private final Document myDocument; diff --git a/platform/core-impl/src/com/intellij/openapi/vfs/impl/VirtualFilePointerContainerImpl.java b/platform/core-impl/src/com/intellij/openapi/vfs/impl/VirtualFilePointerContainerImpl.java index 65dc79bac298..d06cf9939b90 100644 --- a/platform/core-impl/src/com/intellij/openapi/vfs/impl/VirtualFilePointerContainerImpl.java +++ b/platform/core-impl/src/com/intellij/openapi/vfs/impl/VirtualFilePointerContainerImpl.java @@ -17,6 +17,7 @@ package com.intellij.openapi.vfs.impl; import com.intellij.openapi.Disposable; import com.intellij.openapi.application.ApplicationManager; +import com.intellij.openapi.application.impl.ApplicationInfoImpl; import com.intellij.openapi.diagnostic.Logger; import com.intellij.openapi.util.InvalidDataException; import com.intellij.openapi.util.TraceableDisposable; @@ -51,7 +52,7 @@ public class VirtualFilePointerContainerImpl extends TraceableDisposable impleme private volatile long myTimeStampOfCachedThings = -1; @NonNls public static final String URL_ATTR = "url"; private boolean myDisposed; - private static final boolean TRACE_CREATION = LOG.isDebugEnabled() || ApplicationManager.getApplication().isUnitTestMode(); + private static final boolean TRACE_CREATION = LOG.isDebugEnabled() || (ApplicationManager.getApplication().isUnitTestMode() && !ApplicationInfoImpl.isInPerformanceTest()); public VirtualFilePointerContainerImpl(@NotNull VirtualFilePointerManager manager, @NotNull Disposable parentDisposable, @Nullable VirtualFilePointerListener listener) { diff --git a/platform/core-impl/src/com/intellij/psi/impl/DebugUtil.java b/platform/core-impl/src/com/intellij/psi/impl/DebugUtil.java index a7a38fc749e5..2a22a7b0dc66 100644 --- a/platform/core-impl/src/com/intellij/psi/impl/DebugUtil.java +++ b/platform/core-impl/src/com/intellij/psi/impl/DebugUtil.java @@ -1,5 +1,5 @@ /* - * Copyright 2000-2012 JetBrains s.r.o. + * Copyright 2000-2014 JetBrains s.r.o. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -21,6 +21,7 @@ import com.intellij.lang.LighterASTTokenNode; import com.intellij.lang.impl.PsiBuilderImpl; import com.intellij.openapi.application.Application; import com.intellij.openapi.application.ApplicationManager; +import com.intellij.openapi.application.impl.ApplicationInfoImpl; import com.intellij.openapi.diagnostic.Logger; import com.intellij.openapi.util.Ref; import com.intellij.openapi.util.UserDataHolderBase; @@ -75,7 +76,7 @@ public class DebugUtil { public static final boolean DO_EXPENSIVE_CHECKS; static { Application application = ApplicationManager.getApplication(); - DO_EXPENSIVE_CHECKS = application != null && application.isUnitTestMode(); + DO_EXPENSIVE_CHECKS = application != null && application.isUnitTestMode() && !ApplicationInfoImpl.isInPerformanceTest(); } public static final boolean CHECK_INSIDE_ATOMIC_ACTION_ENABLED = DO_EXPENSIVE_CHECKS; diff --git a/platform/lang-impl/src/com/intellij/codeInsight/daemon/impl/PassExecutorService.java b/platform/lang-impl/src/com/intellij/codeInsight/daemon/impl/PassExecutorService.java index 4ae10647a17e..cd77283ec701 100644 --- a/platform/lang-impl/src/com/intellij/codeInsight/daemon/impl/PassExecutorService.java +++ b/platform/lang-impl/src/com/intellij/codeInsight/daemon/impl/PassExecutorService.java @@ -26,6 +26,7 @@ import com.intellij.openapi.Disposable; import com.intellij.openapi.application.ApplicationManager; import com.intellij.openapi.application.ModalityState; import com.intellij.openapi.application.ex.ApplicationManagerEx; +import com.intellij.openapi.application.impl.ApplicationInfoImpl; import com.intellij.openapi.diagnostic.Logger; import com.intellij.openapi.editor.Document; import com.intellij.openapi.editor.Editor; @@ -62,7 +63,7 @@ import java.util.concurrent.atomic.AtomicInteger; */ public class PassExecutorService implements Disposable { private static final Logger LOG = Logger.getInstance("#com.intellij.codeInsight.daemon.impl.PassExecutorService"); - private static final boolean CHECK_CONSISTENCY = ApplicationManager.getApplication().isUnitTestMode(); + private static final boolean CHECK_CONSISTENCY = ApplicationManager.getApplication().isUnitTestMode() && !ApplicationInfoImpl.isInPerformanceTest(); private final Map> mySubmittedPasses = new ConcurrentHashMap>(); private final Project myProject; diff --git a/platform/platform-impl/src/com/intellij/openapi/vfs/newvfs/impl/VirtualDirectoryImpl.java b/platform/platform-impl/src/com/intellij/openapi/vfs/newvfs/impl/VirtualDirectoryImpl.java index 2abfd84e8d43..44357ae7b063 100644 --- a/platform/platform-impl/src/com/intellij/openapi/vfs/newvfs/impl/VirtualDirectoryImpl.java +++ b/platform/platform-impl/src/com/intellij/openapi/vfs/newvfs/impl/VirtualDirectoryImpl.java @@ -16,6 +16,7 @@ package com.intellij.openapi.vfs.newvfs.impl; import com.intellij.openapi.application.ApplicationManager; +import com.intellij.openapi.application.impl.ApplicationInfoImpl; import com.intellij.openapi.diagnostic.Logger; import com.intellij.openapi.util.SystemInfo; import com.intellij.openapi.util.io.FileAttributes; @@ -54,7 +55,7 @@ import java.util.List; public class VirtualDirectoryImpl extends VirtualFileSystemEntry { private static final Logger LOG = Logger.getInstance("#com.intellij.openapi.vfs.newvfs.impl.VirtualDirectoryImpl"); - public static boolean CHECK = ApplicationManager.getApplication().isUnitTestMode(); + public static boolean CHECK = ApplicationManager.getApplication().isUnitTestMode() && !ApplicationInfoImpl.isInPerformanceTest(); static final VirtualDirectoryImpl NULL_VIRTUAL_FILE = new VirtualDirectoryImpl(-42, null, null, null, LocalFileSystem.getInstance()) { diff --git a/platform/testFramework/src/com/intellij/testFramework/LightPlatformTestCase.java b/platform/testFramework/src/com/intellij/testFramework/LightPlatformTestCase.java index 42e7c7057962..33051b471049 100644 --- a/platform/testFramework/src/com/intellij/testFramework/LightPlatformTestCase.java +++ b/platform/testFramework/src/com/intellij/testFramework/LightPlatformTestCase.java @@ -37,6 +37,7 @@ import com.intellij.openapi.actionSystem.DataProvider; import com.intellij.openapi.application.Application; import com.intellij.openapi.application.ApplicationManager; import com.intellij.openapi.application.ex.ApplicationEx; +import com.intellij.openapi.application.impl.ApplicationInfoImpl; import com.intellij.openapi.command.WriteCommandAction; import com.intellij.openapi.command.impl.UndoManagerImpl; import com.intellij.openapi.command.undo.UndoManager; @@ -344,6 +345,8 @@ public abstract class LightPlatformTestCase extends UsefulTestCase implements Da try { LightPlatformTestCase.super.setUp(); initApplication(); + ApplicationInfoImpl.setInPerformanceTest(isPerformanceTest()); + ourApplication.setDataProvider(LightPlatformTestCase.this); doSetup(new SimpleLightProjectDescriptor(getModuleType(), getProjectJDK()), configureLocalInspectionTools(), myAvailableInspectionTools); diff --git a/platform/testFramework/src/com/intellij/testFramework/PlatformTestCase.java b/platform/testFramework/src/com/intellij/testFramework/PlatformTestCase.java index 2fabebfb03bb..49be3c789f74 100644 --- a/platform/testFramework/src/com/intellij/testFramework/PlatformTestCase.java +++ b/platform/testFramework/src/com/intellij/testFramework/PlatformTestCase.java @@ -27,6 +27,7 @@ import com.intellij.openapi.application.ApplicationManager; import com.intellij.openapi.application.ModalityState; import com.intellij.openapi.application.Result; import com.intellij.openapi.application.WriteAction; +import com.intellij.openapi.application.impl.ApplicationInfoImpl; import com.intellij.openapi.command.CommandProcessor; import com.intellij.openapi.command.WriteCommandAction; import com.intellij.openapi.command.impl.UndoManagerImpl; @@ -48,8 +49,6 @@ import com.intellij.openapi.project.impl.ProjectManagerImpl; import com.intellij.openapi.project.impl.TooManyProjectLeakedException; import com.intellij.openapi.projectRoots.Sdk; import com.intellij.openapi.roots.ModuleRootModificationUtil; -import com.intellij.openapi.roots.impl.DirectoryIndex; -import com.intellij.openapi.roots.impl.DirectoryIndexImpl; import com.intellij.openapi.startup.StartupManager; import com.intellij.openapi.util.Disposer; import com.intellij.openapi.util.EmptyRunnable; @@ -136,13 +135,14 @@ public abstract class PlatformTestCase extends UsefulTestCase implements DataPro autodetectPlatformPrefix(); ourApplication = IdeaTestApplication.getInstance(getApplicationConfigDirPath()); ourApplication.setDataProvider(this); + ApplicationInfoImpl.setInPerformanceTest(isPerformanceTest()); if (firstTime) { cleanPersistedVFSContent(); } } - private static String[] PREFIX_CANDIDATES = new String[] { + private static final String[] PREFIX_CANDIDATES = { "AppCode", "CppIde", "CidrCommon", "Python", "PyCharmCore", "UltimateLangXml", "Idea" }; @@ -412,8 +412,6 @@ public abstract class PlatformTestCase extends UsefulTestCase implements DataPro } try { Project project = getProject(); - DirectoryIndexImpl directoryIndex = - project != null ? (DirectoryIndexImpl)DirectoryIndex.getInstance(project) : null; disposeProject(result); if (project != null) { @@ -789,7 +787,7 @@ public abstract class PlatformTestCase extends UsefulTestCase implements DataPro setContentOnDisk(temp, bom, content, charset); myFilesToDelete.add(temp); - final VirtualFile file = LocalFileSystem.getInstance().refreshAndFindFileByIoFile(temp); + final VirtualFile file = getVirtualFile(temp); assert file != null : temp; return file; } @@ -843,7 +841,7 @@ public abstract class PlatformTestCase extends UsefulTestCase implements DataPro protected static VirtualFile createChildData(@NotNull final VirtualFile dir, @NotNull @NonNls final String name) { return new WriteAction() { @Override - protected void run(Result result) throws Throwable { + protected void run(@NotNull Result result) throws Throwable { result.setResult(dir.createChildData(null, name)); } }.execute().throwException().getResultObject(); @@ -852,7 +850,7 @@ public abstract class PlatformTestCase extends UsefulTestCase implements DataPro protected static VirtualFile createChildDirectory(@NotNull final VirtualFile dir, @NotNull @NonNls final String name) { return new WriteAction() { @Override - protected void run(Result result) throws Throwable { + protected void run(@NotNull Result result) throws Throwable { result.setResult(dir.createChildDirectory(null, name)); } }.execute().throwException().getResultObject(); diff --git a/platform/testFramework/src/com/intellij/testFramework/UsefulTestCase.java b/platform/testFramework/src/com/intellij/testFramework/UsefulTestCase.java index 751a3b9e9538..306d7f76fd93 100644 --- a/platform/testFramework/src/com/intellij/testFramework/UsefulTestCase.java +++ b/platform/testFramework/src/com/intellij/testFramework/UsefulTestCase.java @@ -138,8 +138,6 @@ public abstract class UsefulTestCase extends TestCase { myTempDir = FileUtil.toSystemDependentName(ORIGINAL_TEMP_DIR + "/" + TEMP_DIR_MARKER + testName + "_"+ RNG.nextInt(1000)); FileUtil.resetCanonicalTempPathCache(myTempDir); } - //noinspection AssignmentToStaticFieldFromInstanceMethod - DocumentImpl.CHECK_DOCUMENT_CONSISTENCY = !isPerformanceTest(); } @Override