[prev in list] [next in list] [prev in thread] [next in thread]
List: kde-frameworks-devel
Subject: Re: Review Request 127236: Leverage QDir to know what's in a KIconThemeDir
From: Nick Shaforostoff <shafff () ukr ! net>
Date: 2016-03-14 15:54:20
Message-ID: 20160314155420.22520.59364 () mimi ! kde ! org
[Download RAW message or body]
--===============7220582740806681975==
MIME-Version: 1.0
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: 7bit
> On March 1, 2016, 4:37 p.m., Aleix Pol Gonzalez wrote:
> > Eh... I just realized it's not 100% correct. We have a test \
> > (testUnknownIconNotCached) that fails, unsure how I didn't see it yesterday.
> > The problem with this one is that we are not reacting when icons are introduced \
> > at runtime. I tried adding a sneaky QFileSystemWatcher/KDirWatch on KIconTheme \
> > but it didn't signal.
> > Should I just discard the patch?
>
> David Edmundson wrote:
> Could you compare modified time of mBaseDirThemeDir and reload if needed?
> it'd be one extra stat on the directory each time, but still a saving from before
>
> Aleix Pol Gonzalez wrote:
> That doesn't work, for some reason...
> ```
> // Install the existing icon by copying.
> + qDebug() << "xxxxxxxx1" << QFileInfo(actionIconsDir).lastModified();
> QVERIFY(QFile::copy(QStringLiteral(":/test-22x22.png"), newIconPath));
> + qDebug() << "xxxxxxxx2" << QFileInfo(actionIconsDir).lastModified();
> ```
>
> Both return the same value.
>
> Nick Shaforostoff wrote:
> there is a difference between changing a file from inside the program and changing \
> it from outside.
> did you make the change externally when testing QFileSystemWatcher-based solution?
>
> Nick Shaforostoff wrote:
> also for the QFileInfo::lastModified() there may be just not enough time between \
> the tests, so try adding a 2-minute sleep there
> David Faure wrote:
> QFileInfo::lastModified() doesn't include milliseconds yet. There is a pending \
> patch for Qt to implement that (as part of a much bigger task which also adds \
> QFile::setFileTime()), but yeah, that's the problem. Right now you need a 1s sleep \
> whenever unittesting changes to lastModified().
> QTest::qWait(1000); // remove this once lastModified includes ms
>
> Or at least "up to 1s, until the end of the current second", I have code for that \
> in the kdirwatch unittest for instance.
> Another alternative, hacking the modification time on files (using utime, like I do \
> in ksycocatest.cpp)
> (all this to avoid tests that take 15 seconds in total, I like the policy that a \
> test should run in under 5s -- otherwise people stop running them)
> Nick Shaforostoff wrote:
> so, any news on this one?
even simple solution of discarding the cache after certain point of time (e.g. 10 \
seconds) and going uncached code path would give us the benefit without introducing \
regression, right?
- Nick
-----------------------------------------------------------
This is an automatically generated e-mail. To reply, visit:
https://git.reviewboard.kde.org/r/127236/#review93023
-----------------------------------------------------------
On March 1, 2016, 3:25 a.m., Aleix Pol Gonzalez wrote:
>
> -----------------------------------------------------------
> This is an automatically generated e-mail. To reply, visit:
> https://git.reviewboard.kde.org/r/127236/
> -----------------------------------------------------------
>
> (Updated March 1, 2016, 3:25 a.m.)
>
>
> Review request for KDE Frameworks and Christoph Feck.
>
>
> Repository: kiconthemes
>
>
> Description
> -------
>
> At the moment we're playing Battleship to see if an icon is present in a \
> subdirectory. This means that we are checking on every directory if there's an icon \
> that matches the size with a said name on every request.
> This can be seen easily with strace:
> ```
> $ strace kwrite |& grep ENOENT | wc -l
> 6212
> ```
> After the patch:
> ```
> $ strace kwrite |& grep ENOENT | wc -l
> 1993
> ```
> We reduce these accesses to let QDir keep the list of files inside the directory \
> (that was already being generated at some point, it just was being discarded).
>
> Diffs
> -----
>
> src/kicontheme.cpp 0996054
>
> Diff: https://git.reviewboard.kde.org/r/127236/diff/
>
>
> Testing
> -------
>
> Builds, tests still pass, applications start noticeably faster.
>
>
> Thanks,
>
> Aleix Pol Gonzalez
>
>
--===============7220582740806681975==
MIME-Version: 1.0
Content-Type: text/html; charset="utf-8"
Content-Transfer-Encoding: 7bit
<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/127236/">https://git.reviewboard.kde.org/r/127236/</a>
</td>
</tr>
</table>
<br />
<blockquote style="margin-left: 1em; border-left: 2px solid #d0d0d0; padding-left: \
10px;"> <p style="margin-top: 0;">On March 1st, 2016, 4:37 p.m. UTC, <b>Aleix Pol \
Gonzalez</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;"><p style="padding: 0;text-rendering: inherit;margin: 0;line-height: \
inherit;white-space: inherit;">Eh... I just realized it's not 100% correct. We have a \
test (testUnknownIconNotCached) that fails, unsure how I didn't see it yesterday.</p> \
<p style="padding: 0;text-rendering: inherit;margin: 0;line-height: \
inherit;white-space: inherit;">The problem with this one is that we are not reacting \
when icons are introduced at runtime. I tried adding a sneaky \
QFileSystemWatcher/KDirWatch on KIconTheme but it didn't signal.</p> <p \
style="padding: 0;text-rendering: inherit;margin: 0;line-height: inherit;white-space: \
inherit;">Should I just discard the patch?</p></pre> </blockquote>
<p>On March 1st, 2016, 5:42 p.m. UTC, <b>David Edmundson</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;"><p style="padding: \
0;text-rendering: inherit;margin: 0;line-height: inherit;white-space: inherit;">Could \
you compare modified time of mBaseDirThemeDir and reload if needed? it'd be one extra \
stat on the directory each time, but still a saving from before</p></pre> \
</blockquote>
<p>On March 1st, 2016, 7:07 p.m. UTC, <b>Aleix Pol Gonzalez</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;"><p style="padding: \
0;text-rendering: inherit;margin: 0;line-height: inherit;white-space: inherit;">That \
doesn't work, for some reason...</p> <p style="padding: 0;text-rendering: \
inherit;margin: 0;line-height: inherit;white-space: inherit;"><div class="codehilite" \
style="background: #f8f8f8"><pre style="line-height: 125%"> <span \
style="color: #666666">//</span> <span style="color: #008000; font-weight: \
bold">Install</span> <span style="color: #008000; font-weight: bold">the</span> <span \
style="color: #008000; font-weight: bold">existing</span> <span style="color: \
#008000; font-weight: bold">icon</span> <span style="color: #008000; font-weight: \
bold">by</span> <span style="color: #008000; font-weight: bold">copying</span><span \
style="color: #666666">.</span> <span style="color: #666666">+</span> <span \
style="color: #008000; font-weight: bold">qDebug</span><span style="color: \
#666666">()</span> <span style="color: #666666"><<</span> <span style="color: \
#BA2121">"xxxxxxxx1"</span> <span style="color: #666666"><<</span> \
<span style="color: #008000; font-weight: bold">QFileInfo</span><span style="color: \
#666666">(</span><span style="color: #008000; font-weight: \
bold">actionIconsDir</span><span style="color: #666666">)</span><span style="color: \
#0000FF; font-weight: bold">.lastModified</span><span style="color: \
#666666">();</span> <span style="color: #008000; font-weight: \
bold">QVERIFY</span><span style="color: #666666">(</span><span style="color: #008000; \
font-weight: bold">QFile</span><span style="color: #666666">:</span><span \
style="color: #AA22FF">:copy</span><span style="color: #666666">(</span><span \
style="color: #008000; font-weight: bold">QStringLiteral</span><span style="color: \
#666666">(</span><span style="color: \
#BA2121">":/test-22x22.png"</span><span style="color: #666666">),</span> \
<span style="color: #008000; font-weight: bold">newIconPath</span><span style="color: \
#666666">));</span> <span style="color: #666666">+</span> <span style="color: \
#008000; font-weight: bold">qDebug</span><span style="color: #666666">()</span> <span \
style="color: #666666"><<</span> <span style="color: \
#BA2121">"xxxxxxxx2"</span> <span style="color: #666666"><<</span> \
<span style="color: #008000; font-weight: bold">QFileInfo</span><span style="color: \
#666666">(</span><span style="color: #008000; font-weight: \
bold">actionIconsDir</span><span style="color: #666666">)</span><span style="color: \
#0000FF; font-weight: bold">.lastModified</span><span style="color: \
#666666">();</span> </pre></div>
</p>
<p style="padding: 0;text-rendering: inherit;margin: 0;line-height: \
inherit;white-space: inherit;">Both return the same value.</p></pre> </blockquote>
<p>On March 1st, 2016, 9:06 p.m. UTC, <b>Nick Shaforostoff</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;"><p style="padding: \
0;text-rendering: inherit;margin: 0;line-height: inherit;white-space: inherit;">there \
is a difference between changing a file from inside the program and changing it from \
outside.</p> <p style="padding: 0;text-rendering: inherit;margin: 0;line-height: \
inherit;white-space: inherit;">did you make the change externally when testing \
QFileSystemWatcher-based solution?</p></pre> </blockquote>
<p>On March 1st, 2016, 9:12 p.m. UTC, <b>Nick Shaforostoff</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;"><p style="padding: \
0;text-rendering: inherit;margin: 0;line-height: inherit;white-space: inherit;">also \
for the QFileInfo::lastModified() there may be just not enough time between the \
tests, so try adding a 2-minute sleep there</p></pre> </blockquote>
<p>On March 2nd, 2016, 8:28 a.m. UTC, <b>David Faure</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;"><p style="padding: \
0;text-rendering: inherit;margin: 0;line-height: inherit;white-space: \
inherit;">QFileInfo::lastModified() doesn't include milliseconds yet. There is a \
pending patch for Qt to implement that (as part of a much bigger task which also adds \
QFile::setFileTime()), but yeah, that's the problem. Right now you need a 1s sleep \
whenever unittesting changes to lastModified().</p> <p style="padding: \
0;text-rendering: inherit;margin: 0;line-height: inherit;white-space: inherit;"><div \
class="codehilite" style="background: #f8f8f8"><pre style="line-height: 125%"><span \
style="color: #008000; font-weight: bold">QTest</span><span style="color: \
#666666">:</span><span style="color: #AA22FF">:qWait</span><span style="color: \
#666666">(</span><span style="color: #008000; font-weight: bold">1000</span><span \
style="color: #666666">);</span> <span style="color: #666666">//</span> <span \
style="color: #008000; font-weight: bold">remove</span> <span style="color: #008000; \
font-weight: bold">this</span> <span style="color: #008000; font-weight: \
bold">once</span> <span style="color: #008000; font-weight: bold">lastModified</span> \
<span style="color: #008000; font-weight: bold">includes</span> <span style="color: \
#008000; font-weight: bold">ms</span> </pre></div>
</p>
<p style="padding: 0;text-rendering: inherit;margin: 0;line-height: \
inherit;white-space: inherit;">Or at least "up to 1s, until the end of the current \
second", I have code for that in the kdirwatch unittest for instance.</p> <p \
style="padding: 0;text-rendering: inherit;margin: 0;line-height: inherit;white-space: \
inherit;">Another alternative, hacking the modification time on files (using utime, \
like I do in ksycocatest.cpp)</p> <p style="padding: 0;text-rendering: \
inherit;margin: 0;line-height: inherit;white-space: inherit;">(all this to avoid \
tests that take 15 seconds in total, I like the policy that a test should run in \
under 5s -- otherwise people stop running them)</p></pre> </blockquote>
<p>On March 14th, 2016, 3:51 p.m. UTC, <b>Nick Shaforostoff</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;"><p style="padding: \
0;text-rendering: inherit;margin: 0;line-height: inherit;white-space: inherit;">so, \
any news on this one?</p></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;"><p style="padding: \
0;text-rendering: inherit;margin: 0;line-height: inherit;white-space: inherit;">even \
simple solution of discarding the cache after certain point of time (e.g. 10 seconds) \
and going uncached code path would give us the benefit without introducing \
regression, right?</p></pre> <br />
<p>- Nick</p>
<br />
<p>On March 1st, 2016, 3:25 a.m. UTC, Aleix Pol Gonzalez 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 and Christoph Feck.</div>
<div>By Aleix Pol Gonzalez.</div>
<p style="color: grey;"><i>Updated March 1, 2016, 3:25 a.m.</i></p>
<div style="margin-top: 1.5em;">
<b style="color: #575012; font-size: 10pt;">Repository: </b>
kiconthemes
</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;"><p style="padding: 0;text-rendering: inherit;margin: 0;line-height: \
inherit;white-space: inherit;">At the moment we're playing Battleship to see if an \
icon is present in a subdirectory. This means that we are checking on every directory \
if there's an icon that matches the size with a said name on every request.</p> <p \
style="padding: 0;text-rendering: inherit;margin: 0;line-height: inherit;white-space: \
inherit;">This can be seen easily with strace:</p> <p style="padding: \
0;text-rendering: inherit;margin: 0;line-height: inherit;white-space: inherit;"><div \
class="codehilite" style="background: #f8f8f8"><pre style="line-height: 125%"><span \
style="color: #19177C">$ </span>strace kwrite |& grep ENOENT | wc -l 6212
</pre></div>
</p>
<p style="padding: 0;text-rendering: inherit;margin: 0;line-height: \
inherit;white-space: inherit;">After the patch: </p> <p style="padding: \
0;text-rendering: inherit;margin: 0;line-height: inherit;white-space: inherit;"><div \
class="codehilite" style="background: #f8f8f8"><pre style="line-height: 125%"><span \
style="color: #19177C">$ </span>strace kwrite |& grep ENOENT | wc -l 1993
</pre></div>
</p>
<p style="padding: 0;text-rendering: inherit;margin: 0;line-height: \
inherit;white-space: inherit;">We reduce these accesses to let QDir keep the list of \
files inside the directory (that was already being generated at some point, it just \
was being discarded).</p></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;"><p style="padding: 0;text-rendering: inherit;margin: 0;line-height: \
inherit;white-space: inherit;">Builds, tests still pass, applications start \
noticeably faster.</p></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/kicontheme.cpp <span style="color: grey">(0996054)</span></li>
</ul>
<p><a href="https://git.reviewboard.kde.org/r/127236/diff/" style="margin-left: \
3em;">View Diff</a></p>
</td>
</tr>
</table>
</div>
</body>
</html>
--===============7220582740806681975==--
[Attachment #3 (text/plain)]
_______________________________________________
Kde-frameworks-devel mailing list
Kde-frameworks-devel@kde.org
https://mail.kde.org/mailman/listinfo/kde-frameworks-devel
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic