[prev in list] [next in list] [prev in thread] [next in thread] 

List:       kde-bugs-dist
Subject:    [Bug 170156] New: Akregator unresponsive due to expensive
From:       Eduardo Habkost <ehabkost () raisama ! net>
Date:       2008-08-31 22:56:35
Message-ID: bug-170156-17878 () http ! bugs ! kde ! org/
[Download RAW message or body]

http://bugs.kde.org/show_bug.cgi?id=170156

           Summary: Akregator unresponsive due to expensive
                    Feed::totalCount() calculation
           Product: akregator
           Version: unspecified
          Platform: Fedora RPMs
        OS/Version: Linux
            Status: NEW
          Severity: normal
          Priority: NOR
         Component: general
        AssignedTo: akregator-devel@lists.sourceforge.net
        ReportedBy: ehabkost@raisama.net


Version:            (using KDE 4.1.0)
OS:                Linux
Installed from:    Fedora RPMs

I've been testing KDE 4.1 and noticed Akregator is a little unresponsive
sometimes. Some investigation revealed it was using too much CPU simply
calculate the totalCount field on the list of feeds.

I have feed articles history of five years on my Akregator archive, that makes
the Feed::totalCount method too expensive because it walks on every article on
every feed.

The oprofile output of when I was experiencing irregular freezes (around a
quarter of a second freezes, every few seconds) revealed:

CPU: Core Solo / Duo, speed 1833 MHz (estimated)
Counted CPU_CLK_UNHALTED events (Unhalted clock cycles) with a unit mask of
0x00 (Unhalted core cycles) count 100000
samples  %        linenr info                 app name                 symbol
name
4673     41.7680  article.cpp:247             akregatorpart.so        
Akregator::Article::isDeleted() const
985       8.8041  feed.cpp:764                akregatorpart.so        
Akregator::Feed::totalCount() const
584       5.2199  folder.cpp:133              akregatorpart.so        
Akregator::Folder::feeds() const
230       2.0558  univ.cpp:72                 akregator_mk4storage_plugin.so
c4_BaseArray::SetLength(int)
227       2.0290  mk4plugin.cpp:0             akregator_mk4storage_plugin.so
__i686.get_pc_thunk.bx
211       1.8859  remap.cpp:168               akregator_mk4storage_plugin.so
c4_HashViewer::CalcHash(c4_Cursor) const
168       1.5016  column.cpp:1448             akregator_mk4storage_plugin.so
c4_ColIter::Next()
159       1.4212  handler.cpp:51              akregator_mk4storage_plugin.so
c4_Handler::GetBytes(int, c4_Bytes&, bool)
136       1.2156  feed.cpp:725                akregatorpart.so        
Akregator::Feed::unread() const
131       1.1709  (no location information)   akregatorpart.so         .plt
131       1.1709  treenode.cpp:192            akregatorpart.so        
Akregator::TreeNode::id() const
[...]


I've made an experimental patch to make class Feed precalculate the
totalCount() results to avoid recalculating it too frequently. It seems to make
it more responsible, but I still need to get some numbers to back that up.


-- 
Configure bugmail: http://bugs.kde.org/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
You are watching all bug changes.
[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic