diff --git a/java/compiler/charts/src/com/intellij/java/compiler/charts/CompilationChartsProjectActivity.kt b/java/compiler/charts/src/com/intellij/java/compiler/charts/CompilationChartsProjectActivity.kt index a42ce0719ea8..2f8d5a40b992 100644 --- a/java/compiler/charts/src/com/intellij/java/compiler/charts/CompilationChartsProjectActivity.kt +++ b/java/compiler/charts/src/com/intellij/java/compiler/charts/CompilationChartsProjectActivity.kt @@ -45,7 +45,7 @@ class CompilationChartsProjectActivity : ProjectActivity { val title = event.buildDescriptor.title.lowercase() if (title.contains("up-to-date") || title.startsWith("worksheet")) return@BuildProgressListener - CompilationChartsBuildEvent(project, view, buildId).also { chartEvent -> + CompilationChartsBuildEvent(project, view, buildId, disposable).also { chartEvent -> handler.addState(chartEvent) } } diff --git a/java/compiler/charts/src/com/intellij/java/compiler/charts/CompilationChartsViewModel.kt b/java/compiler/charts/src/com/intellij/java/compiler/charts/CompilationChartsViewModel.kt index ee21e94773ed..c33935a135ec 100644 --- a/java/compiler/charts/src/com/intellij/java/compiler/charts/CompilationChartsViewModel.kt +++ b/java/compiler/charts/src/com/intellij/java/compiler/charts/CompilationChartsViewModel.kt @@ -2,6 +2,7 @@ package com.intellij.java.compiler.charts import com.intellij.java.compiler.charts.CompilationChartsViewModel.Modules.EventKey +import com.intellij.openapi.Disposable import com.jetbrains.rd.framework.impl.RdList import com.jetbrains.rd.framework.impl.RdMap import com.jetbrains.rd.framework.impl.RdProperty @@ -14,7 +15,7 @@ import java.util.function.Predicate import kotlin.math.roundToLong -class CompilationChartsViewModel(val lifetime: Lifetime) { +class CompilationChartsViewModel(val lifetime: Lifetime, val disposable: Disposable) { val modules: Modules = Modules(Long.MAX_VALUE, 0, RdMap()) val statistics: Statistics = Statistics() val cpuMemory: RdProperty = RdProperty(CpuMemoryStatisticsType.MEMORY) diff --git a/java/compiler/charts/src/com/intellij/java/compiler/charts/ui/CompilationChartsBuildEvent.kt b/java/compiler/charts/src/com/intellij/java/compiler/charts/ui/CompilationChartsBuildEvent.kt index 51bab5216940..c8a8a9864b92 100644 --- a/java/compiler/charts/src/com/intellij/java/compiler/charts/ui/CompilationChartsBuildEvent.kt +++ b/java/compiler/charts/src/com/intellij/java/compiler/charts/ui/CompilationChartsBuildEvent.kt @@ -9,17 +9,18 @@ import com.intellij.execution.ui.ExecutionConsole import com.intellij.icons.AllIcons import com.intellij.java.compiler.charts.CompilationChartsBundle import com.intellij.java.compiler.charts.CompilationChartsViewModel +import com.intellij.openapi.Disposable import com.intellij.openapi.actionSystem.ActionGroup import com.intellij.openapi.project.Project import com.intellij.openapi.rd.createLifetime import javax.swing.Icon import javax.swing.JComponent -class CompilationChartsBuildEvent(project: Project, val view: BuildViewManager, val buildId: Any) : +class CompilationChartsBuildEvent(project: Project, val view: BuildViewManager, val buildId: Any, disposable: Disposable) : AbstractBuildEvent(Any(), buildId, System.currentTimeMillis(), CompilationChartsBundle.message("charts.tab.name")), PresentableBuildEvent { - private val console: CompilationChartsExecutionConsole by lazy { CompilationChartsExecutionConsole(project) } + private val console: CompilationChartsExecutionConsole by lazy { CompilationChartsExecutionConsole(project, disposable) } override fun getPresentationData(): BuildEventPresentationData = CompilationChartsPresentationData(console) @@ -33,8 +34,8 @@ class CompilationChartsBuildEvent(project: Project, val view: BuildViewManager, override fun consoleToolbarActions(): ActionGroup? = null } - private class CompilationChartsExecutionConsole(project: Project) : ExecutionConsole { - val vm: CompilationChartsViewModel = CompilationChartsViewModel(this.createLifetime()) + private class CompilationChartsExecutionConsole(project: Project, disposable: Disposable) : ExecutionConsole { + val vm: CompilationChartsViewModel = CompilationChartsViewModel(this.createLifetime(), disposable) private val _component: CompilationChartsView by lazy { CompilationChartsView(project, vm) } diff --git a/java/compiler/charts/src/com/intellij/java/compiler/charts/ui/CompilationChartsDiagramsComponent.kt b/java/compiler/charts/src/com/intellij/java/compiler/charts/ui/CompilationChartsDiagramsComponent.kt index 84c440e9a036..b6b4a593f3f9 100644 --- a/java/compiler/charts/src/com/intellij/java/compiler/charts/ui/CompilationChartsDiagramsComponent.kt +++ b/java/compiler/charts/src/com/intellij/java/compiler/charts/ui/CompilationChartsDiagramsComponent.kt @@ -7,8 +7,11 @@ import com.intellij.java.compiler.charts.CompilationChartsViewModel.CpuMemorySta import com.intellij.java.compiler.charts.CompilationChartsViewModel.CpuMemoryStatisticsType.CPU import com.intellij.java.compiler.charts.CompilationChartsViewModel.CpuMemoryStatisticsType.MEMORY import com.intellij.java.compiler.charts.ui.CompilationChartsModuleInfo.CompilationChartsUsageInfo +import com.intellij.openapi.application.ApplicationManager +import com.intellij.openapi.editor.colors.EditorColorsListener import com.intellij.openapi.editor.colors.EditorColorsManager import com.intellij.openapi.editor.colors.EditorColorsScheme +import com.intellij.openapi.util.Disposer import com.intellij.ui.components.JBPanelWithEmptyText import com.intellij.ui.components.Magnificator import com.intellij.util.concurrency.AppExecutorUtil @@ -119,12 +122,16 @@ class CompilationChartsDiagramsComponent( usageInfo = CompilationChartsUsageInfo(this, charts, zoom) addMouseMotionListener(usageInfo) + ApplicationManager.getApplication().getMessageBus().connect(vm.disposable) + .subscribe(EditorColorsManager.TOPIC, EditorColorsListener { scheme -> smartDraw(true, false) }) + putClientProperty(Magnificator.CLIENT_PROPERTY_KEY, object : Magnificator { override fun magnify(magnification: Double, at: Point): Point = zoom.adjust(viewport, at.x, magnification) }) AppExecutorUtil.createBoundedScheduledExecutorService("Compilation charts component", 1) .scheduleWithFixedDelay({ if (hasNewData()) smartDraw() }, 0, Settings.Refresh.timeout, Settings.Refresh.unit) + .also { feature -> Disposer.register(vm.disposable) { -> feature.cancel(true) } } } internal fun cleanCache() {