<AWT Dev> [OpenJDK 2D-Dev] Review request for 8029339 Custom MultiResolution image support on HiDPI displays

Sergey Bylokhov Sergey.Bylokhov at oracle.com
Wed Aug 19 14:01:42 UTC 2015


Looks fine.

On 19.08.15 14:51, Alexander Scherbatiy wrote:
>
>   Hello,
>
>  Could you review the updated fix:
>     http://cr.openjdk.java.net/~alexsch/8029339/webrev.12
>
>   Javadoc description is updated in some places and parameters 
> checking is added:
>   - @throws IllegalArgumentException tag is added for 
> MultiResolutionImage.getResolutionVariant(destImageWidth,destImageHeight) 
> method
>   - Comment about nonempty return list is added for 
> MultiResolutionImage.getResolutionVariants() method
>   - BaseMultiResolutionImage class description is updated to mention 
> getResolutionVariant(destImageWidth, destImageHeight) method
>   - @throws IllegalArgumentException and NullPointerException tags are 
> added for BaseMultiResolutionImage  constructors
>  - parameters checking is added for BaseMultiResolutionImage, 
> MultiResolutionCachedImage and MultiResolutionToolkitImage clases
>  - Exception message is updated for MRRHT.java, line 85
>
> Thanks,
> Alexandr.
>
>
> On 7/29/2015 4:42 AM, Jim Graham wrote:
>> Hi Alexandr,
>>
>> All of the new changes look good.  Only one minor issue in a comment 
>> in the test:
>>
>> MRRHT.java, line 85: should be "is not based on rendered size" or 
>> something to that effect
>>   (No need for a new webrev to fix that print statement.)
>>
>> I have a separate question out to Phil on whether or not using sun.* 
>> classes like this in a java.* test is good practice, but the worst 
>> case answer for that question would be "or should the test be moved 
>> to a sun.* package"...
>>
>> One follow-on issue to file and think about - the use of 
>> getDefaultTransform() requires the construction of a brand new 
>> transform every time it is used.  For the call to it from the SG2D 
>> constructor that is fine because that becomes our initial 
>> AffineTransform that we would have had to create anyway.  But, if 
>> they set the DPI_FIT hint then we end up calling that method every 
>> time we are looking at an MR image.  We should look for a way to 
>> cache that value, or use internal API that doesn't require a clone, 
>> or some other way to avoid that "on every drawImage call" object 
>> creation.  Unless you have an obvious fix you want to do now, I don't 
>> think we need to hold up this push to get the new MR APIs out there...
>>
>>             ...jim
>>
>> On 7/28/15 8:33 AM, Alexander Scherbatiy wrote:
>>>
>>>   Hello Jim,
>>>
>>>   Could you review the updated fix:
>>> http://cr.openjdk.java.net/~alexsch/8029339/webrev.10/
>>>    - the suggested comments are updated
>>>    - the MultiResolutionRenderingHintsTest is updated to use custom
>>> GraphicsConfiguration and SurfaceData
>>>
>>> On 7/23/2015 8:25 PM, Jim Graham wrote:
>>>> Hi Alexandr,
>>>>
>>>> On 7/21/15 7:41 AM, Alexander Scherbatiy wrote:
>>>>>
>>>>>    Hello Jim,
>>>>>
>>>>>   Thank your for the review.
>>>>>
>>>>>   Could you review the updated fix there the suggested comments are
>>>>> updated:
>>>>> http://cr.openjdk.java.net/~alexsch/8029339/webrev.09/
>>>>
>>>> Minor comments embedded below.
>>>>
>>>>> On 7/14/2015 2:36 AM, Jim Graham wrote:
>>>>>> AbstractMRI - getGraphics() should include "getGraphics() not
>>>>>> supported on Multi-Resolution Images" as the exception description
>>>>>> text.
>>>>
>>>> AbstractMRI - the getGraphics() description string contains an
>>>> embedded '\n' and an embedded '\"', are those typos?
>>>     Updated.
>>>>
>>>>>> BaseMRI - class comment - "The implementation will return the first
>>>>>> ... satisfy the rendering request."  Add another sentence right 
>>>>>> there
>>>>>> "The last image in the array will be returned if no suitable 
>>>>>> image is
>>>>>> found that is larger than the rendering request."
>>>>
>>>> BaseMRI - whoops, my bad.  "that is larger than" should probably be
>>>> "that is as large as" to match the <= comparison
>>>      Updated.
>>>>
>>>>>> SG2D.getResolutionVariant - using destRegionWH to calculate
>>>>>> destImageWH can involve a lot of "do some math and then later have
>>>>>> additional code undo it".  Would it be faster to just compute
>>>>>> destImageWH directly, as in:
>>>>>>
>>>>>> float destImageWidth, destImageHeight;
>>>>>>
>>>>>> if (BASE) {
>>>>>>     destImageWH = srcWH;
>>>>>> } else if (DPI) {
>>>>>>     destImageWH = (float) abs(srcWH * devScale);
>>>>>> } else {
>>>>>>     double destRegionWidth, destRegionHeight;
>>>>>>     if (type) {
>>>>>>     ...
>>>>>>     }
>>>>>>     destImageWH = (float) abs(srcWH * destRegionWH / swh);
>>>>>> }
>>>>>> Image rv = img.getRV(destImageWH);
>>>>
>>>> For the BASE and DPI_FIT cases shouldn't you use srcWidth,srcHeight
>>>> instead of sw,sh?  The sw,sh are affected by sub-image parameters, but
>>>> srcWidth,srcHeight are literally the size of the original image, which
>>>> is what you want to search the MRI for.  The sw,sh should only be used
>>>> to scale the srcWidth in the "else" clause - as in "srcWidth *
>>>> destRegionWidth / sw".
>>>
>>>     You are right. sw and sh are sizes of a region in the original
>>> image. I have updated the fix to use srcWidth/Height.
>>>
>>>>
>>>>>> Is there intent to have the default case be mapped to DPI_FIT for
>>>>>> Windows?
>>>>>      I think yes.
>>>>
>>>> I didn't see where this was being done - is that a TBD follow-on fix
>>>> or did I miss a default somewhere?
>>>     I think that it could be fixed with the updating WToolkit to load
>>> high-resolution toolkit images in the same way as it is done in 
>>> LWCToolkit.
>>>     At least it can be filled as a separate issue.
>>>
>>>>
>>>>>> MRRHTest - why not render to a BufferedImage and avoid Robot? 
>>>>>> Could it
>>>>>> tap into internal APIs to create a BImg/compatibleImage with a given
>>>>>> devScale?
>>>>>
>>>>>     The DPI_FIT test includes case there a graphics transform is
>>>>> identity but the device configuration transform has scale 2.
>>>>>     There should be a way to set scale for the device configuration
>>>>> transform;
>>>>
>>>> Ah yes, DPI_FIT needs a default transform.  Also, without a way to
>>>> manually create a device with a transform, that means that DPI_FIT is
>>>> only successfully tested if the tests are run on a HiDPI machine, 
>>>> right?
>>>>
>>>>>> MRRHTest - why allow up to delta=50 on the comparison?
>>>>>      It is just for monitors that are calibrated on Mac OS X and they
>>>>> colors are different from that which was set. The test uses colors 
>>>>> which
>>>>> have at least one color component differ by 255.
>>>>
>>>> Another issue that might go away if we could use BImg instead of 
>>>> robot.
>>>>
>>>>>> MRRHTest - since the scale factor comes from a dialog, we depend on
>>>>>> running this on a HiDPI display to fully test the hints? Could using
>>>>>> "scaled compatible images" allow testing this more definitively?
>>>>>
>>>>>     Could you explain more what does it mean "scaled compatible 
>>>>> images"?
>>>>
>>>> I seem to recall that there is a mechanism in there to create
>>>> backbuffer images for swing that record the fact that they are
>>>> scaled.  I forget how this is done, but I'm wondering if it could be
>>>> used to run all of this test code in a simulated scale environment
>>>> rather than using the actual configurations that AWT creates for the
>>>> current system.
>>>
>>>     I have updated the test to use custom GraphicsConfiguration and
>>> SurfaceData. This allows to use custom scales both on the graphics
>>> configuration and on graphics.
>>>
>>>     Thanks,
>>>     Alexandr.
>>>
>>>>
>>>>             ...jim
>>>
>


-- 
Best regards, Sergey.



More information about the awt-dev mailing list