[java, compilation-charts] Add disposable parameter to manage resource lifecycle

GitOrigin-RevId: 4435085cf1b3c1b072ef4730cffb72f7052bf08a
This commit is contained in:
Aleksey Dobrynin
2024-10-09 10:18:11 +02:00
committed by intellij-monorepo-bot
parent e9cfc590d4
commit e041d31e84
4 changed files with 15 additions and 6 deletions

View File

@@ -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)
}
}

View File

@@ -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<CpuMemoryStatisticsType> = RdProperty(CpuMemoryStatisticsType.MEMORY)

View File

@@ -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)
}

View File

@@ -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() {