[OpenJDK 2D-Dev] RFR 8144446: Automate the Marlin crash test

Laurent Bourgès bourges.laurent at gmail.com
Wed Dec 9 14:35:33 UTC 2015


Jim & Sergey,

Here are my comments:

2015-12-09 13:57 GMT+01:00 Sergey Bylokhov <Sergey.Bylokhov at oracle.com>:

> On 09/12/15 02:12, Jim Graham wrote:
>
>> Hi Laurent,
>>
>> If this were testing a bug that crossed a number of implementation
>> boundaries such that any number of engineers might make a change that
>> could cause it to fail, then I might agree with the need to run it
>> whenever any automated run of tests occurs.
>>
>
Marlin relies on the jdk.internal.Unsafe implementation depending on the
low-level JVM which is different among supported platforms (Windows, MacOS,
linux, sparc, AIX, aarch) 32/64 bits !

So I am really interested by having such cross-platform test reports.
Would have the CrashTest detected the Marlin issue on sparc ?


> But, the only thing that will cause this to fail would be if someone
>> modified Marlin - which is basically you, and maybe 1 or 2 other
>> engineers who would only go in for mostly logistical coding reasons, not
>> for any changes that might affect the algorithm.  Those engineers should
>> be running the tests with the -manual option specified for testing their
>> changes.
>>
>
Agreed it is possible but then the bug JDK-8144446
<https://bugs.openjdk.java.net/browse/JDK-8144446> becomes invalid.


> But, if someone changes some code in core libs, or Swing, or somewhere
>> else not related to Marlin - you've just added 30 seconds to the amount
>> of time that it takes them to test for any regressions.  Is that
>> appropriate?
>>
>
> My opinion yes. I doubt that someone will try to run manual
> tests(especially in case of future backports). The things which can be done
> automatically should be done in this way. Note that core libs team will not
> be affected because the jtreg now have a TEST.groups which allow run the
> test for one specific area like jdk_math, jdk_nio, jdk_lang, jdk_desktop
> etc.(the full list is in the jdk/test/TEST.groups)
>

I agree that's why I like automated regression tests.

I am not sure, but should these tests be marlin specific? I do not see that
> they have some marlin specific options and they can cover other(old/future)
> renders as well.


The test is not really specific to the Marlin renderer except it uses some
particular threshold values to exceed 2Gb limits or internal buffers.

Unfortunately only Marlin passes the CrashTest !

Here are the Pisces / Ductus failures I got:

- Pisces FAIL:
---
testHugeImage: width=8388609, height=10
image size = 8388609 x 10
paint: duration= 601.486811 ms.
---
test: lineStroke=0.1, useDashes=false, dashMinLen=0.0
image size = 9000
draw : 20200 lines.
paint: duration= 22441.869121 ms.
---
test: lineStroke=0.1, useDashes=true, dashMinLen=7.0
image size = 9000
draw : 20200 lines.
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: -1
    at sun.java2d.pisces.Renderer$ScanlineIterator.next(Renderer.java:73)
    at
sun.java2d.pisces.Renderer$ScanlineIterator.access$600(Renderer.java:32)
    at sun.java2d.pisces.Renderer._endRendering(Renderer.java:450)
    at sun.java2d.pisces.Renderer.endRendering(Renderer.java:534)
    at
sun.java2d.pisces.PiscesRenderingEngine.getAATileGenerator(PiscesRenderingEngine.java:564)
    at sun.java2d.pipe.AAShapePipe.renderPath(AAShapePipe.java:152)
    at sun.java2d.pipe.AAShapePipe.draw(AAShapePipe.java:64)
    at
sun.java2d.pipe.PixelToParallelogramConverter.draw(PixelToParallelogramConverter.java:148)
    at sun.java2d.pipe.ValidatePipe.draw(ValidatePipe.java:154)
    at sun.java2d.SunGraphics2D.draw(SunGraphics2D.java:2461)
    at CrashTest.paint(CrashTest.java:254)
    at CrashTest.test(CrashTest.java:130)
    at CrashTest.main(CrashTest.java:63)

- Ductus FAIL:

testHugeImage: width=8388609, height=10
image size = 8388609 x 10
DuctusRenderingEngine.getAATileGenerator: sun.dc.pr.PRException:
setOutputArea: alpha coordinate out of bounds
Exception in thread "main" sun.dc.pr.PRError: getTileState: unexpected
    at sun.dc.pr.PathFiller.getTileState(Native Method)
    at sun.dc.pr.Rasterizer.getTypicalAlpha(Rasterizer.java:751)
    at sun.java2d.pipe.AAShapePipe.renderTiles(AAShapePipe.java:185)
    at sun.java2d.pipe.AAShapePipe.renderPath(AAShapePipe.java:159)
    at sun.java2d.pipe.AAShapePipe.draw(AAShapePipe.java:64)
    at
sun.java2d.pipe.PixelToParallelogramConverter.draw(PixelToParallelogramConverter.java:148)
    at sun.java2d.pipe.ValidatePipe.draw(ValidatePipe.java:154)
    at sun.java2d.SunGraphics2D.draw(SunGraphics2D.java:2497)
    at CrashTest.testHugeImage(CrashTest.java:185)
    at CrashTest.main(CrashTest.java:60)

Cheers,
Laurent
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.openjdk.java.net/pipermail/2d-dev/attachments/20151209/064452cf/attachment.html>


More information about the 2d-dev mailing list