[OpenJDK 2D-Dev] [8] request fro review: 8005530: [lcms] Improve performance of ColorConverOp for default destinations

Andrew Brygin andrew.brygin at oracle.com
Fri Feb 1 15:41:41 UTC 2013


Hello Phil,

  please take yet another look at updated webrev:

  http://cr.openjdk.java.net/~bae/8005530/webrev.02/

  Summary of changes:
  - LCMS.c: unused native method getTagSize() was removed.

  - mapfiles for lcms library are updated accordingly to changes in 
native methods of LCMS
     (affects new and old build systems, is visible on solaris)

Thanks,
Andrew

On 1/29/2013 1:52 AM, Phil Race wrote:
> This is all fine by me.
>
> -phil.
>
> On 1/28/2013 1:40 AM, Andrew Brygin wrote:
>> Hello Phil,
>>
>>  I have updated the fix according to your comment:
>>
>>  http://cr.openjdk.java.net/~bae/8005530/webrev.01/
>>
>>  Beside this, I have included some improvements related to
>>  access to profile header (which is quite important in case
>>  of decoding jpeg images with embedded color profile),
>>  and to raster processing.
>>  New benchmark to estimate the performance of image
>>  decoding was also added to the fix.
>>
>>  Please take a look to a comparison of performance level
>>  below.
>>
>>  Regarding to the change in build files: I have verified that
>>  it works for both old and new build systems. I am pretty
>>  sure that the change is safe (the HIGHEST level of optimization
>>  is already used for other libraries in jdk).
>>
>>  Would you like to see the change in build systems as a
>>  separate fix?
>>
>> Thanks,
>> Andrew
>>
>> ======================================================================
>> Options common across all tests:
>>   cmm.colorconv.ccop.ccopOptions.content=photo
>>   cmm.colorconv.ccop.ccopOptions.srcType=BYTE_3BYTE_BGR
>>   cmm.colorconv.embed.embedOptions.Images=MEDIUM
>>   cmm.opts.profiles=1001
>>
>> cmm.colorconv.ccop.op_draw,cmm.colorconv.ccop.ccopOptions.dstType=BYTE_3BYTE_BGR,cmm.colorconv.ccop.ccopOptions.size=250: 
>>
>> OpenJDK Baseline: 0.008438818 (var=18.29%) (100.0%)
>> *************************************** |
>> ****************************************|
>> ****************************************|
>> OpenJDK Fix: 0.012336448 (var=7.36%) (146.19%)
>> ****************************************|******************
>> ****************************************|*****************
>> ****************************************|****************
>> cmm.colorconv.ccop.op_draw,cmm.colorconv.ccop.ccopOptions.dstType=BYTE_3BYTE_BGR,cmm.colorconv.ccop.ccopOptions.size=4000: 
>>
>> OpenJDK Baseline: 0.900596556 (var=2.93%) (100.0%)
>> ******************************************************|
>> ***************************************************** |
>> ******************************************************|
>> OpenJDK Fix: 0.193663771 (var=7.52%) (110.1%)
>> ******************************************************|*****
>> ******************************************************|**
>> ******************************************************|*****
>> cmm.colorconv.ccop.op_draw,cmm.colorconv.ccop.ccopOptions.dstType=COMPATIBLE_DST,cmm.colorconv.ccop.ccopOptions.size=250: 
>>
>> OpenJDK Baseline: 0.009548438 (var=16.26%) (100.0%)
>> ***********************************************|
>> ***********************************************|
>> *********************************************  |
>> OpenJDK Fix: 0.011871784 (var=7.76%) (124.33%)
>> ***********************************************|************
>> ***********************************************|***********
>> ***********************************************|********
>> cmm.colorconv.ccop.op_draw,cmm.colorconv.ccop.ccopOptions.dstType=COMPATIBLE_DST,cmm.colorconv.ccop.ccopOptions.size=4000: 
>>
>> OpenJDK Baseline: 0.927800441 (var=7.74%) (100.0%)
>> ****************************************************|
>> ****************************************************|
>> ****************************************************|
>> OpenJDK Fix: 0.247631935 (var=12.63%) (110.92%)
>> ****************************************************|*****
>> ****************************************************|*****
>> ****************************************************|*****
>> cmm.colorconv.ccop.op_img,cmm.colorconv.ccop.ccopOptions.dstType=BYTE_3BYTE_BGR,cmm.colorconv.ccop.ccopOptions.size=250: 
>>
>> OpenJDK Baseline: 0.171872303 (var=13.62%) (100.0%)
>> ******************************************|
>> ******************************************|
>> ******************************************|
>> OpenJDK Fix: 0.238933601 (var=3.17%) (139.02%)
>> ******************************************|****************
>> ******************************************|****************
>> ******************************************|****************
>> cmm.colorconv.ccop.op_img,cmm.colorconv.ccop.ccopOptions.dstType=BYTE_3BYTE_BGR,cmm.colorconv.ccop.ccopOptions.size=4000: 
>>
>> OpenJDK Baseline: 0.615214994 (var=7.92%) (100.0%)
>> ******************************|
>> ******************************|
>> ******************************|
>> OpenJDK Fix: 0.001296456 (var=2.15%) (195.98%)
>> ******************************|*****************************
>> ******************************|****************************
>> ******************************|*****************************
>> cmm.colorconv.ccop.op_img,cmm.colorconv.ccop.ccopOptions.dstType=COMPATIBLE_DST,cmm.colorconv.ccop.ccopOptions.size=250: 
>>
>> OpenJDK Baseline: 0.065811677 (var=6.25%) (100.0%)
>> ****************|
>> ****************|
>> ****************|
>> OpenJDK Fix: 0.236734693 (var=7.65%) (359.72%)
>> ****************|*****************************************
>> ****************|******************************************
>> ****************|******************************************
>> cmm.colorconv.ccop.op_img,cmm.colorconv.ccop.ccopOptions.dstType=COMPATIBLE_DST,cmm.colorconv.ccop.ccopOptions.size=4000: 
>>
>> OpenJDK Baseline: 0.763357432 (var=1.53%) (100.0%)
>> ********|
>> ********|
>> ********|
>> OpenJDK Fix: 0.001278227 (var=3.47%) (724.88%)
>> ********|**************************************************
>> ********|*************************************************
>> ********|**************************************************
>> cmm.colorconv.ccop.op_rst,cmm.colorconv.ccop.ccopOptions.dstType=BYTE_3BYTE_BGR,cmm.colorconv.ccop.ccopOptions.size=250: 
>>
>> OpenJDK Baseline: 0.110134436 (var=1.92%) (100.0%)
>> ***************************|
>> ***************************|
>> ***************************|
>> OpenJDK Fix: 0.234074823 (var=4.62%) (212.54%)
>> ***************************|******************************
>> ***************************|*******************************
>> ***************************|******************************
>> cmm.colorconv.ccop.op_rst,cmm.colorconv.ccop.ccopOptions.dstType=BYTE_3BYTE_BGR,cmm.colorconv.ccop.ccopOptions.size=4000: 
>>
>> OpenJDK Baseline: 0.391746749 (var=16.2%) (100.0%)
>> ****************|
>> ****************|
>> *************** |
>> OpenJDK Fix: 0.001300390 (var=2.29%) (383.4%)
>> ****************|*******************************************
>> ****************|*******************************************
>> ****************|******************************************
>> cmm.colorconv.ccop.op_rst,cmm.colorconv.ccop.ccopOptions.dstType=COMPATIBLE_DST,cmm.colorconv.ccop.ccopOptions.size=250: 
>>
>> OpenJDK Baseline: 0.110379746 (var=1.38%) (100.0%)
>> ***************************|
>> ***************************|
>> ***************************|
>> OpenJDK Fix: 0.238619309 (var=3.32%) (216.18%)
>> ***************************|******************************
>> ***************************|******************************
>> ***************************|*******************************
>> cmm.colorconv.ccop.op_rst,cmm.colorconv.ccop.ccopOptions.dstType=COMPATIBLE_DST,cmm.colorconv.ccop.ccopOptions.size=4000: 
>>
>> OpenJDK Baseline: 0.846569883 (var=10.33%) (100.0%)
>> *************|
>> *************|
>> *************|
>> OpenJDK Fix: 0.001290600 (var=2.88%) (453.39%)
>> *************|*********************************************
>> *************|**********************************************
>> *************|*********************************************
>> cmm.colorconv.embed.embd_img_read:
>> OpenJDK Baseline: 0.299874002 (var=7.04%) (100.0%)
>> ************|
>> ************|
>> ************|
>> OpenJDK Fix: 0.003114456 (var=9.07%) (494.37%)
>> ************|*********************************************
>> ************|**********************************************
>> ************|**********************************************
>> cmm.profiles.getHeader:
>> OpenJDK Baseline: 136.4378577 (var=4.34%) (100.0%)
>> *|
>> *|
>> *|
>> OpenJDK Fix: 6858.467330 (var=1.36%) (5026.81%)
>> *|**********************************************************
>> *|**********************************************************
>> *|**********************************************************
>> cmm.profiles.getNumComponents:
>> OpenJDK Baseline: 135.4737465 (var=2.49%) (100.0%)
>> *|
>> *|
>> *|
>> OpenJDK Fix: 6903.416838 (var=4.1%) (5095.76%)
>> *|*********************************************************
>> *|********************************************************
>> *|********************************************************
>>
>> Summary:
>>   OpenJDK Baseline:
>>     Number of tests:  15
>>     Overall average:  18.159329310271605
>>     Best spread:      1.38% variance
>>     Worst spread:     18.29% variance
>>     (Basis for results comparison)
>>
>>   OpenJDK Fix:
>>     Number of tests:  15
>>     Overall average:  917.5243389674637
>>     Best spread:      1.36% variance
>>     Worst spread:     12.63% variance
>>     Comparison to basis:
>>       Best result:      5095.76% of basis
>>       Worst result:     110.1% of basis
>>       Number of wins:   15
>>       Number of ties:   0
>>       Number of losses: 0
>>
>>
>> On 1/17/2013 1:54 AM, Phil Race wrote:
>>> The variables
>>> 154 ShortComponentRaster shortRaster;
>>> 155 IntegerComponentRaster intRaster;
>>> 156 ByteComponentRaster byteRaster;
>>>
>>> are each used only in a localised few lines of code,
>>> can we move them to the block where they are used so
>>> that their scope is limited to that ? I don't know for a fact
>>> but I can imagine that the VM can then skip allocating stack for them
>>> until you enter that block which actually needs them.
>>>
>>> As you note,this takes into account old and new builds in the 
>>> makefile changes
>>> Have you tested both ?
>>> And unless you are 100% confident in this [minimal] change
>>> you should get sign off from the build group as they've recently 
>>> requested.
>>>
>>> You should add "noreg-perf" as a label in the JIRA
>>>
>>> -phil.
>>>
>>> On 1/9/2013 4:25 AM, Andrew Brygin wrote:
>>>> Hello Jennifer and Phil,
>>>>
>>>> could you please review a fix for CR 8005530?
>>>>
>>>> CR:  http://bugs.sun.com/view_bug.do?bug_id=8005530
>>>> Webrev:http://cr.openjdk.java.net/~bae/8005530/webrev.00/
>>>>
>>>> This fix improves performance of ColorConvertOp.filter()
>>>> operation in case of lcms. The fix can be divided into
>>>> three separate changes:
>>>>
>>>> * provide support for custom component images in
>>>>   LCMSImageLayout.
>>>>   This change affects the case of conversion to default
>>>>   destination.
>>>>
>>>> * provide a way to process whole image, instead of
>>>>   scan-by-scan processing, if both source and
>>>>   destination images do not contain padding samples
>>>>   (i.e. next scan starts immediately after previous).
>>>>
>>>> * increase optimization level for lcms library from
>>>>   LOW to HIGHEST. This change affects both new and
>>>>   standard build systems.
>>>>
>>>> A benchmark comparison below illustrates the increase
>>>> of performance:
>>>>
>>>> Options common across all tests:
>>>>   testname=cmm.colorconv.ccop.op_img
>>>>   cmm.colorconv.ccop.ccopOptions.srcType=BYTE_3BYTE_BGR
>>>>   cmm.colorconv.ccop.ccopOptions.content=photo
>>>>   cmm.opts.profiles=1001
>>>>
>>>> cmm.colorconv.ccop.ccopOptions.dstType=BYTE_3BYTE_BGR,cmm.colorconv.ccop.ccopOptions.size=250: 
>>>>
>>>> OpenJDK Baseline: 0.152008134 (var=1.02%) (100.0%)
>>>> *************************************|
>>>> *************************************|
>>>> *************************************|
>>>> OpenJDK Fix: 0.245116358 (var=2.0%) (161.25%)
>>>> *************************************|**********************
>>>> *************************************|**********************
>>>> *************************************|*********************
>>>> cmm.colorconv.ccop.ccopOptions.dstType=BYTE_3BYTE_BGR,cmm.colorconv.ccop.ccopOptions.size=4000: 
>>>>
>>>> OpenJDK Baseline: 0.914826498 (var=0.41%) (100.0%)
>>>> ***************************|
>>>> ***************************|
>>>> ***************************|
>>>> OpenJDK Fix: 0.001310043 (var=2.24%) (221.48%)
>>>> ***************************|********************************
>>>> ***************************|********************************
>>>> ***************************|********************************
>>>> cmm.colorconv.ccop.ccopOptions.dstType=COMPATIBLE_DST,cmm.colorconv.ccop.ccopOptions.size=250: 
>>>>
>>>> OpenJDK Baseline: 0.060737151 (var=1.57%) (100.0%)
>>>> ***************|
>>>> ***************|
>>>> ***************|
>>>> OpenJDK Fix: 0.242736486 (var=1.53%) (399.65%)
>>>> ***************|*******************************************
>>>> ***************|********************************************
>>>> ***************|********************************************
>>>> cmm.colorconv.ccop.ccopOptions.dstType=COMPATIBLE_DST,cmm.colorconv.ccop.ccopOptions.size=4000: 
>>>>
>>>> OpenJDK Baseline: 0.559251559 (var=0.7%) (100.0%)
>>>> *******|
>>>> *******|
>>>> *******|
>>>> OpenJDK Fix: 0.001306904 (var=1.05%) (838.16%)
>>>> *******|***************************************************
>>>> *******|****************************************************
>>>> *******|****************************************************
>>>>
>>>> Summary:
>>>>   OpenJDK Baseline:
>>>>     Number of tests:  4
>>>>     Overall average:  0.053373173444166644
>>>>     Best spread:      0.41% variance
>>>>     Worst spread:     1.57% variance
>>>>     (Basis for results comparison)
>>>>
>>>>   OpenJDK Fix:
>>>>     Number of tests:  4
>>>>     Overall average:  0.12261744826137347
>>>>     Best spread:      1.05% variance
>>>>     Worst spread:     2.24% variance
>>>>     Comparison to basis:
>>>>       Best result:      838.16% of basis
>>>>       Worst result:     161.25% of basis
>>>>       Number of wins:   4
>>>>       Number of ties:   0
>>>>       Number of losses: 0
>>>>
>>>> Thanks,
>>>> Andrew
>>>>
>>>
>>
>




More information about the 2d-dev mailing list