From d797a04adc5a76146ecff36e17b2a8658b0a5022 Mon Sep 17 00:00:00 2001 From: Jan Arve Saether Date: Tue, 22 Sep 2015 13:36:22 +0200 Subject: Speed up printing when drawing opaque primitives. We only need to merge the rectangles into a region if we are painting a non-opaque a primitive with alpha. Performance measurements QT_print_speed_bug.zip: Excluding patch: 244686 ms Including patch: 5070 ms This is an improvement of 48x (for debug build) Task-number: QTBUG-48334 Change-Id: I03684c6e7d8a5fb039ea6477ed1a860f09e1b08c Reviewed-by: Andy Shaw --- src/printsupport/kernel/qpaintengine_alpha_p.h | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) (limited to 'src/printsupport/kernel/qpaintengine_alpha_p.h') diff --git a/src/printsupport/kernel/qpaintengine_alpha_p.h b/src/printsupport/kernel/qpaintengine_alpha_p.h index 2becad7379..49a9938e56 100644 --- a/src/printsupport/kernel/qpaintengine_alpha_p.h +++ b/src/printsupport/kernel/qpaintengine_alpha_p.h @@ -99,7 +99,9 @@ public: QRegion m_alphargn; QRegion m_cliprgn; - QRegion m_dirtyrgn; + mutable QRegion m_cachedDirtyRgn; + mutable int m_numberOfCachedRects; + QVector m_dirtyRects; bool m_hasalpha; bool m_alphaPen; @@ -115,7 +117,7 @@ public: QPen m_pen; void addAlphaRect(const QRectF &rect); - void addDirtyRect(const QRectF &rect) { m_dirtyrgn |= rect.toAlignedRect(); } + void addDirtyRect(const QRectF &rect) { m_dirtyRects.append(rect.toAlignedRect()); } bool canSeeTroughBackground(bool somethingInRectHasAlpha, const QRectF &rect) const; QRectF addPenWidth(const QPainterPath &path); -- cgit v1.2.3