<html>
 <body>
  <div style="font-family: Verdana, Arial, Helvetica, Sans-Serif;">
   <table bgcolor="#f9f3c9" width="100%" cellpadding="8" style="border: 1px #c9c399 solid;">
    <tr>
     <td>
      This is an automatically generated e-mail. To reply, visit:
      <a href="https://git.reviewboard.kde.org/r/117785/">https://git.reviewboard.kde.org/r/117785/</a>
     </td>
    </tr>
   </table>
   <br />





<blockquote style="margin-left: 1em; border-left: 2px solid #d0d0d0; padding-left: 10px;">
 <p style="margin-top: 0;">On April 27th, 2014, 2:38 p.m. UTC, <b>Roney Gomes</b> wrote:</p>
 <blockquote style="margin-left: 1em; border-left: 2px solid #d0d0d0; padding-left: 10px;">
  <pre style="white-space: pre-wrap; white-space: -moz-pre-wrap; white-space: -pre-wrap; white-space: -o-pre-wrap; word-wrap: break-word;">Despite the issues highlighted below, your patch looks OK to me. Let's wait for Ian's next comments and see how things behave on OSX.</pre>
 </blockquote>




 <p>On April 27th, 2014, 2:57 p.m. UTC, <b>Thomas Lübking</b> wrote:</p>
 <blockquote style="margin-left: 1em; border-left: 2px solid #d0d0d0; padding-left: 10px;">
  <pre style="white-space: pre-wrap; white-space: -moz-pre-wrap; white-space: -pre-wrap; white-space: -o-pre-wrap; word-wrap: break-word;">There's a pending issue about caching the sprites - the cache must be cleared on theme changes
(just in case: Ian somehow dragged me into this - i had not installed any games nor played kbounce before ;-)</pre>
 </blockquote>





 <p>On April 28th, 2014, 12:56 a.m. UTC, <b>Ian Wadham</b> wrote:</p>
 <blockquote style="margin-left: 1em; border-left: 2px solid #d0d0d0; padding-left: 10px;">
  <pre style="white-space: pre-wrap; white-space: -moz-pre-wrap; white-space: -pre-wrap; white-space: -o-pre-wrap; word-wrap: break-word;">Hey! Hey! Not guilty ... :-) I was just using KBounce as the simplest test-bed for methods to get around Qt Mac's reluctance to use raster graphics and you were helping me get to grips with that problem, Thomas. And I am very grateful for that help. It will fix a whole slew of graphics problems in KDE apps on Apple OS X at one go and will improve the look of KDE apps in general on that platform.

For the record, Roney was my GSoC student in 2012 and KBounce was the first game we ported to newer graphics and sound libraries. Roney is now the maintainer of KBounce. We both got into a mess with porting KBounce, largely because the old game was using some methods that happened to have the same names as QGV methods, but different intent of course. That produced some unbelievable graphics glitches. Time was running on and I suggested we leave the QPainter usage as it was, rather than finish the job by operating the pixmap items through QGraphicsScene. But how did redraw() become paint(...) and introduce the unintended recursion?</pre>
 </blockquote>





 <p>On April 28th, 2014, 8:06 p.m. UTC, <b>Thomas Lübking</b> wrote:</p>
 <blockquote style="margin-left: 1em; border-left: 2px solid #d0d0d0; padding-left: 10px;">
  <pre style="white-space: pre-wrap; white-space: -moz-pre-wrap; white-space: -pre-wrap; white-space: -o-pre-wrap; word-wrap: break-word;">Not complaining either :)
I just wanted to point out that I've limited experience on the game (well, "had" ;-)

> But how did redraw() become paint(...) and introduce the unintended recursion?
I don't know, but ::setPixmap() alters the scene and that causes an update in the recursion, so it must not be called (unconditionally) from the paint cycle.
(It updates on the next eventcycle so that you can "foo->setPixmap(bar); bar->setPixmap(foo);" and only get one update of course.)</pre>
 </blockquote>





 <p>On April 28th, 2014, 11:12 p.m. UTC, <b>Ian Wadham</b> wrote:</p>
 <blockquote style="margin-left: 1em; border-left: 2px solid #d0d0d0; padding-left: 10px;">
  <pre style="white-space: pre-wrap; white-space: -moz-pre-wrap; white-space: -pre-wrap; white-space: -o-pre-wrap; word-wrap: break-word;">> There's a pending issue about caching the sprites - the cache must be cleared on theme changes

Not sure what you meant by this, Thomas, but AFAIK the caches in all KDE Games accumulate themed pixmaps and different sized pixmaps of the same theme until a file-size limit is reached. This makes theme changes and resizes get faster as time goes on. We used to hand-code all that, but now libkdegames KGameRenderer does it.</pre>
 </blockquote>








</blockquote>

<pre style="white-space: pre-wrap; white-space: -moz-pre-wrap; white-space: -pre-wrap; white-space: -o-pre-wrap; word-wrap: break-word;">I placed a local static cache Pixmap to avoid creating pixmaps - i however also looked up the sprite code and the size parameter seems completely ignored (for now) so it basically just prevents the (at 60Hz and for w*h tiles, though ...) dictionary lookup and the additional CPU drop probably simply stems from there.</pre>
<br />










<p>- Thomas</p>


<br />
<p>On April 28th, 2014, 7:35 p.m. UTC, Thomas Lübking wrote:</p>








<table bgcolor="#fefadf" width="100%" cellspacing="0" cellpadding="8" style="background-image: url('https://git.reviewboard.kde.org/static/rb/images/review_request_box_top_bg.ab6f3b1072c9.png'); background-position: left top; background-repeat: repeat-x; border: 1px black solid;">
 <tr>
  <td>

<div>Review request for KDE Games, Ian Wadham and Roney Gomes.</div>
<div>By Thomas Lübking.</div>


<p style="color: grey;"><i>Updated April 28, 2014, 7:35 p.m.</i></p>









<div style="margin-top: 1.5em;">
 <b style="color: #575012; font-size: 10pt;">Repository: </b>
kbounce
</div>


<h1 style="color: #575012; font-size: 10pt; margin-top: 1.5em;">Description </h1>
 <table width="100%" bgcolor="#ffffff" cellspacing="0" cellpadding="10" style="border: 1px solid #b8b5a0">
 <tr>
  <td>
   <pre style="margin: 0; padding: 0; white-space: pre-wrap; white-space: -moz-pre-wrap; white-space: -pre-wrap; white-space: -o-pre-wrap; word-wrap: break-word;">Roney, I hope your the correct addressee - Ian referecend some "Roney" in a private mail.
The patch looks bigger than it is, i had to partially fix coding style in order to read through it, sorry.

The MAJOR issue with the code is that it causes recursions on the eventloop by altering graphicsitems from the paint() call ("setPixmap()"), so i scrathced that.
It seems a cause was that a full repaint was forced by setting some invisible fullsize pixmap item, while the only requirement for this was actually when finishing a wall - so i replaced that with an explicit full update call on occasion.

Also all non-raster graphicssystems HATE QPixmap::fill(Qt::transparent) causing a 24bit -> 32bit change and it's esp. bad on the nvidia driver.
So i reduced that (and allocation) by re-using the old (ARGB) pixmap on a 64x64 alignment.
Ian, you might esp. check that impact on OSX.

Last I cached the sprites, seemed reducing cpu on permanent paint (but i didn't really measure)

I'll also mark & comment the actual changes in the diff.</pre>
  </td>
 </tr>
</table>


<h1 style="color: #575012; font-size: 10pt; margin-top: 1.5em;">Testing </h1>
<table width="100%" bgcolor="#ffffff" cellspacing="0" cellpadding="10" style="border: 1px solid #b8b5a0">
 <tr>
  <td>
   <pre style="margin: 0; padding: 0; white-space: pre-wrap; white-space: -moz-pre-wrap; white-space: -pre-wrap; white-space: -o-pre-wrap; word-wrap: break-word;">100% cpu -> 1-2% cpu and more fluid =)
No visible regression spotted.</pre>
  </td>
 </tr>
</table>


<h1 style="color: #575012; font-size: 10pt; margin-top: 1.5em;">Diffs</b> </h1>
<ul style="margin-left: 3em; padding-left: 0;">

 <li>board.h <span style="color: grey">(75f66d4)</span></li>

 <li>board.cpp <span style="color: grey">(46b923b)</span></li>

 <li>gameobject.h <span style="color: grey">(9fb5788)</span></li>

 <li>gamewidget.cpp <span style="color: grey">(23cb6ba)</span></li>

 <li>wall.h <span style="color: grey">(c56efa1)</span></li>

 <li>wall.cpp <span style="color: grey">(df487a0)</span></li>

</ul>

<p><a href="https://git.reviewboard.kde.org/r/117785/diff/" style="margin-left: 3em;">View Diff</a></p>







  </td>
 </tr>
</table>








  </div>
 </body>
</html>