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

Jim Graham james.graham at oracle.com
Mon Apr 20 20:10:11 UTC 2015


For reference: https://bugs.openjdk.java.net/browse/JDK-8078192

			...jim

On 4/20/15 1:09 PM, Jim Graham wrote:
> I've started the CCC process by creating a bug.
>
> One quick question - do we want to port these changes back to 8u60?  If
> so, then we would not be able to port the new Path2D method since there
> are no API changes allowed in 8u60.  If not, then there is no issue.
>
> Phil?
>
>              ...jim
>
> On 4/17/15 3:09 AM, Laurent Bourgès wrote:
>> Phil & Jim,
>>
>> Do you have any feedback (CCC) on this Path2D patch ?
>>
>> http://cr.openjdk.java.net/~lbourges/path2D/Path2D_needRoom.1/
>> <http://cr.openjdk.java.net/%7Elbourges/path2D/Path2D_needRoom.1/>
>>
>> Laurent
>>
>>
>> Le 10 avr. 2015 20:51, "Jim Graham" <james.graham at oracle.com
>> <mailto: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>
>>         <mailto: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;
>>              }
>>
>>
>>
>>
>> --
>> --
>> Laurent Bourgès


More information about the graphics-rasterizer-dev mailing list