changeset 13743:8e8e54a1f0e3

8213119: [macos] java/awt/GraphicsDevice/CheckDisplayModes.java fails Reviewed-by: prr, jdv
author serb
date Mon, 16 Dec 2019 18:58:19 +0000
parents 11738c562638
children ccb11b167ba0
files src/macosx/native/sun/awt/CGraphicsDevice.m test/java/awt/GraphicsDevice/CheckDisplayModes.java
diffstat 2 files changed, 30 insertions(+), 26 deletions(-) [+]
line wrap: on
line diff
--- a/src/macosx/native/sun/awt/CGraphicsDevice.m	Wed Apr 13 16:05:31 2016 -0700
+++ b/src/macosx/native/sun/awt/CGraphicsDevice.m	Mon Dec 16 18:58:19 2019 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2012, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012, 2019, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -94,16 +94,18 @@
 static CGDisplayModeRef getBestModeForParameters(CFArrayRef allModes, int w, int h, int bpp, int refrate) {
     CGDisplayModeRef bestGuess = NULL;
     CFIndex numModes = CFArrayGetCount(allModes), n;
-    int thisBpp = 0;
+
     for(n = 0; n < numModes; n++ ) {
         CGDisplayModeRef cRef = (CGDisplayModeRef) CFArrayGetValueAtIndex(allModes, n);
         if(cRef == NULL) {
             continue;
         }
         CFStringRef modeString = CGDisplayModeCopyPixelEncoding(cRef);
-        thisBpp = getBPPFromModeString(modeString);
+        int thisBpp = getBPPFromModeString(modeString);
         CFRelease(modeString);
-        if (thisBpp != bpp || (int)CGDisplayModeGetHeight(cRef) != h || (int)CGDisplayModeGetWidth(cRef) != w) {
+        int thisH = (int)CGDisplayModeGetHeight(cRef);
+        int thisW = (int)CGDisplayModeGetWidth(cRef);
+        if (thisBpp != bpp || thisH != h || thisW != w) {
             // One of the key parameters does not match
             continue;
         }
@@ -114,11 +116,12 @@
 
         // Refresh rate might be 0 in display mode and we ask for specific display rate
         // but if we do not find exact match then 0 refresh rate might be just Ok
-        if (CGDisplayModeGetRefreshRate(cRef) == refrate) {
+        int thisRefrate = (int)CGDisplayModeGetRefreshRate(cRef);
+        if (thisRefrate == refrate) {
             // Exact match
             return cRef;
         }
-        if (CGDisplayModeGetRefreshRate(cRef) == 0) {
+        if (thisRefrate == 0) {
             // Not exactly what was asked for, but may fit our needs if we don't find an exact match
             bestGuess = cRef;
         }
--- a/test/java/awt/GraphicsDevice/CheckDisplayModes.java	Wed Apr 13 16:05:31 2016 -0700
+++ b/test/java/awt/GraphicsDevice/CheckDisplayModes.java	Mon Dec 16 18:58:19 2019 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 2019, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -23,7 +23,7 @@
 
 /*
  * @test
- * @bug 8007146
+ * @bug 8007146 8213119
  * @summary [macosx] Setting a display mode crashes JDK under VNC
  * @author Alexander Scherbatiy
  * @run main CheckDisplayModes
@@ -36,27 +36,28 @@
 
     public static void main(String[] args) {
         GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment();
-        GraphicsDevice graphicDevice = ge.getDefaultScreenDevice();
-        if (!graphicDevice.isDisplayChangeSupported()) {
-            System.err.println("Display mode change is not supported on this host. Test is considered passed.");
-            return;
-        }
-        DisplayMode defaultDisplayMode = graphicDevice.getDisplayMode();
-        checkDisplayMode(defaultDisplayMode);
-        graphicDevice.setDisplayMode(defaultDisplayMode);
+        for (GraphicsDevice graphicDevice : ge.getScreenDevices()) {
+            if (!graphicDevice.isDisplayChangeSupported()) {
+                System.err.println("Display mode change is not supported on this host. Test is considered passed.");
+                continue;
+            }
+            DisplayMode defaultDisplayMode = graphicDevice.getDisplayMode();
+            checkDisplayMode(defaultDisplayMode);
+            graphicDevice.setDisplayMode(defaultDisplayMode);
 
-        DisplayMode[] displayModes = graphicDevice.getDisplayModes();
-        boolean isDefaultDisplayModeIncluded = false;
-        for (DisplayMode displayMode : displayModes) {
-            checkDisplayMode(displayMode);
-            graphicDevice.setDisplayMode(displayMode);
-            if (defaultDisplayMode.equals(displayMode)) {
-                isDefaultDisplayModeIncluded = true;
+            DisplayMode[] displayModes = graphicDevice.getDisplayModes();
+            boolean isDefaultDisplayModeIncluded = false;
+            for (DisplayMode displayMode : displayModes) {
+                checkDisplayMode(displayMode);
+                graphicDevice.setDisplayMode(displayMode);
+                if (defaultDisplayMode.equals(displayMode)) {
+                    isDefaultDisplayModeIncluded = true;
+                }
             }
-        }
 
-        if (!isDefaultDisplayModeIncluded) {
-            throw new RuntimeException("Default display mode is not included");
+            if (!isDefaultDisplayModeIncluded) {
+                throw new RuntimeException("Default display mode is not included");
+            }
         }
     }