You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@pdfbox.apache.org by "Petr Slaby (JIRA)" <ji...@apache.org> on 2014/06/05 10:48:01 UTC

[jira] [Commented] (PDFBOX-2117) AxialShadingContext is slow

    [ https://issues.apache.org/jira/browse/PDFBOX-2117?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14018590#comment-14018590 ] 

Petr Slaby commented on PDFBOX-2117:
------------------------------------

Attached is a patch that tackles the problem. There are the following improvements:
- if the shading is horizontal or vertical, the values can be computed just for the given direction and simply copied in the other one
- cache at least some of the computed values in a simple lookup table
- cache internal structures in PDFunctionType3 rather than create them again and again from COSDictionary
- cache at least some of the computed values in PDColorSpaceRGB and PDColorSpaceCMYK using a simple lookup table. The ICC profiles are very slow and do a lot of math to convert the values. In my test, PDColorSpaceRGB is always high on hot spot list, the CMYK version not so much. I am not sure whether this is because my test documents mostly use RGB or because the CMYK profile is faster. I assume the first is true.

I have rendered the first page of five different test documents into a bitmap. The time spent in AxialShadingContext#getRaster() originally was about 24,5 seconds, with the proposed improvements it is about 4 seconds, i.e. five to six times faster (results might vary with documents and hardware, but the modified implementation is definitely faster)

> AxialShadingContext is slow
> ---------------------------
>
>                 Key: PDFBOX-2117
>                 URL: https://issues.apache.org/jira/browse/PDFBOX-2117
>             Project: PDFBox
>          Issue Type: Bug
>            Reporter: Petr Slaby
>         Attachments: AxialShading.patch
>
>
> 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)