-
Bug
-
Resolution: Fixed
-
P2
-
5.0, 7u45
-
b124
-
x86
-
windows_xp, windows_7
-
Verified
Issue | Fix Version | Assignee | Priority | Status | Resolution | Resolved In Build |
---|---|---|---|---|---|---|
JDK-8163689 | 8u121 | Vadim Pakhnushev | P2 | Resolved | Fixed | b01 |
JDK-8158243 | 8u112 | Vadim Pakhnushev | P2 | Closed | Fixed | b01 |
JDK-8167815 | emb-8u121 | Vadim Pakhnushev | P2 | Resolved | Fixed | b01 |
1.5.0_06
1.4.2 build 1.4.2-b28
1.6.0-beta2-86
1.5.0_07
ADDITIONAL OS VERSION INFORMATION :
Microsoft Windows XP [Version 5.1.2600]
Microsoft Windows 2000 [Version 5.00.2195]
EXTRA RELEVANT SYSTEM CONFIGURATION :
Occurs on all versions of Windows on single headed machines which we have tested it on. On a double headed Windows XP machine it does not occur.
A DESCRIPTION OF THE PROBLEM :
The first time GraphicsDevice.getConfigurations() is called on a single header machine it takes 3 to 5 seconds. If it is called again on the same machine in a different Java session it takes slightly less time. If it is called again in the same Java session it takes a few milliseconds.
This has previously been reported in 2000 but the bugs are marked as "fixed". A 3 second delay does not sound like "fixed" to us.
STEPS TO FOLLOW TO REPRODUCE THE PROBLEM :
Run the program supplied which calls GraphicsDevice.getConfigurations().
EXPECTED VERSUS ACTUAL BEHAVIOR :
EXPECTED -
I would expect the program to print:
Starting....
Finished in 20 milliseconds
ACTUAL -
It actually prints:
Starting....
Finished in 3585 milliseconds
REPRODUCIBILITY :
This bug can be reproduced always.
---------- BEGIN SOURCE ----------
/**
* Program to demonstrate speed of GraphicsEnvironment.getConfigurations()
*/
import java.awt.* ;
public class Bug
{
public static void main(String args[])
{
GraphicsEnvironment ge = GraphicsEnvironment
.getLocalGraphicsEnvironment()
;
GraphicsDevice[] gs = ge.getScreenDevices();
for (int j = 0; j < gs.length; j++)
{
// Demonstrate problem:
// The first time that getConfigurations() is called
// it takes significant time.
// The second and subsequent calls in the same
// Java session are fast.
// Examples
// Windows 2000 1.7GHz Java 1.5.0_06 3355 ms
// Windows 2000 1.7GHz Java 1.4.2_08 3355 ms
// Windows XPSP2 2.4GHz Java 1.4.2 2700 ms
// Windows XPSP2 2.8GHz Java 1.5.0_06 3313 ms
// Windows 2000 1.0GHz Java 1.6.0-beta2-b86 3703ms
System.err.println("Starting....") ;
long startTime = System.currentTimeMillis() ;
GraphicsConfiguration[] gc = gs[j].getConfigurations();
System.err.println("Finished in "
+ (System.currentTimeMillis() - startTime)
+ " milliseconds"
) ;
}
}
}
---------- END SOURCE ----------
CUSTOMER SUBMITTED WORKAROUND :
Spin up a separate thread which Thread.sleep()s until the main startup has finished and then executes a GraphicsDevice.getConfigurations(). All subsequent calls now complete in a few milliseconds.
- backported by
-
JDK-8163689 GraphicsDevice.getConfigurations() is slow taking 3 or more seconds
- Resolved
-
JDK-8167815 GraphicsDevice.getConfigurations() is slow taking 3 or more seconds
- Resolved
-
JDK-8158243 GraphicsDevice.getConfigurations() is slow taking 3 or more seconds
- Closed
- duplicates
-
JDK-8019378 Win32GraphicsDevice.isPixFmtSupported[native]() extremely slow
- Closed
-
JDK-8019378 Win32GraphicsDevice.isPixFmtSupported[native]() extremely slow
- Closed
- relates to
-
JDK-4369234 GraphicsDevice.getConfigurations is very slow
- Resolved
-
JDK-8156185 JDK-8024858 (long tooltip delay) is not fixed but is easily fixed
- Resolved