D13814: Speedup sort
Stefan BrĂ¼ns
noreply at phabricator.kde.org
Thu Jul 12 12:22:11 BST 2018
bruns added a comment.
In D13814#290556 <https://phabricator.kde.org/D13814#290556>, @markg wrote:
> Is there even a need to have n QCollator objects?
> I'm talking about a QCollator _within_ a given view. Each view could obviously have it's own collator due to different view settings.
Strictly speaking you need one collator per thread (it is reentrant (save the bug), but not thread-safe). As long as the collator objects are not modified, each one is just the d-pointer, as QCollator is CoW.
Copying a clean QCollator is cheap. Default-constructing one and modifying it is expensive - each one has to be initialize the underlying ICU (actually, this happens twice for each one, once on construction, once after the m_collator.setFoo(...) calls).
Using a const reference, as done here, is even slightly cheaper. But doing so is also undefined behaviour - QCollator is reentrant, but not thread-safe. We get away with it by using the forced initialization, which avoids the UB (UB only happens when the QCollator is dirty).
When the fix in https://codereview.qt-project.org/#/c/234359/3//ALL,unified is applied, it is no longer necessary to force the `init()` under the premise each thread uses its own private collator object (which is implicitly shared).
REPOSITORY
R318 Dolphin
REVISION DETAIL
https://phabricator.kde.org/D13814
To: jtamate, #dolphin, #frameworks, markg, elvisangelaccio, bruns
Cc: elvisangelaccio, apol, bruns, markg, kfm-devel, spoorun, navarromorales, firef, andrebarros, emmanuelp
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.kde.org/pipermail/kde-frameworks-devel/attachments/20180712/d0ee9b68/attachment.html>
More information about the Kde-frameworks-devel
mailing list