[OpenJDK Rasterizer] Marlin #4
Laurent Bourgès
bourges.laurent at gmail.com
Thu Sep 10 22:53:46 UTC 2015
Jim,
Here is the first webrev improving copyAARow() on large shapes (pixel
loops):
http://cr.openjdk.java.net/~lbourges/marlin/marlin-s4.0/
Note: I also incorporated few changes related to force cleanup in case of
runtime exception happening within pathTo(): see MarlinRenderingEngine,
Stroker, Dasher.
I advocate it is not yet completly ready (cleanup, log statement) but I
wanted to show the new algorithm & variants:
copyAARow uses now 4 variants:
- RLE encoding or uncompress alpha values
- Both can use block flags to only process small touched pixel blocks (like
tiles but only 1D) that boosts simple but large shapes !
To compare JDK8 vs OpenJDK9 performance, I added several properties to help
me testing the different combinations.
Please give me your first comments (overview).
I tested them with my regression tests and all variants are now OK.
Here are few results on my machine:
Common Settings below: -Dsun.java2d.renderer.*enableRLE=true*
-Dsun.java2d.renderer.forceRLE=false -Dsun.java2d.renderer.forceNoRLE=false
-Dsun.java2d.renderer.*useTileFlags=true*
-Dsun.java2d.renderer.useTileFlags.onlyRLE=true
-Dsun.java2d.renderer.useTileFlags.*useHeuristics=false*
*JDK1.8-60:*
Test Threads Ops Med
Pct95 Avg StdDev Min Max TotalOps [ms/op]
CircleTests.ser 1 162 64.864
65.197 64.911 0.429 64.513 69.491 162
*EllipseTests-fill-false.ser 1 33 317.290
319.177 317.712 1.343 317.125 324.763
33EllipseTests-fill-true.ser 1 25 451.659
452.124 451.684 0.292 451.229 452.627
25*dc_boulder_2013-13-30-06-13-17.ser
1 114 92.479 92.893 92.450 0.293 91.707 93.299
114
dc_boulder_2013-13-30-06-13-20.ser 1 220 47.785
48.701 47.822 0.528 47.154 51.906 220
dc_shp_alllayers_2013-00-30-07-00-43.ser 1 256 40.947
41.317 40.918 0.482 40.344 47.078 256
dc_shp_alllayers_2013-00-30-07-00-47.ser 1 25 785.488
787.065 785.636 1.351 783.761 791.016 25
dc_spearfish_2013-11-30-06-11-15.ser 1 811 12.966
13.035 12.980 0.163 12.939 17.548 811
dc_spearfish_2013-11-30-06-11-19.ser 1 1607 6.541
6.608 6.552 0.202 6.524 14.592 1607
dc_topp:states_2013-11-30-06-11-06.ser 1 849 12.300
12.376 12.312 0.037 12.277 12.581 849
dc_topp:states_2013-11-30-06-11-07.ser 1 1180 7.474
7.644 7.509 0.062 7.451 7.855 1180
spiralTest-dash-false.ser 1 25 1250.577
1256.383 1250.851 5.072 1242.596 1266.559 25
test_z_625k.ser 1 64 162.223
163.661 162.438 0.598 161.734 164.103 64
Scores:
Tests 13 13
Threads 1 1
Pct95 251.245 251.245
*OpenJDK9:*
Test Threads Ops Med
Pct95 Avg StdDev Min Max TotalOps [ms/op]
CircleTests.ser 1 163 64.128
64.353 64.149 0.290 63.757 67.442 163
*EllipseTests-fill-false.ser 1 35 295.859
296.245 295.924 0.211 295.542 296.503
35EllipseTests-fill-true.ser 1 25 491.937
492.165 491.936 0.193 491.662 492.591
25*dc_boulder_2013-13-30-06-13-17.ser
1 114 92.035 92.524 92.151 0.777 91.704 100.023
114
dc_boulder_2013-13-30-06-13-20.ser 1 219 47.851
48.228 47.893 0.202 47.447 48.767 219
dc_shp_alllayers_2013-00-30-07-00-43.ser 1 255 41.116
41.343 41.134 0.481 40.738 48.298 255
dc_shp_alllayers_2013-00-30-07-00-47.ser 1 25 800.950
802.572 800.765 1.206 797.561 803.335 25
dc_spearfish_2013-11-30-06-11-15.ser 1 801 13.130
13.262 13.149 0.055 13.105 13.592 801
dc_spearfish_2013-11-30-06-11-19.ser 1 1583 6.635
6.649 6.643 0.141 6.618 12.165 1583
dc_topp:states_2013-11-30-06-11-06.ser 1 845 12.452
12.569 12.472 0.042 12.428 12.671 845
dc_topp:states_2013-11-30-06-11-07.ser 1 1398 7.521
7.611 7.543 0.166 7.498 13.569 1398
spiralTest-dash-false.ser 1 25 1256.571
1265.870 1258.259 5.417 1252.840 1277.458 25
test_z_625k.ser 1 64 162.690
163.551 162.766 0.370 162.036 163.908 64
Scores:
Tests 13 13
Threads 1 1
Pct95 254.380 254.380
*Best settings on JDK1.8.60:*
-Dsun.java2d.renderer.*enableRLE=true* -Dsun.java2d.renderer.forceRLE=false
-Dsun.java2d.renderer.forceNoRLE=false -Dsun.java2d.renderer.*useTileFlags=true
*-Dsun.java2d.renderer.useTileFlags.*onlyRLE=true*
-Dsun.java2d.renderer.useTileFlags.*useHeuristics=true*
Test Threads Ops Med
Pct95 Avg StdDev Min Max TotalOps [ms/op]
CircleTests.ser 1 159 66.061
66.302 66.084 0.170 65.741 67.157 159
*EllipseTests-fill-false.ser 1 35 299.068
299.602 299.116 0.297 298.702 300.086
35EllipseTests-fill-true.ser 1 25 434.568
437.110 434.871 0.875 434.375 437.897
25*dc_boulder_2013-13-30-06-13-17.ser
1 113 92.769 93.373 92.807 0.318 91.836 93.878
113
dc_boulder_2013-13-30-06-13-20.ser 1 218 48.027
48.466 48.074 0.617 47.302 56.302 218
dc_shp_alllayers_2013-00-30-07-00-43.ser 1 258 40.858
41.522 40.944 0.228 40.747 41.948 258
dc_shp_alllayers_2013-00-30-07-00-47.ser 1 25 805.037
810.135 804.379 4.719 795.737 815.035 25
dc_spearfish_2013-11-30-06-11-15.ser 1 799 13.031
13.149 13.053 0.049 12.994 13.297 799
dc_spearfish_2013-11-30-06-11-19.ser 1 1591 6.606
6.686 6.623 0.191 6.585 14.142 1591
dc_topp:states_2013-11-30-06-11-06.ser 1 835 12.584
12.675 12.575 0.075 12.375 12.788 835
dc_topp:states_2013-11-30-06-11-07.ser 1 1366 7.708
7.754 7.691 0.256 7.507 16.861 1366
spiralTest-dash-false.ser 1 25 1282.635
1291.162 1284.327 5.325 1275.512 1301.505 25
test_z_625k.ser 1 65 158.586
162.356 159.298 1.499 158.204 166.762 65
Scores:
Tests 13 13
Threads 1 1
Pct95 253.100 253.100
*Ductus on JDK1.8.60:*Test
Threads Ops Med Pct95 Avg StdDev Min Max
TotalOps [ms/op]
CircleTests.ser 1 148 69.971
71.418 70.068 0.719 68.369 72.031 148
*EllipseTests-fill-false.ser 1 35 297.560
299.328 297.480 1.093 295.417 299.590
35EllipseTests-fill-true.ser 1 25 453.612
456.290 453.589 1.813 448.936 456.817
25*dc_boulder_2013-13-30-06-13-17.ser
1 93 112.865 113.419 112.880 0.277 112.377
113.459 93
dc_boulder_2013-13-30-06-13-20.ser 1 183 56.944
57.521 56.987 0.260 56.528 58.187 183
dc_shp_alllayers_2013-00-30-07-00-43.ser 1 220 47.955
48.555 47.975 0.346 47.223 49.203 220
dc_shp_alllayers_2013-00-30-07-00-47.ser 1 25 1056.025
1058.306 1056.215 1.079 1054.813 1058.515 25
dc_spearfish_2013-11-30-06-11-15.ser 1 628 16.798
17.095 16.837 0.125 16.633 17.343 628
dc_spearfish_2013-11-30-06-11-19.ser 1 1354 7.605
7.896 7.663 0.104 7.553 8.217 1354
dc_topp:states_2013-11-30-06-11-06.ser 1 616 16.988
17.097 16.980 0.086 16.737 17.513 616
dc_topp:states_2013-11-30-06-11-07.ser 1 931 11.319
11.397 11.304 0.066 11.052 11.479 931
spiralTest-dash-false.ser 1 25 1391.196
1395.741 1391.765 2.908 1387.115 1400.945 25
test_z_625k.ser 1 50 208.874
209.563 208.850 0.439 206.910 209.900 50
Scores:
Tests 13 13
Threads 1 1
Pct95 289.510 289.510
*Marlin 0.7.0 on JDK1.8.60:*
Test Threads Ops Med
Pct95 Avg StdDev Min Max TotalOps [ms/op]
CircleTests.ser 1 158 66.573
66.946 66.610 0.230 66.231 67.986 158
*EllipseTests-fill-false.ser 1 25 518.527
519.683 518.957 1.780 518.350 527.552
25EllipseTests-fill-true.ser 1 25 910.986
911.630 911.034 0.439 910.128 912.556
25*dc_boulder_2013-13-30-06-13-17.ser
1 112 93.333 93.866 93.345 0.286 92.669 94.479
112
dc_boulder_2013-13-30-06-13-20.ser 1 216 48.277
48.668 48.248 0.291 47.472 49.297 216
dc_shp_alllayers_2013-00-30-07-00-43.ser 1 260 40.133
40.861 40.277 0.326 39.963 41.228 260
dc_shp_alllayers_2013-00-30-07-00-47.ser 1 25 809.985
816.815 810.538 3.590 803.921 817.493 25
dc_spearfish_2013-11-30-06-11-15.ser 1 801 13.077
13.184 13.092 0.045 13.051 13.419 801
dc_spearfish_2013-11-30-06-11-19.ser 1 1578 6.657
6.714 6.664 0.026 6.642 6.985 1578
dc_topp:states_2013-11-30-06-11-06.ser 1 832 12.641
12.654 12.631 0.035 12.405 12.663 832
dc_topp:states_2013-11-30-06-11-07.ser 1 1351 7.771
7.782 7.757 0.038 7.573 7.808 1351
spiralTest-dash-false.ser 1 25 1262.443
1274.194 1263.859 4.385 1259.201 1276.358 25
test_z_625k.ser 1 61 169.885
170.539 169.875 0.376 169.155 170.638 61
Scores:
Tests 13 13
Threads 1 1
Pct95 306.426 306.426
As you can see, OpenJDK9 seems to be a bit slower on filling huge ellipse
(MaskFill changes ?)
Anyway, the new patch (using RLE + block flags) provides performance
comparable to Ductus.
Cheers,
Laurent
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.openjdk.java.net/pipermail/graphics-rasterizer-dev/attachments/20150911/35fd29d3/attachment-0001.html>
More information about the graphics-rasterizer-dev
mailing list