[OpenJDK 2D-Dev] Path2d needRoom very slow for huge paths
Laurent Bourgès
bourges.laurent at gmail.com
Thu Apr 2 16:10:05 UTC 2015
Hi again,
I quickly tested the proposed solution:
void needRoom(boolean needMove, int newCoords) {
if (needMove && numTypes == 0) {
throw new IllegalPathStateException("missing initial moveto
"+
"in path definition");
}
int size = pointTypes.length;
if (numTypes >= size) {
int grow = size;
if (grow > EXPAND_MAX) {
* grow = Math.max(EXPAND_MAX, size >> 3); // 1/8th
min*
} else if (grow == 0) {
grow = 1;
}
pointTypes = Arrays.copyOf(pointTypes, size+grow);
}
size = floatCoords.length;
if (numCoords + newCoords > size) {
int grow = size;
if (grow > EXPAND_MAX * 2) {
* grow = Math.max(EXPAND_MAX * 2, size >> 3); // 1/8th
min* }
if (grow < newCoords) {
grow = newCoords;
}
*
System.out.println("floatCoords["+System.currentTimeMillis()+"]: grow=" +
(size+grow));* floatCoords = Arrays.copyOf(floatCoords,
size+grow);
}
}
Before changing the grow parameter (only log):
*10025 resizes:*
floatCoords[1427989723142]: grow=9192
floatCoords[1427989723142]: grow=10192
floatCoords[1427989723143]: grow=11192
floatCoords[1427989723143]: grow=12192
...
floatCoords[1427989775916]: grow=10030192
floatCoords[1427989775925]: grow=10031192
floatCoords[1427989775933]: grow=10032192
floatCoords[1427989775942]: grow=10033192
*duration[spiralTest-dash-false.ser] = 54729.927044 ms.*
After modifying the grow parameter to be at least 1/8th the array size:
*61 resizes:*
floatCoords[1427990208647]: grow=9216
floatCoords[1427990208647]: grow=10368
floatCoords[1427990208647]: grow=11664
floatCoords[1427990208647]: grow=13122
...
floatCoords[1427990209097]: grow=7587943
floatCoords[1427990209142]: grow=8536435
floatCoords[1427990209163]: grow=9603489
floatCoords[1427990209187]: grow=10803925
*duration[spiralTest-dash-false.ser] = 2373.493056 ms.*
What do you think ?
Does it worth a new bug ?
Do you need my Spiral test code ?
Laurent
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.openjdk.java.net/pipermail/2d-dev/attachments/20150402/05d0479f/attachment.html>
More information about the 2d-dev
mailing list