[OpenJDK 2D-Dev] <Swing Dev> [14] RFR: JDK-8223158: Docked MacBook cannot start any Java Swing applications

Phil Race philip.race at oracle.com
Wed Oct 9 16:01:04 UTC 2019

So this means your speculation below that it was needed for the main display
turns out to be untrue and we can definitely just drop it ?

On 9/25/19 11:13 PM, Prasanta Sadhukhan wrote:
> Hi Phil,
> On 25-Sep-19 9:58 PM, Philip Race wrote:
>> What is the implication of not having glMask ? If we don't need it, 
>> why specify it at all ?
> I guess we need it for displaying on main display.

In that case, OK. this simplifies things, but I still don't understand why
when what we are doing looks to be correct that the call fails.


On 10/9/19 1:06 AM, Prasanta Sadhukhan wrote:
> Hi Sergey,
> On 27-Sep-19 2:58 AM, Sergey Bylokhov wrote:
>> Hi, Prasanta.
>> On 9/25/19 11:13 pm, Prasanta Sadhukhan wrote:
>>>> 2) I guess we don't need to free "attrs" or "attrs1" since it is 
>>>> stack allocated ..
>>>> Unfortunate that we have to repeat the entire initialisation minus 
>>>> glMask.
>>>> Can you think of a better way to do this ?
>>> As per 
>>> https://developer.apple.com/documentation/appkit/nsopenglpixelformat/1436219-initwithattributes?language=objc
>>> |/* Check if initWithAttributes succeeded. */ if(pixFmt == nil) { /* 
>>> initWithAttributes failed. Try to alloc/init with a different list 
>>> of attributes. */ } it is appropriate to try with another list, 
>>> which is what I tried here. Regards Prasanta |
>> NSOpenGLPFAScreenMask attribute and its usage it is quite 
>> interesting. It is used only once
>> mostly at startup to initialize the "sharedPixelFormat" and 
>> "sharedContext". Later we create
>> context per GraphicsConfig on top of these "sharedPixelFormat" and 
>> "sharedContext".
>> In the single monitor configuration this logic is clear, we request 
>> "sharedPixelFormat"
>> which supports "NSOpenGLPFAScreenMask" for the main display and it 
>> just work.
>> But how it should work when the new screen will be attached 
>> dynamically, and/or old
>> screen for which we requested NSOpenGLPFAScreenMask will be detached.
>> For example in the test case for this bug:
>>  - If the screen via dock is attached before start of the app, we get 
>> an exception because
>>    we cannot initialize the "sharedContext".
>>  - If the screen via dock is attached after start of the app, it 
>> works, right?
> Yes, since we do not have the required docked hardware, had to ask 
> customer to test this and they confirm app does work if screen via 
> dock is attached after they start the app.
>> It looks like we "ignore" this attribute most of the time in the 
>> multi-monitor config,
>> probably we can drop if completely?
> Modified webrev ignoring this NSOpenGLPFAScreenMask attribute. Normal 
> working on primary display is not affected and I have given a fix to 
> the customer to test in their environment and they confirmed it is 
> working for them with external monitor.
> http://cr.openjdk.java.net/~psadhukhan/8223158/webrev.2/
> Regards
> Prasanta
>>>> -phil.
>>>> On 9/25/19, 3:49 AM, Prasanta Sadhukhan wrote:
>>>>> Hi All,
>>>>> Please review a fix for an issue where it is seen that if a 
>>>>> MacBookPro is attached to an external monitor via dock and macbook 
>>>>> lid is closed,
>>>>> no Java swing applications will start.
>>>>> It was found 
>>>>> GraphicsEnvironment.getLocalGraphicsEnvironment().getDefaultScreenDevice().getDefaultConfiguration() 
>>>>> is returning null in this particular setup.
>>>>> Since it was difficult to reproduce locally, enabling tracing 
>>>>> reveals that CGLGraphicsConfig#getCGLConfigInfo() was failing in 
>>>>> NSOpenGLPixelFormat.initWithAttributes()
>>>>> Appkit documentation 
>>>>> https://developer.apple.com/documentation/appkit/nsopenglpixelformat/1436219-initwithattributes?language=objc
>>>>> says that it will return "|nil| if an object with the desired 
>>>>> attributes could not be initialized".
>>>>> Now, when the main display is closed, the
>>>>> CGDisplayIDToOpenGLDisplayMask(displayID)
>>>>> is returning 2 as glMask which when passed as an attribute to 
>>>>> NSOpenGLPixelFormat, it fails to initialize.
>>>>> Normally, with main Display being used, glMask is 1.
>>>>> Proposed fix is to see if first initialization fails, then retry 
>>>>> initialization without the offending glMask value for 
>>>>> NSOpenGLPFAScreenMask attributes,
>>>>> as documentation 
>>>>> https://developer.apple.com/documentation/appkit/1436213-opengl_pixel_format_attributes/nsopenglpfascreenmask?language=objc
>>>>> says "All screens specified in the bit mask are guaranteed to be 
>>>>> supported by the pixel format.", so if it is not guranteed to be 
>>>>> supported, initAttributes() might fail.
>>>>> Bug: https://bugs.openjdk.java.net/browse/JDK-8223158
>>>>> webrev: http://cr.openjdk.java.net/~psadhukhan/8223158/webrev.0/
>>>>> Regards
>>>>> Prasanta

More information about the 2d-dev mailing list