Windows support for HiDPI displays, call for feedback and testing
Kevin Rushforth
kevin.rushforth at oracle.com
Mon Jun 8 12:42:43 UTC 2015
Does the same slowdown happen on a non-Retina system?
How large is your image? How large are the individual tiles? One thing
that occurs to me is that your application might be thrashing texture
memory (although I can't think of anything that changed in 8u60 that
would affect this). You might try the following debug flag:
java -Dprism.poolstats=true
and see if there is a lot of thrashing of texture memory. Also, you can
increase the memory that will be used for textures to, say, 1Gbyte
(default is 512Mbytes) by:
java -Dprism.maxvram=1g
and see if that makes a difference. Jim might have additional suggestions.
-- Kevin
Dr. Michael Paus wrote:
> Many thanks for the clarification.
>
> I'd also like to be more specific on the performance drop I observed
> but I have to
> admit that I don't have any idea what is going on there. The only
> thing I can say
> for sure is that I can consistently reproduce this drop in performance
> by switching
> between 8u45 and 8u60 (tested with b08 and b15).
>
> My application contains a map view (something similar to Google Maps)
> which
> displays an area of retina map tiles. By dragging with the mouse I can
> move this
> map around within the map pane. This works smoothly with 8u45 but is
> completely
> shaky with 8u60. I even experimented with various techniques to
> implement such
> a map view (single large image, single large canvas, individual
> images/canvases for
> each map tile) and they all show the same behavior, so it cannot be
> something which
> is specific to a particular implementation approach. During my test
> all tiles where already
> cached in memory, so I can exclude any file or network IO related issues.
>
> I tried to implement a little example where I just move around a large
> image but in
> this simple scenario the problem does not show up.
>
> So in order to do a bit more precise measuring I added an
> AnimationTimer to my map pane
> which I use to compute a new position of the map for each frame so
> that a point on the map
> moves along a circle. This helps to show the performance drop more
> precisely than moving
> around the map by hand. This is a smooth movement with 8u45 but shaky
> with 8u60.
>
> But one other observation puzzles me completely. The handle-method of
> the timer is called with
> a frame rate of 60 Hz even though the graphics output is shaky and has
> a visual frame rate
> of something between 2 - 5 Hz. It is new to me that something like
> this is technically possible.
> It looks as if the system is running at full speed but skips
> displaying most of the generated
> frames for some reason. Is such a behavior possible at all?
>
> Am 05.06.15 um 22:49 schrieb Jim Graham:
>> I actually use a retina MBP for testing - dual booting Windows and
>> MacOS.
>>
>> There should be no changes at all on other platforms, particularly in
>> regard to rendering speed. There was one small regression on Linux
>> resulting in a bad first paint due to asynchronous initialization of
>> the Window size, but no performance issues. Can you be more specific
>> about where you see the performance drop? What kind of scene
>> graph/animation?
>>
>> The system properties are all Windows specific, thus the "glass.win"
>> prefix. In 9 we might generalize all of the HiDPI support and offer
>> something more centralized, but those are just there for testing the
>> new Windows support for now. We'll also look at how to advertise the
>> pixel scaling to applications at that time.
>>
>> One thing to note is that the way that Mac retina support is done, if
>> the user ever sets their control panel to anything other than "just
>> pick the best conditions for this display" then there is
>> pixel-scaling going on behind the scenes in the OS, so any attempts
>> to try to line up with pixels will be muddied by the virtual DPI they
>> are emulating at the system level. We'll also be looking at ways to
>> bypass their built-in "virtualized" HiDPI support in a later release
>> so that we can actually talk directly to display pixels regardless of
>> CP settings.
>>
>> This virtualized scaling is mitigated by the fact that this HiDPI
>> pixel stretching is happening on a HiDPI display and so any linear
>> interpolation is hidden by tiny pixel sizes.
>>
>> To that end, we are doing something similar with Windows scaling.
>> There are a number of places in the FX code that assume that it can
>> predict an integer translation from the FX code and so we always
>> render at integer scales so that integers in FX Scene coordinates map
>> to integers in rendered pixel coordinates. We'll try to fix those in
>> 9 so that we can do non-integer scaling, but until then there will be
>> the same disconnect between trying to line up with display pixels and
>> the actions of HiDPI as Mac OS already has...
>>
>> ...jim
>>
>> On 6/5/15 3:03 AM, Dr. Michael Paus wrote:
>>> I cannot provide any Windows specific feedback on HiDPI displays
>>> because
>>> I don't own one but I am working on a MacBook Pro with Retina display
>>> and thus would like to ask a few questions in this context.
>>>
>>> How are other platforms (Mac, Linux) affected by the changes you made
>>> for the Windows support? (On my Mac I noticed a severe performance drop
>>> when using 8u60 which may possibly be related to these changes.)
>>>
>>> Are any of the special system properties you mentioned also usable on
>>> other platforms?
>>>
>>> Is there any way now to find out what the current pixel scale factor
>>> is?
>>> Without that knowledge it is impossible to do proper graphics on any
>>> HiDPI screen. (E.g., you can't position graphic elements correctly in
>>> order to get crisp lines or you can't get a crisp snapshot of a node if
>>> you don't take special actions based on the pixel scale.)
>
More information about the openjfx-dev
mailing list