[fus] IJPL-944 Add dumb flag to Run Configuration was started event

GitOrigin-RevId: b9076a1e9a6029326e9bd45963142a74544d4102
This commit is contained in:
Yuriy Artamonov
2024-04-29 21:13:23 +02:00
committed by intellij-monorepo-bot
parent 53d0dbe426
commit 25f08fe587
4 changed files with 45 additions and 28 deletions

View File

@@ -1424,8 +1424,8 @@ f:com.intellij.execution.impl.statistics.RunConfigurationUsageTriggerCollector
- <init>():V
- getGroup():com.intellij.internal.statistic.eventLog.EventLogGroup
- s:logProcessFinished(com.intellij.internal.statistic.StructuredIdeActivity,com.intellij.execution.impl.statistics.RunConfigurationUsageTriggerCollector$RunConfigurationFinishType):V
- s:trigger(com.intellij.openapi.project.Project,com.intellij.execution.configurations.ConfigurationFactory,com.intellij.execution.Executor,com.intellij.execution.configurations.RunConfiguration,Z,Z):com.intellij.internal.statistic.StructuredIdeActivity
- s:triggerWithParent(com.intellij.internal.statistic.StructuredIdeActivity,com.intellij.openapi.project.Project,com.intellij.execution.configurations.ConfigurationFactory,com.intellij.execution.Executor,com.intellij.execution.configurations.RunConfiguration,Z,Z):com.intellij.internal.statistic.StructuredIdeActivity
- s:trigger(com.intellij.openapi.project.Project,com.intellij.execution.configurations.ConfigurationFactory,com.intellij.execution.Executor,com.intellij.execution.configurations.RunConfiguration,Z,Z,Z):com.intellij.internal.statistic.StructuredIdeActivity
- s:triggerWithParent(com.intellij.internal.statistic.StructuredIdeActivity,com.intellij.openapi.project.Project,com.intellij.execution.configurations.ConfigurationFactory,com.intellij.execution.Executor,com.intellij.execution.configurations.RunConfiguration,Z,Z,Z):com.intellij.internal.statistic.StructuredIdeActivity
f:com.intellij.execution.impl.statistics.RunConfigurationUsageTriggerCollector$RunConfigurationExecutorUtilValidator
- com.intellij.internal.statistic.eventLog.validator.rules.FUSRule
- com.intellij.internal.statistic.eventLog.validator.rules.PerformanceCareRule

View File

@@ -919,19 +919,24 @@ fun RunnerAndConfigurationSettings.isOfSameType(runnerAndConfigurationSettings:
}
private fun triggerUsage(environment: ExecutionEnvironment): StructuredIdeActivity? {
val isDumb = DumbService.isDumb(environment.project)
val runConfiguration = environment.runnerAndConfigurationSettings?.configuration
val configurationFactory = runConfiguration?.factory ?: return null
val isRerun = environment.getUserData(ExecutionManagerImpl.REPORT_NEXT_START_AS_RERUN) == true
// The 'Rerun' button in the Run tool window will reuse the same ExecutionEnvironment object again.
// If there are no processes to stop, the REPORT_NEXT_START_AS_RERUN won't be set in restartRunProfile(), so need to set it here.
if (!isRerun) environment.putUserData(ExecutionManagerImpl.REPORT_NEXT_START_AS_RERUN, true)
if (!isRerun) {
environment.putUserData(ExecutionManagerImpl.REPORT_NEXT_START_AS_RERUN, true)
}
return when(val parentIdeActivity = environment.getUserData(ExecutionManagerImpl.PARENT_PROFILE_IDE_ACTIVITY)) {
null -> RunConfigurationUsageTriggerCollector
.trigger(environment.project, configurationFactory, environment.executor, runConfiguration, isRerun, environment.isRunningCurrentFile)
.trigger(environment.project, configurationFactory, environment.executor, runConfiguration, isRerun,
environment.isRunningCurrentFile, isDumb)
else -> RunConfigurationUsageTriggerCollector
.triggerWithParent(parentIdeActivity, environment.project, configurationFactory, environment.executor, runConfiguration, isRerun,
environment.isRunningCurrentFile)
environment.isRunningCurrentFile, isDumb)
}
}

View File

@@ -4,7 +4,6 @@ package com.intellij.execution.impl.statistics;
import com.intellij.execution.EnvFilesOptions;
import com.intellij.execution.Executor;
import com.intellij.execution.configurations.ConfigurationFactory;
import com.intellij.execution.configurations.ConfigurationType;
import com.intellij.execution.configurations.RunConfiguration;
import com.intellij.execution.executors.ExecutorGroup;
import com.intellij.execution.target.*;
@@ -33,13 +32,15 @@ import static com.intellij.execution.impl.statistics.RunConfigurationTypeUsagesC
public final class RunConfigurationUsageTriggerCollector extends CounterUsagesCollector {
public static final String GROUP_NAME = "run.configuration.exec";
private static final EventLogGroup GROUP = new EventLogGroup(GROUP_NAME, 74);
private static final EventLogGroup GROUP = new EventLogGroup(GROUP_NAME, 75);
public static final IntEventField ALTERNATIVE_JRE_VERSION = EventFields.Int("alternative_jre_version");
private static final ObjectEventField ADDITIONAL_FIELD = EventFields.createAdditionalDataField(GROUP_NAME, "started");
private static final StringEventField EXECUTOR = EventFields.StringValidatedByCustomRule("executor",
RunConfigurationExecutorUtilValidator.class);
private static final BooleanEventField IS_RERUN = EventFields.Boolean("is_rerun");
private static final BooleanEventField IS_RUNNING_CURRENT_FILE = EventFields.Boolean("is_running_current_file");
private static final BooleanEventField IS_DUMB_MODE = EventFields.Boolean("dumb");
/**
* The type of the target the run configuration is being executed with. {@code null} stands for the local machine target.
@@ -54,18 +55,23 @@ public final class RunConfigurationUsageTriggerCollector extends CounterUsagesCo
private static final EnumEventField<RunConfigurationFinishType> FINISH_TYPE =
EventFields.Enum("finish_type", RunConfigurationFinishType.class);
private static final IdeActivityDefinition ACTIVITY_GROUP = GROUP.registerIdeActivity(null,
new EventField<?>[]{ADDITIONAL_FIELD, EXECUTOR,
IS_RERUN,
IS_RUNNING_CURRENT_FILE,
TARGET,
RunConfigurationTypeUsagesCollector.FACTORY_FIELD,
RunConfigurationTypeUsagesCollector.ID_FIELD,
EventFields.PluginInfo,
ENV_FILES_COUNT},
new EventField<?>[]{FINISH_TYPE},
null,
true);
private static final IdeActivityDefinition ACTIVITY_GROUP = GROUP.registerIdeActivity(
null,
new EventField<?>[]{
ADDITIONAL_FIELD,
EXECUTOR,
IS_RERUN,
IS_RUNNING_CURRENT_FILE,
TARGET,
RunConfigurationTypeUsagesCollector.FACTORY_FIELD,
RunConfigurationTypeUsagesCollector.ID_FIELD,
EventFields.PluginInfo,
ENV_FILES_COUNT,
IS_DUMB_MODE
},
new EventField<?>[]{FINISH_TYPE},
null,
true);
public static final VarargEventId UI_SHOWN_STAGE = ACTIVITY_GROUP.registerStage("ui.shown");
@@ -79,10 +85,11 @@ public final class RunConfigurationUsageTriggerCollector extends CounterUsagesCo
@NotNull Executor executor,
@Nullable RunConfiguration runConfiguration,
boolean isRerun,
boolean isRunningCurrentFile) {
boolean isRunningCurrentFile,
boolean isDumb) {
return ACTIVITY_GROUP
.startedAsync(project, () -> ReadAction.nonBlocking(
() -> buildContext(project, factory, executor, runConfiguration, isRerun, isRunningCurrentFile)
() -> buildContext(project, factory, executor, runConfiguration, isRerun, isRunningCurrentFile, isDumb)
)
.expireWith(project)
.submit(NonUrgentExecutor.getInstance()));
@@ -94,10 +101,11 @@ public final class RunConfigurationUsageTriggerCollector extends CounterUsagesCo
@NotNull Executor executor,
@Nullable RunConfiguration runConfiguration,
boolean isRerun,
boolean isRunningCurrentFile) {
boolean isRunningCurrentFile,
boolean isDumb) {
return ACTIVITY_GROUP
.startedAsyncWithParent(project, parentActivity, () -> ReadAction.nonBlocking(
() -> buildContext(project, factory, executor, runConfiguration, isRerun, isRunningCurrentFile)
() -> buildContext(project, factory, executor, runConfiguration, isRerun, isRunningCurrentFile, isDumb)
)
.expireWith(project)
.submit(NonUrgentExecutor.getInstance()));
@@ -108,13 +116,15 @@ public final class RunConfigurationUsageTriggerCollector extends CounterUsagesCo
@NotNull Executor executor,
@Nullable RunConfiguration runConfiguration,
boolean isRerun,
boolean isRunningCurrentFile) {
final ConfigurationType configurationType = factory.getType();
List<EventPair<?>> eventPairs = createFeatureUsageData(configurationType, factory);
boolean isRunningCurrentFile,
boolean isDumb) {
List<EventPair<?>> eventPairs = createFeatureUsageData(factory.getType(), factory);
ExecutorGroup<?> group = ExecutorGroup.getGroupIfProxy(executor);
eventPairs.add(EXECUTOR.with(group != null ? group.getId() : executor.getId()));
eventPairs.add(IS_RERUN.with(isRerun));
eventPairs.add(IS_RUNNING_CURRENT_FILE.with(isRunningCurrentFile));
eventPairs.add(IS_DUMB_MODE.with(isDumb));
if (runConfiguration instanceof FusAwareRunConfiguration) {
List<EventPair<?>> additionalData = ((FusAwareRunConfiguration)runConfiguration).getAdditionalUsageData();
ObjectEventData objectEventData = new ObjectEventData(additionalData);
@@ -163,7 +173,7 @@ public final class RunConfigurationUsageTriggerCollector extends CounterUsagesCo
@Override
protected @NotNull ValidationResultType doValidate(@NotNull String data, @NotNull EventContext context) {
for (Executor executor : Executor.EXECUTOR_EXTENSION_NAME.getExtensions()) {
for (Executor executor : Executor.EXECUTOR_EXTENSION_NAME.getExtensionList()) {
if (StringUtil.equals(executor.getId(), data)) {
final PluginInfo info = PluginInfoDetectorKt.getPluginInfo(executor.getClass());
return info.isSafeToReport() ? ValidationResultType.ACCEPTED : ValidationResultType.THIRD_PARTY;

View File

@@ -12,6 +12,7 @@ import com.intellij.openapi.wm.ToolWindowId
import com.intellij.execution.multilaunch.execution.ExecutionMode
import com.intellij.execution.multilaunch.execution.ExecutionEngine
import com.intellij.execution.multilaunch.execution.ExecutionSessionManager
import com.intellij.openapi.project.DumbService
import com.intellij.openapi.rd.util.lifetime
import com.jetbrains.rd.util.lifetime.isAlive
@@ -20,10 +21,11 @@ class MultiLaunchProfileState(
private val project: Project
) : RunProfileState {
override fun execute(executor: Executor?, runner: ProgramRunner<*>): ExecutionResult? {
val isDumb = DumbService.isDumb(project)
val factory = configuration.factory ?: throw CantRunException("factory is null")
executor ?: throw CantRunException("executor is null")
project.lifetime.launchBackground {
val activity = RunConfigurationUsageTriggerCollector.trigger(project, factory, executor, configuration, checkRunning(), false)
val activity = RunConfigurationUsageTriggerCollector.trigger(project, factory, executor, configuration, checkRunning(), false, isDumb)
ExecutionEngine.getInstance(project).execute(configuration, getExecutionMode(executor), activity)
RunConfigurationUsageTriggerCollector.logProcessFinished(activity, RunConfigurationUsageTriggerCollector.RunConfigurationFinishType.UNKNOWN)
}