[cairo] Slow down when running newer Cairo on ARM with NEON

Joshua Watt jpewhacker at gmail.com
Tue Apr 16 23:09:58 UTC 2019


On Tue, Apr 16, 2019, 5:37 PM Bill Spitzak <spitzak at gmail.com> wrote:

>
>
> On Tue, Apr 16, 2019 at 1:53 PM Joshua Watt <jpewhacker at gmail.com> wrote:
>
>> On Tue, 2019-04-16 at 12:01 -0700, Bill Spitzak wrote:
>>
>> I think you can force the interpolation to bilinear or impulse. However
>> you are going to revert to 1980's style scaling with extreme aliasing.
>>
>>
>> Hmm, this seems to be empirically false (at least when using ARM+NEON and
>> pixman 0.34). If I revert the cairo change GOOD quality images both look
>> fine and render quickly. If I change my application to use FAST quality,
>> then I certainly see the 1980's graphics with aliasing and it is even
>> faster still, but I'd rather find a way to keep the good quality images
>> without the 70% performance hit.
>>
>
> Try BILINEAR which should be what GOOD was doing before.
>

Ah thanks. I'll give it a try


>
>>
>> This is some of my work from 4 years ago and unfortunately it never got
>> finished due to rejection by the Pixman maintainers (who I think may not be
>> working on it any more). This was to implement a two-pass algorithm in
>> Pixman that could also do non-affine (perspective) transforms. It should be
>> considerably faster for any down-scaling, even if the filter is set to
>> bilinear. The current code is not 2-pass (in effect both passes are run for
>> every output pixel, rather than saving the result of the first pass, this
>> is in fact worse than convolving with a 2-D filter), but at least produces
>> modern results.
>>
>> The problem is that the filters cannot be specified as arrays of weights,
>> due to the need to choose arbitrary filter sizes, both to allow non-affine
>> transforms and just because most 2-pass algorithms require unexpected
>> filter sizes (such as the derivative along the x axis of the input but the
>> y axis of the output). IMHO the most practical way to get this is to just
>> make "GOOD" and "BEST" select two implementation-chosen filters (BILINEAR
>> and IMPULSE would also be allowed) and scrap any ability to specify the
>> filter more accurately by the client. This seemed to produce considerable
>> pushback in pixman and was rejected and I gave up after succeeding in
>> getting the api implemented in Cairo.
>>
>>
>> Perhaps the NEON implementation in pixman is doing something more modern
>> and thus is fast and good quality? I will admit that image interpolation
>> algorithms aren't my area of expertise and I don't really follow the
>> details of what you are saying here, I'm just reporting what I see
>> empirically :)
>>
>>
>> On Tue, Apr 16, 2019 at 10:38 AM Joshua Watt <jpewhacker at gmail.com>
>> wrote:
>>
>> Hello,
>>
>> I recently upgrade from Cairo 1.12 to 1.14 (yes, I know these are old
>> versions), and after doing so noticed a approximately 70% reduction in
>> performance when rendering scenes that make heavy use of image scaling.
>> I did some digging and tracking the offending commit down to the
>> commit: f337342c8 ("V6 image: Use convolution filters for sample
>> reconstruction when downscaling")
>>
>> It appears that this commit is attempting to improve the quality of
>> downscaled images by implementing new interpolation algorithms in cairo
>> instead of using the pixman algorithms. My theory is that this is much
>> slower on ARM processes that have NEON support because pixman has
>> special implementations of the interpolations algorithms written to
>> take advantage of NEON, while the new cairo implementations do not.
>>
>> Does anyone have any ideas on what a good path forward would be to
>> restore the ARM+NEON performance? I am planning on trying to reproduce
>> this with a newer version of cairo to see if it is still a problem, but
>> I suspect it will be based on the lack of any significant changes in
>> this code to either cairo or pixman.
>>
>> --
>> Joshua Watt <JPEWhacker at gmail.com>
>>
>> --
>>
>> Joshua Watt <JPEWhacker at gmail.com>
>>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.cairographics.org/archives/cairo/attachments/20190416/2946c5a0/attachment.html>


More information about the cairo mailing list