<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="http://git.reviewboard.kde.org/r/107529/">http://git.reviewboard.kde.org/r/107529/</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;">My understanding is that this trades memory usage for speed - how much is the 
slowdown on installing watches initially? Can we get most of the memory savings
without the slowdown by just adding the watches in much smaller batches? 
eg. WATCHES_AT_ONCE = 5 or 10?

One other problem: this will still add subdirectories of filtered folders. 

eg, if I have:

dir/subdir/subsubdir
dir2/

and dir is filtered, we don't want to try to add watches for subdir or subsubdir (because they may be over a network and just finding their existence is potentially slow. Also if there are symlinks involved, we may iterate forever.); instead we want to jump straight to dir2. 

This should be easily fixed though. Just call FilterWatch in _k_add_Watches and only add the new iterator if it returns true. Can also resurrect addWatchNoCheck to avoid calling FilterWatch twice unnecessarily.</pre>
 <br />







<p>- Simeon</p>


<br />
<p>On November 30th, 2012, 7:34 a.m., Vishesh Handa wrote:</p>






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

<div>Review request for Nepomuk, Sebastian Trueg and Simeon Bird.</div>
<div>By Vishesh Handa.</div>


<p style="color: grey;"><i>Updated Nov. 30, 2012, 7:34 a.m.</i></p>






<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;">    FileWatch: Avoid calling the addWatch function recursively
    
    A watch needs to be added for each directory. If we try to add the
    watches recursively, then at each level a new string is allocated which
    consumes memory. This memory is eventually freed, but that doesn't
    decrease the filewatch service's memory footprint.
    
    Additionally, this extra memory can be quite large depending on how your
    directory is structed. For me it makes a memory difference of about
    50mb, but bug reports indicate that it can go as high as 2gb.
    
    _k_addWatches() now only adds one watch and then calls itself. It
    additionally traverses the file system tree in a depth first manner in
    order to avoid extra memory allocations. (Breadth first costs more
    memory)
    
    BUG: 310556
</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;">Memory footprint reduced from 65 to 17mb.</pre>
  </td>
 </tr>
</table>



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


 <a href="http://bugs.kde.org/show_bug.cgi?id=310556">310556</a>


</div>


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

 <li>services/filewatch/kinotify.cpp <span style="color: grey">(e540f76)</span></li>

</ul>

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




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








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