diff --git a/java/debugger/impl/src/com/intellij/debugger/collections/visualizer/CollectionVisualizerEvaluator.kt b/java/debugger/impl/src/com/intellij/debugger/collections/visualizer/CollectionVisualizerEvaluator.kt index 711530039c1f..62f07bc77897 100644 --- a/java/debugger/impl/src/com/intellij/debugger/collections/visualizer/CollectionVisualizerEvaluator.kt +++ b/java/debugger/impl/src/com/intellij/debugger/collections/visualizer/CollectionVisualizerEvaluator.kt @@ -52,6 +52,7 @@ class CollectionVisualizerEvaluator(private val visualizer: CollectionVisualizer disposeOnResume(evaluationContext, scope) closeOnEsc() show() + CollectionVisualizerStatisticsCollector.reportShown(project) } } } @@ -64,14 +65,21 @@ class CollectionVisualizerEvaluator(private val visualizer: CollectionVisualizer evaluationContext.debugProcess.addDebugProcessListener(object : DebugProcessListener { override fun resumed(suspendContext: SuspendContext?) { if (affectedByResume(suspendContext)) { - close() - scope.cancel() + CollectionVisualizerStatisticsCollector.reportClosed(evaluationContext.project, VisualizerClosedCause.RESUME) + doClose() } } override fun processDetached(process: DebugProcess, closedByUser: Boolean) { + val cause = if (closedByUser) VisualizerClosedCause.DETACH_MANUAL else VisualizerClosedCause.DETACH_AUTO + CollectionVisualizerStatisticsCollector.reportClosed(evaluationContext.project, cause) + doClose() + } + + private fun doClose() { close() scope.cancel() + evaluationContext.debugProcess.removeDebugProcessListener(this) } // maximum conservatism -- better close more popups than make them leak diff --git a/java/debugger/impl/src/com/intellij/debugger/collections/visualizer/CollectionVisualizerStatisticsCollector.kt b/java/debugger/impl/src/com/intellij/debugger/collections/visualizer/CollectionVisualizerStatisticsCollector.kt new file mode 100644 index 000000000000..8b18002a0b21 --- /dev/null +++ b/java/debugger/impl/src/com/intellij/debugger/collections/visualizer/CollectionVisualizerStatisticsCollector.kt @@ -0,0 +1,25 @@ +// Copyright 2000-2024 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license. +package com.intellij.debugger.collections.visualizer + +import com.intellij.internal.statistic.eventLog.EventLogGroup +import com.intellij.internal.statistic.eventLog.events.EventFields +import com.intellij.internal.statistic.service.fus.collectors.CounterUsagesCollector +import com.intellij.openapi.project.Project + +internal object CollectionVisualizerStatisticsCollector : CounterUsagesCollector() { + + private val GROUP = EventLogGroup("debugger.collection.visualizer", 1) + private val closedEvent = GROUP.registerEvent("closed", EventFields.Enum("cause", VisualizerClosedCause::class.java)) + private val shownEvent = GROUP.registerEvent("shown") + + fun reportShown(project: Project) = shownEvent.log(project) + fun reportClosed(project: Project, cause: VisualizerClosedCause) = closedEvent.log(project, cause) + + override fun getGroup(): EventLogGroup = GROUP +} + +enum class VisualizerClosedCause { + RESUME, + DETACH_AUTO, + DETACH_MANUAL, +} \ No newline at end of file diff --git a/java/java-impl/src/META-INF/JavaPlugin.xml b/java/java-impl/src/META-INF/JavaPlugin.xml index 0970a369a9d1..fff73139b0a0 100644 --- a/java/java-impl/src/META-INF/JavaPlugin.xml +++ b/java/java-impl/src/META-INF/JavaPlugin.xml @@ -575,6 +575,7 @@ +