[prev in list] [next in list] [prev in thread] [next in thread] 

List:       kde-commits
Subject:    Re: [calligra] krita/image: Revert "Let dirty rect to be a QRegion
From:       Dmitry Kazakov <dimula73 () gmail ! com>
Date:       2011-06-08 18:43:34
Message-ID: BANLkTimVgnL4yiSjtj=2qR9fH5535Tuofw () mail ! gmail ! com
[Download RAW message or body]

I think it would be quite good idea to make a rule to add the author of
reverted patch to CC at least. I might have been unavailable on irc, but I
still have to know about such reverts. I knew about it quite accidentally.

The commit might slow down painting with very small brushes, but it
optimizes big brushes. The revert makes just the opposite. So i would try to
make some benchmarking before doing anything with this code.

On Wed, Jun 1, 2011 at 7:41 PM, Boudewijn Rempt <boud@valdyas.org> wrote:

> Git commit 1a847037f48ce47d221c5abb351fd2d918d66dee by Boudewijn Rempt.
> Committed on 30/05/2011 at 16:08.
> Pushed by rempt into branch 'master'.
>
> Revert "Let dirty rect to be a QRegion instead of a QRect"
>
> This reverts commit a56c0ab64ca1290b034e863439319d38daddefab.
>
> This commit caused a visible performance degradation according to
> research done by Cyrille..
>
> M  +25   -5    krita/image/kis_painter.cc
>
> http://commits.kde.org/calligra/1a847037f48ce47d221c5abb351fd2d918d66dee
>
> diff --git a/krita/image/kis_painter.cc b/krita/image/kis_painter.cc
> index 652f66e..3328aff 100644
> --- a/krita/image/kis_painter.cc
> +++ b/krita/image/kis_painter.cc
> @@ -79,6 +79,7 @@ struct KisPainter::Private {
>     KoUpdater*                  progressUpdater;
>
>     QRegion                     dirtyRegion;
> +    QRect                       dirtyRect;
>     KisPaintOp*                 paintOp;
>     QRect                       bounds;
>     KoColor                     paintColor;
> @@ -97,6 +98,7 @@ struct KisPainter::Private {
>     KoColorProfile*             profile;
>     const KoCompositeOp*        compositeOp;
>     QBitArray                   channelFlags;
> +    bool                        useBoundingDirtyRect;
>     const KoAbstractGradient*   gradient;
>     KisPaintOpPresetSP          paintOpPreset;
>     QImage                      polygonMaskImage;
> @@ -153,6 +155,9 @@ void KisPainter::init()
>     d->maskImageHeight = 255;
>     d->mirrorHorizontaly = false;
>     d->mirrorVerticaly = false;
> +
> +    KConfigGroup cfg = KGlobal::config()->group("");
> +    d->useBoundingDirtyRect = cfg.readEntry("aggregate_dirty_regions",
> true);
>  }
>
>  KisPainter::~KisPainter()
> @@ -243,9 +248,16 @@ KisTransaction* KisPainter::takeTransaction()
>
>  QRegion KisPainter::takeDirtyRegion()
>  {
> -    QRegion r = d->dirtyRegion;
> -    d->dirtyRegion = QRegion();
> -    return r;
> +    if (d->useBoundingDirtyRect) {
> +        QRegion r(d->dirtyRect);
> +        d->dirtyRegion = QRegion();
> +        d->dirtyRect = QRect();
> +        return r;
> +    } else {
> +        QRegion r = d->dirtyRegion;
> +        d->dirtyRegion = QRegion();
> +        return r;
> +    }
>  }
>
>
> @@ -257,11 +269,19 @@ QRegion KisPainter::addDirtyRect(const QRect & rc)
>         return d->dirtyRegion;
>     }
>
> -    d->dirtyRegion += r;
> -    return d->dirtyRegion;
> +    if (d->useBoundingDirtyRect) {
> +        d->dirtyRect = d->dirtyRect.united(r);
> +        return QRegion(d->dirtyRect);
> +    } else {
> +        d->dirtyRegion += QRegion(r);
> +        return d->dirtyRegion;
> +    }
>  }
>
>
> +
> +
> +
>  void KisPainter::bitBltWithFixedSelection(qint32 dstX, qint32 dstY,
>                                           const KisPaintDeviceSP srcDev,
>                                           const KisFixedPaintDeviceSP
> selection,
>
>


-- 
Dmitry Kazakov

[Attachment #3 (text/html)]

I think it would be quite good idea to make a rule to add the author of reverted \
patch to CC at least. I might have been unavailable on irc, but I still have to know \
about such reverts. I knew about it quite accidentally.<br> <br>The commit might slow \
down painting with very small brushes, but it optimizes big brushes. The revert makes \
just the opposite. So i would try to make some benchmarking before doing anything \
with this code.<br><br><div class="gmail_quote"> On Wed, Jun 1, 2011 at 7:41 PM, \
Boudewijn Rempt <span dir="ltr">&lt;<a \
href="mailto:boud@valdyas.org">boud@valdyas.org</a>&gt;</span> wrote:<br><blockquote \
class="gmail_quote" style="margin: 0pt 0pt 0pt 0.8ex; border-left: 1px solid rgb(204, \
204, 204); padding-left: 1ex;"> Git commit 1a847037f48ce47d221c5abb351fd2d918d66dee \
by Boudewijn Rempt.<br> Committed on 30/05/2011 at 16:08.<br>
Pushed by rempt into branch &#39;master&#39;.<br>
<br>
Revert &quot;Let dirty rect to be a QRegion instead of a QRect&quot;<br>
<br>
This reverts commit a56c0ab64ca1290b034e863439319d38daddefab.<br>
<br>
This commit caused a visible performance degradation according to<br>
research done by Cyrille..<br>
<br>
M   +25    -5      krita/image/kis_painter.cc<br>
<br>
<a href="http://commits.kde.org/calligra/1a847037f48ce47d221c5abb351fd2d918d66dee" \
target="_blank">http://commits.kde.org/calligra/1a847037f48ce47d221c5abb351fd2d918d66dee</a><br>
 <br>
diff --git a/krita/image/kis_painter.cc b/krita/image/kis_painter.cc<br>
index 652f66e..3328aff 100644<br>
--- a/krita/image/kis_painter.cc<br>
+++ b/krita/image/kis_painter.cc<br>
@@ -79,6 +79,7 @@ struct KisPainter::Private {<br>
       KoUpdater*                           progressUpdater;<br>
<br>
       QRegion                               dirtyRegion;<br>
+      QRect                                  dirtyRect;<br>
       KisPaintOp*                         paintOp;<br>
       QRect                                  bounds;<br>
       KoColor                               paintColor;<br>
@@ -97,6 +98,7 @@ struct KisPainter::Private {<br>
       KoColorProfile*                   profile;<br>
       const KoCompositeOp*            compositeOp;<br>
       QBitArray                            channelFlags;<br>
+      bool                                    useBoundingDirtyRect;<br>
       const KoAbstractGradient*    gradient;<br>
       KisPaintOpPresetSP               paintOpPreset;<br>
       QImage                                 polygonMaskImage;<br>
@@ -153,6 +155,9 @@ void KisPainter::init()<br>
       d-&gt;maskImageHeight = 255;<br>
       d-&gt;mirrorHorizontaly = false;<br>
       d-&gt;mirrorVerticaly = false;<br>
+<br>
+      KConfigGroup cfg = KGlobal::config()-&gt;group(&quot;&quot;);<br>
+      d-&gt;useBoundingDirtyRect = \
cfg.readEntry(&quot;aggregate_dirty_regions&quot;, true);<br>  }<br>
<br>
  KisPainter::~KisPainter()<br>
@@ -243,9 +248,16 @@ KisTransaction* KisPainter::takeTransaction()<br>
<br>
  QRegion KisPainter::takeDirtyRegion()<br>
  {<br>
-      QRegion r = d-&gt;dirtyRegion;<br>
-      d-&gt;dirtyRegion = QRegion();<br>
-      return r;<br>
+      if (d-&gt;useBoundingDirtyRect) {<br>
+            QRegion r(d-&gt;dirtyRect);<br>
+            d-&gt;dirtyRegion = QRegion();<br>
+            d-&gt;dirtyRect = QRect();<br>
+            return r;<br>
+      } else {<br>
+            QRegion r = d-&gt;dirtyRegion;<br>
+            d-&gt;dirtyRegion = QRegion();<br>
+            return r;<br>
+      }<br>
  }<br>
<br>
<br>
@@ -257,11 +269,19 @@ QRegion KisPainter::addDirtyRect(const QRect &amp; rc)<br>
             return d-&gt;dirtyRegion;<br>
       }<br>
<br>
-      d-&gt;dirtyRegion += r;<br>
-      return d-&gt;dirtyRegion;<br>
+      if (d-&gt;useBoundingDirtyRect) {<br>
+            d-&gt;dirtyRect = d-&gt;dirtyRect.united(r);<br>
+            return QRegion(d-&gt;dirtyRect);<br>
+      } else {<br>
+            d-&gt;dirtyRegion += QRegion(r);<br>
+            return d-&gt;dirtyRegion;<br>
+      }<br>
  }<br>
<br>
<br>
+<br>
+<br>
+<br>
  void KisPainter::bitBltWithFixedSelection(qint32 dstX, qint32 dstY,<br>
                                                                const \
                KisPaintDeviceSP srcDev,<br>
                                                                const \
KisFixedPaintDeviceSP selection,<br> <br>
</blockquote></div><br><br clear="all"><br>-- <br>Dmitry Kazakov<br>



[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic