Hi Ajit,

According to the tests you’ve mentioned it’s not a big difference. Looks like 
we’ve faced with completely different scenario. I’ll try to figure out the main 
reason of the failure.

Best Regards,
Alexey 

> On Dec 8, 2022, at 12:38 PM, Ajit Ghaisas <ajit.ghai...@oracle.com> wrote:
> 
> 
> 
>> On 08-Dec-2022, at 1:50 PM, Alexey Ushakov <alexey.usha...@jetbrains.com 
>> <mailto:alexey.usha...@jetbrains.com>> wrote:
>> 
>>> 
>>> FWIW we have just had at a report of a performance drop in JDK 20 from a 
>>> b07 change to show how it takes
>>> time for these things to be discovered.
>> Could you provide some more details concerning the regression? We also faced 
>> with a regression in metal rendering 
>> (https://youtrack.jetbrains.com/issue/JBR-4849 ). It was caused by 
>> https://bugs.openjdk.org/browse/JDK-8288948 (that we back ported into 
>> OpenJDK17 based runtime). 
> 
> The details can be found at - 
> https://bugs.openjdk.org/browse/JDK-8288948?focusedCommentId=14504772&page=com.atlassian.jira.plugin.system.issuetabpanels%3Acomment-tabpanel#comment-14504772
>  
> <https://bugs.openjdk.org/browse/JDK-8288948?focusedCommentId=14504772&page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#comment-14504772>
> 
> Look at the last 3 lines of that comment & attached test results to  
> https://bugs.openjdk.org/browse/JDK-8288948.
> In the screenshots for RenderPerf and SwingMark results - the rightmost 
> column header should read “Integrated graphics card."
> 
>> 
>> Best Regards,
>> Alexey
>> 
>>> On Dec 7, 2022, at 7:22 PM, Philip Race <philip.r...@oracle.com 
>>> <mailto:philip.r...@oracle.com>> wrote:
>>> 
>>> This is clearly too late for JDK 20 and JDK 21 will be just 6 months later 
>>> so it is a better time for that.
>>> FWIW we have just had at a report of a performance drop in JDK 20 from a 
>>> b07 change to show how it takes
>>> time for these things to be discovered.
>>> Also I had a bug / rfe for this a while back : 
>>> https://bugs.openjdk.org/browse/JDK-8233037
>>> I closed it as WNF because I wasn't able to see a performance boost.
>>> 
>>> So the right way to do this is  to provide some solid evidence of what gets 
>>> faster and what gets
>>> slower with a range of different values (not just the JBR one) and re-open 
>>> that bug and resolve early in 21.
>>> 
>>> -phil.
>>> 
>>> 
>>> On 12/7/22 7:36 AM, Alexey Ushakov wrote:
>>>> Yes, I confirm that we’ve been using such enlarged buffer for a long time 
>>>> in production. It helped us with scrolling performance on 4K monitors. The 
>>>> suggested property could help to adjust the buffer for the needs of 
>>>> particular application.
>>>> 
>>>> Best Regards,
>>>> Alexey
>>>> 
>>>>> On 7 Dec 2022, at 11:37, Laurent Bourgès <bourges.laur...@gmail.com 
>>>>> <mailto:bourges.laur...@gmail.com>> wrote:
>>>>> 
>>>>> Hi,
>>>>> 
>>>>> For years, JetBrains Runtime uses a larger render queue buffer size (32kb 
>>>>> to 6,400,000 bytes) in production, as it boosted many accelerated 
>>>>> pipelines: d3d, ogl, metal :
>>>>> ~ 10 to 20% on large fills...
>>>>> 
>>>>> JBR RenderQueue:
>>>>> https://github.com/JetBrains/JetBrainsRuntime/blob/02bc54f8644c6c6467aa952d0a8a104355acc273/src/java.desktop/share/classes/sun/java2d/pipe/RenderQueue.java#L75
>>>>> 
>>>>> JDK RenderQueue:
>>>>> https://github.com/bourgesl/jdk-official/blob/5e196b4b8e623107424e2fb54672790fd925fe73/src/java.desktop/share/classes/sun/java2d/pipe/RenderQueue.java#L75
>>>>> 
>>>>> I want to propose such quick fix in openjdk20 today, as a 1-line fix.
>>>>> 
>>>>> 
>>>>> /** The size of the underlying buffer, in bytes. */
>>>>> private static final int BUFFER_SIZE = 6400000;
>>>>> 
>>>>> To ensure a smooth transition, I prefer introducing a new 
>>>>> sun.java2d.render.queue system property to increase the default (32kb) 
>>>>> buffer capacity:
>>>>> 
>>>>> See in marlin:
>>>>> https://github.com/bourgesl/marlin-renderer/blob/323f1fb1c72704f5e86c8a13393e30df00888821/src/main/java/sun/java2d/pipe/RenderQueue.java#L78
>>>>> 
>>>>> So here is my current proposal:
>>>>> [[[
>>>>> 
>>>>> /** The size of the underlying buffer, in bytes. */
>>>>> private static final int BUFFER_SIZE;
>>>>> 
>>>>> static {
>>>>> // Default 32K is too small for high-end GPU:
>>>>> BUFFER_SIZE = align(getInteger("sun.java2d.render.bufferSize", 32 * 1024, 
>>>>> 32 * 1024, 16 * 1024 * 1024), 1024);
>>>>> 
>>>>> // System.out.println("RenderQueue: sun.java2d.render.bufferSize = " + 
>>>>> BUFFER_SIZE);
>>>>> }
>>>>> 
>>>>>     // system property utilities
>>>>>     public static int getInteger(final String key, final int def,
>>>>>                                  final int min, final int max)
>>>>>     {
>>>>>         final String property = AccessController.doPrivileged(
>>>>>                                     new GetPropertyAction(key));
>>>>> 
>>>>>         int value = def;
>>>>>         if (property != null) {
>>>>>             try {
>>>>>                 value = Integer.decode(property);
>>>>>             } catch (NumberFormatException e) {
>>>>>                 System.out.println("Invalid integer value for " + key + " 
>>>>> = " + property);
>>>>>             }
>>>>>         }
>>>>> 
>>>>>         // check for invalid values
>>>>>         if ((value < min) || (value > max)) {
>>>>>             System.out.println("Invalid value for " + key + " = " + value
>>>>>                     + "; expected value in range[" + min + ", " + max + 
>>>>> "] !");
>>>>>             value = def;
>>>>>         }
>>>>>         return value;
>>>>>     }
>>>>> 
>>>>>     protected static int align(final int val, final int norm) {
>>>>>         final int ceil = (int)Math.ceil( ((float) val) / norm);
>>>>>         return ceil * norm;
>>>>>     }
>>>>> ]]]
>>>>> 
>>>>> Would you accept such late change for openjdk20 ?
>>>>> 
>>>>> Cheers,
>>>>> Laurent Bourgès 
>>>> 
>>> 
>> 
> 

Reply via email to