[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