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





 <pre style="white-space: pre-wrap; white-space: -moz-pre-wrap; white-space: -pre-wrap; white-space: -o-pre-wrap; word-wrap: break-word;"><p style="padding: 0;text-rendering: inherit;margin: 0;line-height: inherit;white-space: inherit;">+1 </p>
<p style="padding: 0;text-rendering: inherit;margin: 0;line-height: inherit;white-space: inherit;">I don't see the reason to clear the cache on the copy assignment, but I don't dare to give a "ship it" as I'm not that familiar with the code.</p></pre>
 <br />









<p>- Kåre Särs</p>


<br />
<p>On maj 19th, 2015, 9:49 f.m. UTC, Milian Wolff wrote:</p>








<table bgcolor="#fefadf" width="100%" cellspacing="0" cellpadding="12" style="border: 1px #888a85 solid; border-radius: 6px; -moz-border-radius: 6px; -webkit-border-radius: 6px;">
 <tr>
  <td>

<div>Review request for KDE Frameworks, Laurent Montel, Martin Tobias Holmedahl Sandsmark, and Kåre Särs.</div>
<div>By Milian Wolff.</div>


<p style="color: grey;"><i>Updated maj 19, 2015, 9:49 f.m.</i></p>









<div style="margin-top: 1.5em;">
 <b style="color: #575012; font-size: 10pt;">Repository: </b>
sonnet
</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;">This removes a serious performance penalty from enabling on-the-fly spell
checking in KTextEditor. For some reason, the copy assignment of a Speller
object invalidated the internal cache which happened very often from the Kate
code base. Now, the cache is kept valid and reused, and the performance is good
again. I'm not sure whether this has any unintentional side-effects, but the
tests work fine and spell checking in KatePart still looks good as well,
and is now fast again.

E.g. previously I easily ended up with heaptrack reports such as this one:

2284529 calls to allocation functions with 16.23MB peak consumption from
HashMgr::add_word(char const*, int, int, unsigned short*, int, char const*, bool)
  in /usr/lib/libhunspell-1.3.so.0
1978045 calls with 2.30MB peak consumption from:
    HashMgr::load_tables(char const*, char const*)
      in /usr/lib/libhunspell-1.3.so.0
    HashMgr::HashMgr(char const*, char const*, char const*)
      in /usr/lib/libhunspell-1.3.so.0
    Hunspell::Hunspell(char const*, char const*, char const*)
      in /usr/lib/libhunspell-1.3.so.0
    HunspellDict
      at .../sonnet/src/plugins/hunspell/hunspelldict.cpp:36
      in /home/milian/projects/compiled/kf5/lib64/plugins/kf5/sonnet/hunspell.so
    HunspellClient::createSpeller(QString const&)
      at .../sonnet/src/plugins/hunspell/hunspellclient.cpp:43
      in /home/milian/projects/compiled/kf5/lib64/plugins/kf5/sonnet/hunspell.so
    Sonnet::Loader::createSpeller(QString const&, QString const&) const
      at .../sonnet/src/core/loader.cpp:103
      in /home/milian/projects/compiled/kf5/lib64/libKF5SonnetCore.so.5
    Sonnet::Speller::Private::updateDict()
      at .../sonnet/src/core/speller.cpp:64
      in /home/milian/projects/compiled/kf5/lib64/libKF5SonnetCore.so.5
    Sonnet::Speller::Private::recreateDict()
      at .../sonnet/src/core/speller.cpp:79
      in /home/milian/projects/compiled/kf5/lib64/libKF5SonnetCore.so.5
    Sonnet::Speller::operator=(Sonnet::Speller const&)
      at .../sonnet/src/core/speller.cpp:111
      in /home/milian/projects/compiled/kf5/lib64/libKF5SonnetCore.so.5
    Sonnet::BackgroundChecker::setSpeller(Sonnet::Speller const&)
      at .../sonnet/src/core/backgroundchecker.cpp:131
      in /home/milian/projects/compiled/kf5/lib64/libKF5SonnetCore.so.5
    KateOnTheFlyChecker::performSpellCheck()
      at .../ktexteditor/src/spellcheck/ontheflycheck.cpp:405
      in /home/milian/projects/compiled/kf5/lib64/libKF5TextEditor.so.5</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>src/core/speller.cpp <span style="color: grey">(3903b42ebb4f7cb98a049fcf7a291c74dd9457e0)</span></li>

</ul>

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






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







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