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

Jim Graham james.graham at oracle.com
Thu Dec 10 00:28:51 UTC 2015


Ignore that first paragraph - a thought train that didn't go anywhere 
and I forgot to delete it...

			...jim

On 12/9/15 4:27 PM, Jim Graham wrote:
> Hi Laurent,
>
> I did some more reading about jtreg and discovered that an @run is
> supposed to be assumed if none are present, but
>
> The fix looks correct, but one thing I would tend to do for robustness
> is that in an error case, rather than duplicate the logic that was
> skipped (which can get out of date if we later change how the bounds*Y
> variables are calculated), I would just hardcode the bounds*Y variables
> to the worst case min/max so that we do a complete fill on the
> variables.  For error cases it is less interesting to optimize out every
> memory store and more interesting to make sure that we robustly restore
> the state.  Another option would be to move the bounds logic to a
> separate function that is called in both the error and the success cases?
>
> For the test, you can have multiple test tags and include an @ignore so
> that the primary tests are run every time and the ones after the ignore
> are only run if someone runs with "-ignore:run".  That makes them
> runnable from the command line without having to edit the test:
>
> @run main/othervm -mx512m CrashTest
> @ignore tests that take a long time
> @run main/othervm -mx512m CrashTest -slow
>
> The first line would be run in all cases, the second line would only be
> run if they specify "-ignore:run" on the command line.
>
> The only down side is that the tests after the @ignore are shown on the
> final statistics as "errors" which seems kind of melodramatic, but
> that's why the "-ignore:quiet" option exists.  There are quite a few
> tests in the java hierarchy with an @ignore tag, though, often talking
> about extreme memory requirements so this is nothing new.  This would be
> the first in the sun/java2d hierarchy, though...
>
>          ...jim
>
> On 12/9/15 3:10 PM, Laurent Bourgès wrote:
>> Jim,
>>
>> My last chance for tonight !
>>
>> Here is another webrev that disables two long tests (dasher) in
>> CrashTest but fixes a state cleanup bug in Renderer (doChecks=true):
>> http://cr.openjdk.java.net/~lbourges/marlin/marlin-8144446.2/
>>
>> Note: the modified CrashTest detected this bug in Renderer (happening
>> only with 2Gb off-heap overflow) so I keep both classes together in the
>> same patch as the fix in Renderer is very small.
>>
>> The CrashTest seems faster now.
>>
>> Laurent
>>
>> 2015-12-09 23:31 GMT+01:00 Jim Graham <james.graham at oracle.com
>> <mailto:james.graham at oracle.com>>:
>>
>>     Hi Laurent,
>>
>>     That sounds good.  I'm all for fast tests!  ;)
>>
>>     We might want to fix them in separate bugs, though.  If the new mods
>>     to the test case lead to failures, then we should integrate them
>>     after we fix the underlying problems, though, to prevent testing
>>     failures that might block an integration...
>>
>>                              ...jim
>>
>>     On 12/9/15 2:25 PM, Laurent Bourgès wrote:
>>
>>         Jim,
>>
>>         Thanks for explaining me the different jtreg modes (newbie) !
>>
>>         I tried disabling few long tests (using dashes) that are less
>>         critical
>>         (no failure expected, just insane rendering work):
>>                       test(0.1f, false, 0);
>>                       test(0.1f, true, 7f);
>>
>>         Doing so, I detected a new issue in the Renderer.dispose()
>> when the
>>         addLine() fails due to the AIOB (2GB off-heap overflow):
>>         the range buckets_minY/maxY are not properly set, normally by
>>         endRendering(), and the edgeBucket arrays are not properly
>>         zero-filled !
>>
>>         I will work on this issue ASAP and propose a fix within the same
>>         bug.
>>
>>         Maybe we should defer this fix as I agree it can be made faster
>>         ~ 12s
>>         now vs 52s before on my laptop.
>>
>>         Laurent
>>
>>         2015-12-09 22:31 GMT+01:00 Jim Graham <james.graham at oracle.com
>>         <mailto:james.graham at oracle.com>
>>         <mailto:james.graham at oracle.com
>> <mailto:james.graham at oracle.com>>>:
>>
>>
>>              Hi Laurent,
>>
>>              One clarification - there are levels of automation.
>>
>>              On 12/9/15 6:35 AM, Laurent Bourgès wrote:
>>
>>                  Agreed it is possible but then the bug JDK-8144446
>>                  <https://bugs.openjdk.java.net/browse/JDK-8144446>
>>         becomes invalid.
>>
>>
>>              Prior to this fix, jtreg wouldn't even see the test since
>>         it did not
>>              have any tags in it at all.  Adding tags of "some sort"
>>         makes it
>>              able to be run by the test mechanism, which I call
>> "automated".
>>              Right now, nobody who runs jtreg will run this test no
>>         matter what
>>              command line arguments they use with the tool.
>>
>>              Once jtreg recognizes a test there are variations that let
>>         it decide
>>              when/if to run it.  It has 3 main modes (related to the
>>         /manual tag):
>>
>>              no options - all tests are run, both manual and automatic
>>              -a - ignore all /manual tests
>>              -m - run only /manual tests
>>
>>              -a primarily means "there is no human here to provide
>>         interaction",
>>              but a few non-manual tests take a long time.
>>
>>              On the other hand, I just did a test run of all tests (with
>>         -a) in
>>              sun/java2d and the total time was so long that the 30
>>         seconds wasn't
>>              that noticeable.  On the other hand, there were a lot of
>>         tests run
>>              so the long time was less because a lot of tests take a
>>         long time
>>              than it was about the fact that a lot of conditions were
>>         tested in
>>              that time. For the record, the next longest test in that
>>         part of the
>>              repo takes 8 seconds, so this new test is almost 5 times
>>         longer than
>>              any existing java2d test.  Only the longest 4 tests took
>>         more than 5
>>              seconds.
>>
>>              I did find a test with "@ignore slow test" in another part
>>         of the
>>              repo and I ran it and it took 8 seconds as well, so
>>         somebody out
>>              there considers 8 seconds to be too long to run under
>> ordinary
>>              circumstances.
>>
>>              I tend to want to push hard on making tests be faster and
>>         leaner.  I
>>              see so many bug fixes come in with automated tests that
>>         only have to
>>              run a single method and see if it returns the right answer
>>         and yet
>>              somehow the test needs to launch a Frame and wait for it to
>>         open and
>>              then do a screen readback - when a simple render to a
>>         BufferedImage
>>              would take 1/100th the time.
>>
>>              I'll withdraw my suggestion to make this one /manual, but
>>         it would
>>              be nice if it could do its work in just a few seconds
>>         instead...
>>
>>
>>
>>
>> --
>> --
>> Laurent Bourgès



More information about the 2d-dev mailing list