[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