[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.
-phil.
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