[ https://issues.apache.org/jira/browse/PDFBOX-2117?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14027616#comment-14027616 ]
Petr Slaby commented on PDFBOX-2117: ------------------------------------ {quote} How much slower? {quote} E.g. with the attached 000001_MTEXT_CS6.pdf which has an axial shading using PDDeviceCMYK, the time spent in AxialShading#getRaster() increases from ~0.5s to ~8.2s. I have other examples with axial shading using PDDeviceRGB, these are faster. ~7.2s drops to ~2.1s on three pdf pages rendered in them. But this is expected as PDDeviceRGB does nothing in getRGBImage() while it does a calculation through sRGB in getRGB(). If I skip the call of getRGB() in the case of PDDeviceRGB shading, the total time on this three files drops to 0.6s. For the moment, this seems to be the best solution to me. {quote} In your patch you can just return rgbImage.getRaster() because getColorModel() always returns sRGB. {quote} Not always. The buffered image returned from PDColorSpace#toRGBImageAWT() uses DirectColorModel while the one returned from PDDeviceRGB uses ComponentColorModel. Then value returned from AxialShadingContext#getColorModel() would need to be adjusted accordingly or the conversion needs to be done if the color model does not match. I was not sure about that. I think the usage of getRGBImage might be slower here because of the overhead of ColorConvertOp or the overhead of conversion via a buffered image in general. The method AxialShadingContext#getRaster() is called from AWT code when filling an area. It is called many times, usually to produce a one pixel high raster. I assume that, unless the fill area is a rectangle, AWT uses a scan line on the area being filled and requests a fill raster for each single line part it finds. > AxialShadingContext is slow > --------------------------- > > Key: PDFBOX-2117 > URL: https://issues.apache.org/jira/browse/PDFBOX-2117 > Project: PDFBox > Issue Type: Improvement > Reporter: Petr Slaby > Attachments: 000001_MTEXT_CS6.pdf, AxialShading.patch, > AxialShading1.patch, AxialShadingContext.java.getrgbimage, > Shading2Function2text.pdf, asy-shade.pdf, color_gradient.pdf, > shading_pattern.pdf > > > AxialShadingContext#getRaster() is on top of profiler hot spots in documents > that use an axial shading. Inside it, the slowest part is calling > PDColorSpaceRGB#toRGB() and PDFunctionType3#eval() (in this order). > -- This message was sent by Atlassian JIRA (v6.2#6252)