[OpenJDK Rasterizer] [OpenJDK 2D-Dev] Path2d needRoom very slow for huge paths
Jim Graham
james.graham at oracle.com
Fri Apr 3 22:25:48 UTC 2015
The patch as it is will make things much better, but it may be worth
"doing it right" as long as we are revisiting this algorithm and write
it to deal better with the OOME/integer overflow cases.
I looked at the ArrayList code and found a bit of voodoo there in the
overflow code which troubled me as a potential maintainer. It's one
thing to write clever code, it's another thing to write clever code that
others can come along and maintain without having to fill a white board
with input/output ranges and 2's complement rules. It's not like this
code is going to be in an inner loop somewhere - the time for a couple
of conditional checks and min/maxes will be vastly swallowed by the
costs of allocation and copying data so it would be better to just write
straightforward code whose overflow considerations are documented for
future maintainers. (Having said that I probably wrote some pretty
obtusely clever code in the Rectangle class myself... D'oh!) My general
goal is to include comments with the incoming assumptions and then
document how I've ruled out cases and narrowed ranges with small
single-line comments as the calculations and decisions are made...
...jim
On 4/3/15 6:37 AM, Laurent Bourgès wrote:
> Sergey,
>
> 2015-04-03 15:16 GMT+02:00 Sergey Bylokhov <Sergey.Bylokhov at oracle.com
> <mailto:Sergey.Bylokhov at oracle.com>>:
>
> Hello.
> Is that a problem that with the new code we can get OOM earlier in
> some cases? Should we take care of overflow more carefully now? It
> seems that ArrayList.grow contains similar logic.
>
>
> I advocate I did not test with a small heap (Xmx32m ...)
>
> I agree my patch will waste more memory : 1/8th for both arrays (byte[]
> and float or double[]) instead of 500 byte and 1000 float/double values !
>
> I looked at ArrayList.grow(int) and it deals with integer overflow ie
> Integer.MAX_VALUE ... I did not imagine such big paths !
>
> But you're right: my code can be improved to deal with OOME and overflow.
>
> In case of OOME, it may be possible to try allocating another array with
> a smaller grow ?
> Is it what you had in mind ?
>
> Cheers,
> Laurent
More information about the graphics-rasterizer-dev
mailing list