Review Request 122392: Fix Klipper Performance issues

Filip Wieladek Wattos at gmail.com
Wed Feb 8 12:03:05 UTC 2017


-----------------------------------------------------------
This is an automatically generated e-mail. To reply, visit:
https://git.reviewboard.kde.org/r/122392/
-----------------------------------------------------------

(Updated Feb. 8, 2017, 12:03 p.m.)


Status
------

This change has been discarded.


Review request for Plasma.


Repository: plasma-workspace


Description
-------

This patch fixes multiple klipper issues:

* Moves filtering logic into a background task. This makes Klipper responsive while the clipboard is being filtered.
  Previously, Klipper would "hang" while it was filtering the results. This was worse when there were no matches as
  Klipper had to go through the entire history. THe computation is immediate on small history sets, but significant
  on larger sets with larger strings in the clipboard
* Provides a progress bar at the top to indicate the filtering process.
* Simplifies the code significantly, by:
   * Moving filtering in a separate class file
   * Cleaning up Popup proxy to build the menu directly using a QList
   * Removing the "index" magic in KlipperPopup. Now we maintain a list of history actions which can be easily cleared.
   * Removed explicit deletion of the "more" submenus, as these are owned by the parent menus and should be removed
     automatically
* Avoids flickering of Klipper while removing and inserting actions by forcing the height and width during the update.
* Fixes a potential memory leak. The QActions for the KlipperPopup were only removed, but never deleted. The API used
  to add actions addAction(QAction*) was not taking ownership of the action. This is fixed by deleting the actions
  manually when clearing.
* Fixes a performance issue during menu rendering when truncating large strings. The method call elidedText() can be
  slow on large pieces of text. This is worked around by creating a much smaller string of the prefix and suffix of the
  string. We use the average character width to compute the approximate amount of characters which can be displayed
  and use twice as much. (this is because in corner cases, such as |||| we might end up with a string which is not
  long enough).
  
This also fixes the bug https://bugs.kde.org/show_bug.cgi?id=238084


Diffs
-----

  klipper/CMakeLists.txt a08f062480b15f32f049e2d0d0e311dbe2964c02 
  klipper/filterresult.h PRE-CREATION 
  klipper/filterresult.cpp PRE-CREATION 
  klipper/history.h 1bfd0424714ff79d93206a74cb7e4214a6c8c652 
  klipper/history.cpp 9640c23b0cf06dd0135ca573aea0819e2788b852 
  klipper/historyfilter.h PRE-CREATION 
  klipper/historyfilter.cpp PRE-CREATION 
  klipper/klipperpopup.h 6f7b30747562b5e7227504b8c53be2863686072b 
  klipper/klipperpopup.cpp 0b2f11d6d6d95e96ece0ac7b386fae2492ad0efd 
  klipper/popupproxy.h f33f62c117a08ddbe6b761da4c2e28e51b985044 
  klipper/popupproxy.cpp 12dd3dd637d0ff9d134fb71237d6f0d3bcc5bd77 

Diff: https://git.reviewboard.kde.org/r/122392/diff/


Testing
-------


File Attachments
----------------

A screencast with foreground processing vs background processing
  https://git.reviewboard.kde.org/media/uploaded/files/2015/02/08/1d998fd9-57fd-4997-92f8-11b8e038e795__screencast.mp4


Thanks,

Filip Wieladek

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.kde.org/pipermail/plasma-devel/attachments/20170208/a1a57e6c/attachment.html>


More information about the Plasma-devel mailing list