On Sun, 10 Jan 2021 02:20:04 GMT, Sergey Bylokhov <s...@openjdk.org> wrote:

>> Laurent Bourgès has updated the pull request incrementally with one 
>> additional commit since the last revision:
>> 
>>   fixed white spaces
>
> src/java.desktop/share/classes/sun/java2d/pipe/RenderingEngine.java line 257:
> 
>> 255:      * @since 17
>> 256:      */
>> 257:     public abstract void strokeTo(Shape src,
> 
> I think we need to clarify the backward compatibility of this change.
>  - If we would like to support the old marlin version via 
> "-Dsun.java2d.renderer" option in jdk17 then adding the new abstract method 
> to this interface breaks this possibility. To support that this method should 
> be made default and call the old strokeTo method.
>  - If support for the old marlin library is not necessary then we could drop 
> the old method from this interface(but preserve it in the 
> MarlinRenderingEngine to have the same marlin codebase), it won't be used 
> anyway.

I like the first proposal: use default class method as RE is an abstract class.

> src/java.desktop/share/classes/sun/java2d/pipe/LoopPipe.java line 273:
> 
>> 271:                 (sg2d.strokeHint != SunHints.INTVAL_STROKE_PURE);
>> 272: 
>> 273: // No clipping (pre-jdk17)
> 
> This code is not a part of the marlin, so exists only in the jdk17. Do we 
> need these commented lines here?

Will remove the comment

> test/jdk/sun/java2d/marlin/DrawingTest7018932.java line 42:
> 
>> 40:  * @run main DrawingTest7018932
>> 41:  */
>> 42: public class DrawingTest7018932 extends JPanel {
> 
> This will work only in the headful environment, I suggest something like this:
> /*
>  * Copyright (c) 2021, Oracle and/or its affiliates. All rights reserved.
>  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
>  *
>  * This code is free software; you can redistribute it and/or modify it
>  * under the terms of the GNU General Public License version 2 only, as
>  * published by the Free Software Foundation.
>  *
>  * This code is distributed in the hope that it will be useful, but WITHOUT
>  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
>  * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
>  * version 2 for more details (a copy is included in the LICENSE file that
>  * accompanied this code).
>  *
>  * You should have received a copy of the GNU General Public License version
>  * 2 along with this work; if not, write to the Free Software Foundation,
>  * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
>  *
>  * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
>  * or visit www.oracle.com if you need additional information or have any
>  * questions.
>  */
> 
> import java.awt.BasicStroke;
> import java.awt.Graphics2D;
> import java.awt.RenderingHints;
> import java.awt.Stroke;
> import java.awt.geom.Line2D;
> import java.awt.image.BufferedImage;
> 
> import static java.awt.image.BufferedImage.TYPE_INT_ARGB_PRE;
> 
> /*
>  * @test
>  * @bug 7018932
>  * @summary fix LoopPipe.getStrokedSpans() performance (clipping enabled by 
> Marlin renderer)
>  */
> public final class StrokedLinePerf {
> 
>     public static void main(String[] args) {
>         BufferedImage bi = new BufferedImage(400, 400, TYPE_INT_ARGB_PRE);
>         test(bi, true);
>         test(bi, false);
>     }
> 
>     private static void test(BufferedImage bi, boolean useAA) {
>         Graphics2D g2d = bi.createGraphics();
>         long start = System.nanoTime();
> 
>         if (useAA) {
>             g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
>                     RenderingHints.VALUE_ANTIALIAS_ON);
>         } else {
>             g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
>                     RenderingHints.VALUE_ANTIALIAS_OFF);
>         }
> 
>         Stroke stroke = new BasicStroke(2.0f, 1, 0, 1.0f, new float[]{0.0f, 
> 4.0f}, 0.0f);
>         g2d.setStroke(stroke);
> 
>         //Large values to trigger crash / infinite loop.
>         g2d.draw(new Line2D.Double(4.0, 1.794369841E9, 567.0, 
> -2.147483648E9));
> 
>         System.out.println("Test duration= " + (1e-6 * (System.nanoTime() - 
> start)) + " ms.");
>         g2d.dispose();
>     }
> }

Interesting, but BufferedImage rendering may use another java2d pipeline... so 
I will check if LoopPipe.getStrokedSpans() is used by your test code.

-------------

PR: https://git.openjdk.java.net/jdk/pull/2013

Reply via email to