[8] Please review my fix for 7124247: [macosx] Implement GraphicsDevice.setDisplayMode()
Anthony Petrov
anthony.petrov at oracle.com
Tue Jun 5 08:49:53 PDT 2012
Code replication allows for fixing a bug in one place and forgetting
about it in another. Extracting common code in functions prevents such
issues.
Also, in this particular case we would benefit from caching a method ID
only once instead of having two copies of it.
--
best regards,
Anthony
On 6/5/2012 7:29 PM, Alexander Zuev wrote:
> Yes, they are similar, but making a new function for the 8 lines of
> code? Don't think it's worth it.
>
> With best regards,
> Alex
>
> On 6/5/12 18:38, Anthony Petrov wrote:
>> Hi Alex,
>>
>> The code at lines 163-171 and 202-209 is very similar, and I believe
>> it can be extracted into a separate utility function.
>>
>> --
>> best regards,
>> Anthony
>>
>> On 6/5/2012 5:46 PM, Alexander Zuev wrote:
>>> Yet another version of the webrev - fixed some typos in comments
>>> (thanks Scott Palmer) and
>>> added updating full screen window size if we are currently in full
>>> screen mode.
>>>
>>> Webrev is here:
>>> http://cr.openjdk.java.net/~kizune/7124247/jdk8/webrev.03
>>>
>>> With best regards,
>>> Alex
>>>
>>> On 6/4/12 22:18, Alexander Zuev wrote:
>>>> Mike,
>>>>
>>>> thanks for a superb review. See comments inline.
>>>>
>>>> With best regards,
>>>> Alex
>>>>
>>>> On 6/1/12 23:18, Mike Swingler wrote:
>>>>> A few notes here:
>>>>>
>>>>> 1. getBestModeForParameters() should be called
>>>>> copyBestModeForParameters()
>>>>> - This is to pass the static-analyzer to validate that the
>>>>> retain/release balance is correct: copy implies returning a
>>>>> retained object, get implies non-retained. In this case you are
>>>>> returning a retained object that needs to be released.
>>>> I wasn't aware that static-analyzer takes into account the function
>>>> names. Anyways - in this case you are quite wrong. I'm not creating
>>>> any new objects here. What i get as a parameter is an array of the
>>>> references (pointers) and i'm returning one of them
>>>> that satisfy the conditions based on the other parameters passed.
>>>> There is no need in releasing the object referred by that
>>>> pointer - quite contrary if i DO release closestMatch in the
>>>> Java_sun_awt_CGraphicsDevice_nativeSetDisplayMode then next
>>>> time i try to set the same display mode i will get the nice
>>>> application crash. Something like this:
>>>>
>>>> 0 libsystem_kernel.dylib 0x00007fff85c55ce2
>>>> __pthread_kill + 10
>>>> 1 libsystem_c.dylib 0x00007fff8b42e7d2
>>>> pthread_kill + 95
>>>> 2 libsystem_c.dylib 0x00007fff8b41fa7a abort + 143
>>>> 3 libjvm.dylib 0x0000000102fadb79
>>>> os::abort(bool) + 25
>>>> 4 libjvm.dylib 0x0000000103099dd0
>>>> VMError::report_and_die() + 2306
>>>> 5 libjvm.dylib 0x0000000102faf255
>>>> JVM_handle_bsd_signal + 1047
>>>> 6 libsystem_c.dylib 0x00007fff8b480cfa _sigtramp + 26
>>>> 7 com.apple.CoreFoundation 0x00007fff8d125877
>>>> CFDictionaryGetValue + 23
>>>> 8 com.apple.CoreGraphics 0x00007fff83b0daec
>>>> CGDisplayModeGetResolution + 40
>>>> 9 com.apple.CoreGraphics 0x00007fff83b0f84f
>>>> CGDisplayCopyAllDisplayModes + 278
>>>> 10 liblwawt.dylib 0x000000015fc1b35d
>>>> Java_sun_awt_CGraphicsDevice_nativeSetDisplayMode + 57
>>>>
>>>>> 2. getBestModeForParameters() is declared to return a
>>>>> CGDisplayModeRef, but you are actually returning a bestGuess
>>>>> CFStringRef. Which is it?
>>>> Glitch. Fixed it. Strange that compiler did not issued a warning
>>>> about this return
>>>>> 3. getBPPFromModeString() returns an int, but in one case you are
>>>>> assigning to a jint in
>>>>> Java_sun_awt_CGraphicsDevice_nativeGetDisplayMode().
>>>>> - Technically not an issue, but unexpected.
>>>> I can add implicit cast to jint - but technically it is not an issue
>>>> as you mentioned .
>>>>> 4. In Java_sun_awt_CGraphicsDevice_nativeGetDisplayMode() you call
>>>>> CGDisplayModeGetRefreshRate(currentMode), but don't do anything
>>>>> with the return value, then later call it again, assigning it to
>>>>> the jint refrate.
>>>>> - What's up with this? Why call it twice?
>>>> Another glitch. Friday evening syndrome.
>>>>> 5. In some places you use (*env)->FindClass(), and in others you
>>>>> use JNF_CLASS_CACHE().
>>>>> - You can create array types using JNFNewObjectArray() and
>>>>> JNF_CLASS_CACHE(), which will benefit from fewer lines, and
>>>>> automatic exception throwing into Java, instead of just printing
>>>>> and suppressing the exception.
>>>> Well, valid point - i'll use the JNF functions for array creation
>>>> for the sake of consistency.
>>>>> 6. Your NSLog() in
>>>>> Java_sun_awt_CGraphicsDevice_nativeGetDisplayModes() says
>>>>> "CGRaphivsGevice".
>>>>> - I think you meant to say "CGraphicsDevice".
>>>> You're absolutely right.
>>>>> 7. None of the if checks in getBestModeForParameters() need else {
>>>>> } blocks, because they implicitly exit the for loop.
>>>> I've added them for the better code readability but as it makes code
>>>> more compact i may as well remove them.
>>>>> 8. getBPPFromModeString() can simply return the depth directly
>>>>> without assigning to a temporary.
>>>>> - I know this is more of a style thing, but I prefer fewer
>>>>> lines if possible.
>>>> Hmm. Ok, not a big deal but if it makes you a little bit happier
>>>> i'll surely do that.
>>>>> 9. Java_sun_awt_CGraphicsDevice_nativeSetDisplayMode() leaks the
>>>>> closestMatch CGDisplayModeRef.
>>>>> - The "Create Rule" explains why this is a leak when fixed in
>>>>> conjunction with (1) above.
>>>>>
>>>>> -<https://developer.apple.com/library/mac/#documentation/CoreFOundation/Conceptual/CFMemoryMgmt/Concepts/Ownership.html#//apple_ref/doc/uid/20001148-103029>
>>>>>
>>>> How comes? I do not use Copy-methods to get the exact configuration,
>>>> i get the array of references to the Quartz DisplayMode's
>>>> and i don't create any new CGDisplayMode objects. And i do release
>>>> the array itself. Where is the memory leak?
>>>>
>>>>> 10. What happens in the case of
>>>>> Java_sun_awt_CGraphicsDevice_nativeGetDisplayModes() where one of
>>>>> the CGDisplayModeRef's itterated on in the for loop is null? Is it
>>>>> OK to have empty nil holes in the returned array?
>>>> I tried to pass the null as one of the array elements back to Java -
>>>> seems that it's Ok so i will left it as it is now.
>>>>> Overall, I'm discouraged by this lack of attention to detail by
>>>>> both the author and reviewers.
>>>> Stuff happens, especially at Friday evening, but all for all there
>>>> was no major problems just some non-critical glitches here and
>>>> there. And you are one of reviewers so the review process is fairly
>>>> good at the end.
>>>>
>>>> Anyways - the new webrev can be found here
>>>> http://cr.openjdk.java.net/~kizune/7124247/jdk8/webrev.02
>>>> Comments are welcome.
>>>>
>>>>
>>>>>
>>>>> Mike Swingler
>>>>> Apple Inc.
>>>>>
>>>>> On Jun 1, 2012, at 10:55 AM, Alexander Zuev wrote:
>>>>>
>>>>>> Artem,
>>>>>>
>>>>>> 1. Done
>>>>>> 2. Yes, it's a wonderful idea, done.
>>>>>> 3. User can construct a new DisplayMode object and ask us to set
>>>>>> corresponding mode.
>>>>>>
>>>>>> New webrev can be found at
>>>>>> http://cr.openjdk.java.net/~kizune/7124247/jdk8/webrev.01
>>>>>>
>>>>>> With best regards,
>>>>>> Alex
>>>>>>
>>>>>> On 6/1/12 19:57, Artem Ananiev wrote:
>>>>>>> Hi, Alex,
>>>>>>>
>>>>>>> here are some comments:
>>>>>>>
>>>>>>> 1. Please, update copyright dates in file headers.
>>>>>>>
>>>>>>> 2. I would pass w, h, bpp and refrate as method params to
>>>>>>> setDisplayMode() to avoid extra JNI calls from native
>>>>>>>
>>>>>>> 3. Is it possible to call setDisplayMode() with a DisplayMode
>>>>>>> object that was not obtained via previous getDisplayModes() call?
>>>>>>> If the answer is "no", why don't you just check for exact match
>>>>>>> for all parameters (w, h, bpp, refrate) in
>>>>>>> getBestModeForParameters()?
>>>>>>>
>>>>>>> Thanks,
>>>>>>>
>>>>>>> Artem
>>>>>>>
>>>>>>> On 6/1/2012 1:40 PM, Alexander Zuev wrote:
>>>>>>>> Hello,
>>>>>>>>
>>>>>>>> please review my fix for CR 7124247: [macosx] Implement
>>>>>>>> GraphicsDevice.setDisplayMode()
>>>>>>>>
>>>>>>>> CR description can be found here:
>>>>>>>> http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=7124247
>>>>>>>>
>>>>>>>> Webrev with the proposed change can be seen here:
>>>>>>>> http://cr.openjdk.java.net/~kizune/7124247/jdk8/webrev.00
>>>>>>>>
>>>>>>>> With best regards,
>>>>>>>> Alex
>>>>
>>>
>
More information about the macosx-port-dev
mailing list