[OpenJDK Rasterizer] [OpenJDK 2D-Dev] Path2d needRoom very slow for huge paths

Laurent Bourgès bourges.laurent at gmail.com
Fri Apr 10 21:04:05 UTC 2015


Jim,
Sorry to make you under pressure !

But path2d is too slow due to its initial design, and I feel you want me to
propose too much perfect changes ....  but let us stay pragmatic and apply
the KISS rule= keep it simple !

Cheers,
Have a nice week end.

PS: I improved a bit marlin ...

Laurent
Le 10 avr. 2015 21:08, "Laurent Bourgès" <bourges.laurent at gmail.com> a
écrit :

> Jim,
>
> Please consider other changes also !
>
> I added the trim method after the discussion. I can remove it if it makes
> you approve the patch quicker.
>
> Laurent
> Le 10 avr. 2015 20:51, "Jim Graham" <james.graham at oracle.com> a écrit :
>
>> Hi Laurent,
>>
>> Adding a new method is not as simple as just sending a webrev.  We'll
>> need to do some other internal processes to get approval for that...
>>
>>                 ...jim
>>
>> On 4/10/15 8:07 AM, Laurent Bourgès wrote:
>>
>>> Jim,
>>>
>>> Here is the new webrev:
>>> http://cr.openjdk.java.net/~lbourges/path2D/Path2D_needRoom.1/
>>>
>>> Changes:
>>> - needRoom() applies your pseudo-code; see expandPointTypes() and
>>> expandCoords()
>>> - added a new public trimToSize() method to Path2D implemented by both
>>> Path2D.Float and Path2D.Double classes
>>>
>>> Cheers,
>>> Laurent
>>>
>>> 2015-04-08 22:53 GMT+02:00 Jim Graham <james.graham at oracle.com
>>> <mailto:james.graham at oracle.com>>:
>>>
>>>     Hi Laurent,
>>>
>>>     I'd probably do:
>>>
>>>     int newsizemin = oldcount + newitems;
>>>     if (newsizemin < oldcount) {
>>>          // hard overflow failure - we can't even accommodate
>>>          // new items without overflowing
>>>          return failure, throw exception?
>>>     }
>>>     int newsize = <growth algorithm computation>;
>>>     if (newsize < newsizemin) {
>>>          // overflow in growth algorithm computation
>>>          newsize = newsizemin;
>>>          ... OR ...
>>>          newsize = MAX_INT;
>>>     }
>>>     while (true) {
>>>          try {
>>>              allocate newsize;
>>>              break;  (or return?)
>>>          } catch (OOME e) {
>>>              if (newsize == newsizemin) {
>>>                  throw e;
>>>              }
>>>          }
>>>          newsize = newsizemin + (newsize - newsizemin) / 2;
>>>     }
>>>
>>>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.openjdk.java.net/pipermail/graphics-rasterizer-dev/attachments/20150410/ba9d45d5/attachment.html>


More information about the graphics-rasterizer-dev mailing list