[ 
https://issues.apache.org/jira/browse/IMAGING-95?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Amit Gupta updated IMAGING-95:
------------------------------

    Description: 
org.apache.commons.imaging.formats.tiff.TiffReader.getTiffRawImageData(ByteSource,
 TiffDirectory)       226635  1
org.apache.commons.imaging.common.bytesource.ByteSourceInputStream.getBlock(int,
 int)   226588  5616
org.apache.commons.imaging.common.BinaryFileFunctions.skipBytes(InputStream, 
int)       226526  5616
org.apache.commons.imaging.common.BinaryFileFunctions.skipBytes(InputStream, 
int, String)       226526  5616
org.apache.commons.imaging.common.bytesource.ByteSourceInputStream$CacheReadingInputStream.read(byte[],
 int, int)       226526  188656860
org.apache.commons.imaging.common.bytesource.ByteSourceInputStream$CacheBlock.getNext()
 64581   188651244
skip bytes is being called repeatedly again and again, last column is 
invocation count in one call tree. Second column is total number of time taken 
by that method in that call tree..

and skip method is not overridden 
org.apache.commons.imaging.common.bytesource.ByteSourceInputStream.CacheReadingInputStream
 and default implementation of InputStream tries to use read method (which is 
overridden in CacheReadingInputStream) to skip. 

In case of a tiff, which has large number of strips, skip is repeatedly called 
and use of read is inefficient as it tried to do a System.arraycopy. array copy 
is not needed in case of skip operation, as the bytes were already read in 
block/cached, we can simply jump the pointer (block by block)

  was:
org.apache.commons.imaging.formats.tiff.TiffReader.getTiffRawImageData(ByteSource,
 TiffDirectory)       226635  1
org.apache.commons.imaging.common.bytesource.ByteSourceInputStream.getBlock(int,
 int)   226588  5616
org.apache.commons.imaging.common.BinaryFileFunctions.skipBytes(InputStream, 
int)       226526  5616
org.apache.commons.imaging.common.BinaryFileFunctions.skipBytes(InputStream, 
int, String)       226526  5616
org.apache.commons.imaging.common.bytesource.ByteSourceInputStream$CacheReadingInputStream.read(byte[],
 int, int)       226526  188656860
org.apache.commons.imaging.common.bytesource.ByteSourceInputStream$CacheBlock.getNext()
 64581   188651244
skip bytes is being called repeatedly again and again, last column is 
invocation count in one call tree. Second column is total number of time taken 
by that method in that call tree..

and skip method is not overridden 
org.apache.commons.imaging.common.bytesource.ByteSourceInputStream.CacheReadingInputStream
 and default implementation of InputStream tries to use read method (which is 
overridden in CacheReadingInputStream) to skip. 

In case of a tiff, which has large number of strips, skip is repeatedly called 
in use of read is inefficient as it tried to do a System.arraycopy. array copy 
is not needed in case of skip operation, as the bytes were already read in 
block/cached, we can simply jump the pointer (block by block)

    
> Some tiff processing takes very long
> ------------------------------------
>
>                 Key: IMAGING-95
>                 URL: https://issues.apache.org/jira/browse/IMAGING-95
>             Project: Commons Imaging
>          Issue Type: Bug
>          Components: Format: TIFF
>    Affects Versions: 1.0
>            Reporter: Amit Gupta
>         Attachments: tiff_perf_fix.patch
>
>
> org.apache.commons.imaging.formats.tiff.TiffReader.getTiffRawImageData(ByteSource,
>  TiffDirectory)     226635  1
> org.apache.commons.imaging.common.bytesource.ByteSourceInputStream.getBlock(int,
>  int) 226588  5616
> org.apache.commons.imaging.common.BinaryFileFunctions.skipBytes(InputStream, 
> int)     226526  5616
> org.apache.commons.imaging.common.BinaryFileFunctions.skipBytes(InputStream, 
> int, String)     226526  5616
> org.apache.commons.imaging.common.bytesource.ByteSourceInputStream$CacheReadingInputStream.read(byte[],
>  int, int)     226526  188656860
> org.apache.commons.imaging.common.bytesource.ByteSourceInputStream$CacheBlock.getNext()
>        64581   188651244
> skip bytes is being called repeatedly again and again, last column is 
> invocation count in one call tree. Second column is total number of time 
> taken by that method in that call tree..
> and skip method is not overridden 
> org.apache.commons.imaging.common.bytesource.ByteSourceInputStream.CacheReadingInputStream
>  and default implementation of InputStream tries to use read method (which is 
> overridden in CacheReadingInputStream) to skip. 
> In case of a tiff, which has large number of strips, skip is repeatedly 
> called and use of read is inefficient as it tried to do a System.arraycopy. 
> array copy is not needed in case of skip operation, as the bytes were already 
> read in block/cached, we can simply jump the pointer (block by block)

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira

Reply via email to