IJPL-175104 toolbox: report FUS usages for 'Recent Projects' feature

GitOrigin-RevId: b01daa8502acfeecf1b29729fb2dafa2b3741b9e
This commit is contained in:
Aleksey Pivovarov
2025-06-18 19:55:59 +00:00
committed by intellij-monorepo-bot
parent 9d2efbcf02
commit fa0eceb82c
3 changed files with 26 additions and 7 deletions
@@ -8,6 +8,7 @@ import com.intellij.openapi.actionSystem.ActionUpdateThread
import com.intellij.openapi.actionSystem.AnAction
import com.intellij.openapi.actionSystem.AnActionEvent
import com.intellij.openapi.components.service
import com.intellij.openapi.diagnostic.logger
import com.intellij.openapi.extensions.ExtensionPointName
import com.intellij.openapi.project.DumbAware
import com.intellij.openapi.project.DumbAwareAction
@@ -25,6 +26,7 @@ import com.intellij.openapi.wm.impl.welcomeScreen.recentProjects.RecentProjectIt
import com.intellij.openapi.wm.impl.welcomeScreen.recentProjects.RecentProjectTreeItem
import com.intellij.ui.UIBundle
import com.intellij.util.concurrency.annotations.RequiresBlockingContext
import com.intellij.util.containers.forEachLoggingErrors
import org.jetbrains.annotations.ApiStatus
import javax.swing.Icon
@@ -234,6 +236,20 @@ open class RecentProjectListActionProvider {
}
}
@ApiStatus.Internal
fun countLocalProjects(): Int {
return RecentProjectsManagerBase.getInstanceEx().getRecentPaths().size
}
@ApiStatus.Internal
fun countProjectsFromProviders(): Int {
var sum = 0
EP.extensionList.forEachLoggingErrors(logger<RecentProjectListActionProvider>()) {
sum += it.getRecentProjects().size
}
return sum
}
/**
* Keep [projects] order intact, but insert [projectsFromEP] into the correct place if possible
*/
@@ -6,7 +6,6 @@ import com.intellij.ide.IdeBundle
import com.intellij.ide.RecentProjectListActionProvider
import com.intellij.ide.RecentProjectsManager
import com.intellij.ide.RecentProjectsManager.RecentProjectsChange
import com.intellij.ide.RecentProjectsManagerBase
import com.intellij.ide.dnd.DnDEvent
import com.intellij.ide.dnd.DnDNativeTarget
import com.intellij.ide.dnd.DnDSupport
@@ -92,9 +91,11 @@ internal class ProjectsTab(private val parentDisposable: Disposable) : DefaultWe
}
override fun buildComponent(): JComponent {
val recentPaths = RecentProjectsManagerBase.getInstanceEx().getRecentPaths()
WelcomeScreenCounterUsageCollector.reportWelcomeScreenShowed(recentPaths.size)
val promo = WelcomeScreenComponentFactory.getSinglePromotion(recentPaths.isEmpty())
val recentProjectsCount = RecentProjectListActionProvider.getInstance().countLocalProjects()
val providerRecentProjectsCount = RecentProjectListActionProvider.getInstance().countProjectsFromProviders()
WelcomeScreenCounterUsageCollector.reportWelcomeScreenShowed(recentProjectsCount, providerRecentProjectsCount)
val promo = WelcomeScreenComponentFactory.getSinglePromotion(recentProjectsCount == 0)
return panel {
customizeSpacingConfiguration(EmptySpacingConfiguration()) {
@@ -6,14 +6,16 @@ import com.intellij.internal.statistic.eventLog.events.EventFields
import com.intellij.internal.statistic.service.fus.collectors.CounterUsagesCollector
internal object WelcomeScreenCounterUsageCollector : CounterUsagesCollector() {
private val GROUP = EventLogGroup("welcome.screen", 2)
private val GROUP = EventLogGroup("welcome.screen", 3)
private val WELCOME_SCREEN_SHOWN = GROUP.registerEvent(
"projects.tab.created",
EventFields.BoundedInt("recent_paths_count", intArrayOf(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 20, 30, 50))
EventFields.BoundedInt("recent_paths_count", intArrayOf(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 20, 30, 50)),
EventFields.BoundedInt("provider_recent_projects_count", intArrayOf(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 20, 30, 50))
)
fun reportWelcomeScreenShowed(recentPathsCount: Int) = WELCOME_SCREEN_SHOWN.log(recentPathsCount)
fun reportWelcomeScreenShowed(recentPathsCount: Int, providerRecentProjectsCount: Int) =
WELCOME_SCREEN_SHOWN.log(recentPathsCount, providerRecentProjectsCount)
override fun getGroup(): EventLogGroup = GROUP
}