KisPainter::paintPolygon used in paintops

Boudewijn Rempt boud at
Fri Mar 13 11:56:47 CET 2009

On Fri, 13 Mar 2009, at wrote:

> Hi,
> I'm using paintPolygon in dynabrush and in spray. 
> For paintops it has one disadvantage. It is really slow.
> I made callgrind log [1] where I use it in modified spray [2].
> To speed it up about of 4%, line 728 in kis_painter:
> KisPaintDeviceSP polygon = new KisPaintDevice(d->device->colorSpace(), 
> "polygon");
> Why is string used? When I call paintPolygon in paintop, it is called e.g. 600 

Ouch! That's bad -- the string is only used to give the paint device a name, which
is handy for debugging. Remove it! I'll check the rest of krita for places where
this really shouldn't be done.

> times in a stroke. Creating QString is quit slow. Is that string really 
> needed? What is its purpose? Could we use e.g. int for id, if it is id?
> That method create a lot of objects like KisSelection,QImage, QPainter, QColor
> What would be the solution for paintops? 
> Made own class for paintPolygon? Or optimalize paintPolygon somehow in 
> KisPainter (I don't have idea how to cache created objects in KisPainter :( )?

It is possible -- as long as you keep using the same kispainter object, and use
that object in only one thread. Otherwise, you're sunk.

> I use paintPolygon for painting shapes like filled aliased circle, 

I'd use paintEllipse for that -- but that calles paintPolygon in the end, too.

> polygon,etc..

I'm sure there are plenty of opportunities to tune this. I'll try to find some
time next week to look at the callgrind trace -- this weekend is going to be
horribly busy.


More information about the kimageshop mailing list