From a27a1958d049084fa0079f3d006b872570dda964 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Christoph=20L=C3=A4ubrich?= Date: Tue, 8 Jul 2025 07:04:23 +0200 Subject: [PATCH] Make delays depending on available processors Currently we use a fixed delay for a given job priority, depending on the number of jobs running and other factors this can considerably delay some actions and make eclipse feel laggy. This now makes these values dependent on the number of CPUs installed in the machine, as we can assume more CPUs can do the work better in parallel without additional sleep delays. --- .../core/internal/jobs/JobManager.java | 24 ++++++++++++++----- 1 file changed, 18 insertions(+), 6 deletions(-) diff --git a/runtime/bundles/org.eclipse.core.jobs/src/org/eclipse/core/internal/jobs/JobManager.java b/runtime/bundles/org.eclipse.core.jobs/src/org/eclipse/core/internal/jobs/JobManager.java index b472d0214fe..15033649ce4 100644 --- a/runtime/bundles/org.eclipse.core.jobs/src/org/eclipse/core/internal/jobs/JobManager.java +++ b/runtime/bundles/org.eclipse.core.jobs/src/org/eclipse/core/internal/jobs/JobManager.java @@ -78,6 +78,19 @@ */ public class JobManager implements IJobManager, DebugOptionsListener { + + private static final int CORES = Runtime.getRuntime().availableProcessors(); + + private static final long DELAY_PRIORITY_INTERACTIVE = 0; + + private static final long DELAY_PRIORITY_DECORATE = 1000 / CORES; + + private static final long DELAY_PRIORITY_BUILD = 500 / CORES; + + private static final long DELAY_PRIORITY_LONG = 100 / CORES; + + private static final long DELAY_PRIORITY_SHORT = 50 / CORES; + private static final int NANOS_IN_MS = 1_000_000; /** @@ -618,18 +631,17 @@ public ISchedulingRule currentRule() { * tolerate waiting. */ private long delayFor(int priority) { - //these values may need to be tweaked based on machine speed switch (priority) { case Job.INTERACTIVE : - return 0L; + return DELAY_PRIORITY_INTERACTIVE; case Job.SHORT : - return 50L; + return DELAY_PRIORITY_SHORT; case Job.LONG : - return 100L; + return DELAY_PRIORITY_LONG; case Job.BUILD : - return 500L; + return DELAY_PRIORITY_BUILD; case Job.DECORATE : - return 1000L; + return DELAY_PRIORITY_DECORATE; default : Assert.isTrue(false, "Job has invalid priority: " + priority); //$NON-NLS-1$ return 0;