Bug 578933 - avoid repeated Thread.setPriority

setPriority takes ~500ns on windows

Change-Id: I02ea35a7a8644ea9c8bfd2addb0a0c63340eb350
Signed-off-by: Joerg Kubitz <jkubitz-eclipse@gmx.de>
Reviewed-on: https://git.eclipse.org/r/c/platform/eclipse.platform.runtime/+/191136
Tested-by: Platform Bot <platform-bot@eclipse.org>
diff --git a/bundles/org.eclipse.core.jobs/META-INF/MANIFEST.MF b/bundles/org.eclipse.core.jobs/META-INF/MANIFEST.MF
index c17d1be..63fd415 100644
--- a/bundles/org.eclipse.core.jobs/META-INF/MANIFEST.MF
+++ b/bundles/org.eclipse.core.jobs/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@
 Bundle-ManifestVersion: 2
 Bundle-Name: %pluginName
 Bundle-SymbolicName: org.eclipse.core.jobs; singleton:=true
-Bundle-Version: 3.12.100.qualifier
+Bundle-Version: 3.12.200.qualifier
 Bundle-Vendor: %providerName
 Bundle-Localization: plugin
 Export-Package: org.eclipse.core.internal.jobs;x-internal:=true,
diff --git a/bundles/org.eclipse.core.jobs/pom.xml b/bundles/org.eclipse.core.jobs/pom.xml
index 443b0d6..d8119be 100644
--- a/bundles/org.eclipse.core.jobs/pom.xml
+++ b/bundles/org.eclipse.core.jobs/pom.xml
@@ -20,7 +20,7 @@
   </parent>
   <groupId>org.eclipse.core</groupId>
   <artifactId>org.eclipse.core.jobs</artifactId>
-  <version>3.12.100-SNAPSHOT</version>
+  <version>3.12.200-SNAPSHOT</version>
   <packaging>eclipse-plugin</packaging>
   <properties>
     <code.ignoredWarnings>-warn:-deprecation,raw,unchecked</code.ignoredWarnings>
diff --git a/bundles/org.eclipse.core.jobs/src/org/eclipse/core/internal/jobs/Worker.java b/bundles/org.eclipse.core.jobs/src/org/eclipse/core/internal/jobs/Worker.java
index 0911648..3a73d1c 100644
--- a/bundles/org.eclipse.core.jobs/src/org/eclipse/core/internal/jobs/Worker.java
+++ b/bundles/org.eclipse.core.jobs/src/org/eclipse/core/internal/jobs/Worker.java
@@ -53,7 +53,7 @@
 
 	@Override
 	public void run() {
-		setPriority(Thread.NORM_PRIORITY);
+		setNormPriority();
 		try {
 			while ((currentJob = pool.startJob(this)) != null) {
 				IStatus result = Status.OK_STATUS;
@@ -84,7 +84,7 @@
 					currentJob = null;
 					setName(generalName);
 					// reset thread priority in case job changed it
-					setPriority(Thread.NORM_PRIORITY);
+					setNormPriority();
 				}
 			}
 		} catch (Throwable t) {
@@ -95,6 +95,13 @@
 		}
 	}
 
+	private void setNormPriority() {
+		if (getPriority() != Thread.NORM_PRIORITY) {
+			// Setting priority on some platforms may cause high overhead
+			setPriority(Thread.NORM_PRIORITY);
+		}
+	}
+
 	private String getJobName() {
 		String name = currentJob.getName();
 		if (name == null || name.trim().isEmpty()) {