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

List:       kde-commits
Subject:    KDE/kdebase/workspace/libs/ksysguard
From:       John Tapsell <john.tapsell () kdemail ! net>
Date:       2009-07-23 23:51:11
Message-ID: 1248393071.523709.13893.nullmailer () svn ! kde ! org
[Download RAW message or body]

SVN commit 1001709 by johnflux:

Show IO rate in the tooltips


 M  +30 -0     processcore/process.cpp  
 M  +13 -0     processcore/process.h  
 M  +34 -3     processcore/processes.cpp  
 M  +9 -1      processui/ProcessModel.cc  


--- trunk/KDE/kdebase/workspace/libs/ksysguard/processcore/process.cpp \
#1001708:1001709 @@ -281,4 +281,34 @@
     ioCharactersActuallyWritten = number;
     changes |= Process::IO;
 }
+void KSysGuard::Process::setIoCharactersReadRate(long number) {
+    if(number == ioCharactersReadRate) return;
+    ioCharactersReadRate = number;
+    changes |= Process::IO;
+}
+void KSysGuard::Process::setIoCharactersWrittenRate(long number) {
+    if(number == ioCharactersWrittenRate) return;
+    ioCharactersWrittenRate = number;
+    changes |= Process::IO;
+}
+void KSysGuard::Process::setIoReadSyscallsRate(long number) {
+    if(number == ioReadSyscallsRate) return;
+    ioReadSyscallsRate = number;
+    changes |= Process::IO;
+}
+void KSysGuard::Process::setIoWriteSyscallsRate(long number) {
+    if(number == ioWriteSyscallsRate) return;
+    ioWriteSyscallsRate = number;
+    changes |= Process::IO;
+}
+void KSysGuard::Process::setIoCharactersActuallyReadRate(long number) {
+    if(number == ioCharactersActuallyReadRate) return;
+    ioCharactersActuallyReadRate = number;
+    changes |= Process::IO;
+}
+void KSysGuard::Process::setIoCharactersActuallyWrittenRate(long number) {
+    if(number == ioCharactersActuallyWrittenRate) return;
+    ioCharactersActuallyWrittenRate = number;
+    changes |= Process::IO;
+}
 
--- trunk/KDE/kdebase/workspace/libs/ksysguard/processcore/process.h #1001708:1001709
@@ -89,6 +89,13 @@
     void setIoCharactersActuallyRead(qlonglong number); ///< Number of bytes which \
                this process really did cause to be fetched from the storage layer.
     void setIoCharactersActuallyWritten(qlonglong number); ///< Attempt to count the \
number of bytes which this process caused to be sent to the storage layer.  
+    void setIoCharactersReadRate(long number); ///< The rate, in bytes per second, \
which this task has caused to be read from storage +    void \
setIoCharactersWrittenRate(long number); ///< The rate, in bytes per second, which \
this task has caused, or shall cause to be written to disk.  +    void \
setIoReadSyscallsRate(long number); ///< Number of read I/O operations per second, \
i.e. syscalls like read() and pread(). +    void setIoWriteSyscallsRate(long number); \
///< Number of write I/O operations per second, i.e. syscalls like write() and \
pwrite(). +    void setIoCharactersActuallyReadRate(long number); ///< Number of \
bytes per second which this process really did cause to be fetched from the storage \
layer. +    void setIoCharactersActuallyWrittenRate(long number); ///< Attempt to \
count the number of bytes per second which this process caused to be sent to the \
storage layer. +
     /* The member variables are made to public for efficiency, but should only be \
read from. */  QString login; 
     qlonglong uid; 
@@ -127,6 +134,12 @@
     qlonglong ioCharactersActuallyRead;
     qlonglong ioCharactersActuallyWritten;
 
+    long ioCharactersReadRate;
+    long ioCharactersWrittenRate;
+    long ioReadSyscallsRate;
+    long ioWriteSyscallsRate;
+    long ioCharactersActuallyReadRate;
+    long ioCharactersActuallyWrittenRate;
 
     QList<Process *> children;  ///< A list of all the direct children that the \
process has.  Children of children are not listed here, so note that children_pids <= \
                numChildren
     QTime timeKillWasSent; ///< This is usually a NULL time.  When trying to kill a \
                process, this is the time that the kill signal was sent to the \
                process.
--- trunk/KDE/kdebase/workspace/libs/ksysguard/processcore/processes.cpp \
#1001708:1001709 @@ -63,6 +63,7 @@
       long mElapsedTimeMilliSeconds; //The number of milliseconds  (1000ths of a \
second) that passed since the last update  
       int ref; //Reference counter.  When it reaches 0, delete.
+      Processes::UpdateFlags mUpdateFlags;
   };
 
   class Processes::StaticPrivate
@@ -207,8 +208,25 @@
 
 bool Processes::updateProcessInfo(Process *ps) {
     //Now we can actually get the process info
-    long oldUserTime = ps->userTime;
-    long oldSysTime = ps->sysTime;
+    qlonglong oldUserTime = ps->userTime;
+    qlonglong oldSysTime = ps->sysTime;
+
+    qlonglong oldIoCharactersRead = 0;
+    qlonglong oldIoCharactersWritten = 0;
+    qlonglong oldIoReadSyscalls = 0;
+    qlonglong oldIoWriteSyscalls = 0;
+    qlonglong oldIoCharactersActuallyRead = 0;
+    qlonglong oldIoCharactersActuallyWritten = 0;
+
+    if(d->mUpdateFlags.testFlag(Processes::IOStatistics)) {
+        oldIoCharactersRead = ps->ioCharactersRead;
+        oldIoCharactersWritten = ps->ioCharactersWritten;
+        oldIoReadSyscalls = ps->ioReadSyscalls;
+        oldIoWriteSyscalls = ps->ioWriteSyscalls;
+        oldIoCharactersActuallyRead = ps->ioCharactersActuallyRead;
+        oldIoCharactersActuallyWritten = ps->ioCharactersActuallyWritten;
+    }
+
     ps->changes = Process::Nothing;
     bool success = d->mAbstractProcesses->updateProcessInfo(ps->pid, ps);
 
@@ -239,6 +257,14 @@
                 p= p->parent;
             }
         }
+        if(d->mUpdateFlags.testFlag(Processes::IOStatistics)) {
+            ps->setIoCharactersReadRate((ps->ioCharactersRead - oldIoCharactersRead) \
* 1000.0 / elapsedTime); +            \
ps->setIoCharactersWrittenRate((ps->ioCharactersWritten - oldIoCharactersWritten) * \
1000.0 / elapsedTime); +            ps->setIoReadSyscallsRate((ps->ioReadSyscalls - \
oldIoReadSyscalls) * 1000.0 / elapsedTime); +            \
ps->setIoWriteSyscallsRate((ps->ioWriteSyscalls - oldIoWriteSyscalls) * 1000.0 / \
elapsedTime); +            \
ps->setIoCharactersActuallyReadRate((ps->ioCharactersActuallyRead - \
oldIoCharactersActuallyRead) * 1000.0 / elapsedTime); +            \
ps->setIoCharactersActuallyWrittenRate((ps->ioCharactersActuallyWritten - \
oldIoCharactersActuallyWritten) * 1000.0 / elapsedTime); +        }
     }
     return success;
 }
@@ -291,6 +317,11 @@
 
 void Processes::updateAllProcesses(long updateDurationMS, Processes::UpdateFlags \
updateFlags)  {
+    if(d->ref == 1)
+        d->mUpdateFlags = updateFlags;
+    else
+        d->mUpdateFlags |= updateFlags;
+
     if(d->mElapsedTimeMilliSeconds == -1) {
         //First time update has been called
         d->mLastUpdated.start();
@@ -301,7 +332,7 @@
         d->mElapsedTimeMilliSeconds = d->mLastUpdated.restart();
     }
 
-    d->mAbstractProcesses->updateAllProcesses(updateFlags);
+    d->mAbstractProcesses->updateAllProcesses(d->mUpdateFlags);
 }
 
 void Processes::processesUpdated() {
--- trunk/KDE/kdebase/workspace/libs/ksysguard/processui/ProcessModel.cc \
#1001708:1001709 @@ -632,6 +632,7 @@
                         "<tr><td>Actual Bytes Read</td><td>The number of bytes which \
this process really did cause to be fetched from the storage layer. Done at the \
submit_bio() level, so it is accurate for block-backed filesystems. This may not give \
sensible values for NFS and CIFS filesystems.</td></tr>"  "<tr><td>Actual Bytes \
Written</td><td>Attempt to count the number of bytes which this process caused to be \
sent to the storage layer. This is done at page-dirtying time.</td>"  "</table><p>"
+                        "The number in brackets shows the rate at which each value \
is changing, determined from taking the difference between the previous value and the \
new value, and dividing by the update interval.<p>"  "<i>Technical information: \
</i>This data is collected from /proc/*/io and is documented further in \
Documentation/accounting and Documentation/filesystems/proc.txt in the kernel \
source.");  default:
                 return QVariant();
@@ -1069,7 +1070,14 @@
         case HeadingIoWrite:
         case HeadingIoRead: {
             QString tooltip = "<qt><p style='white-space:pre'>";
-            tooltip += i18n("Characters read: %1<br>Characters written: %2<br>Read \
syscalls: %3<br>Write syscalls: %4<br>Actual bytes read: %5<br>Actual bytes written: \
%6", KGlobal::locale()->formatByteSize(process->ioCharactersRead), \
KGlobal::locale()->formatByteSize(process->ioCharactersWritten), \
QString::number(process->ioReadSyscalls), QString::number(process->ioWriteSyscalls), \
KGlobal::locale()->formatByteSize(process->ioCharactersActuallyRead), \
KGlobal::locale()->formatByteSize(process->ioCharactersActuallyWritten)); +           \
//FIXME - use the formatByteRate functions when added +            tooltip += \
i18n("Characters read: %1 (%2 KiB/s)<br>Characters written: %3 (%4 KiB/s)<br>Read \
syscalls: %5 (%6 s⁻ )<br>Write syscalls: %7 (%8 s⁻ )<br>Actual bytes read: %9 \
(%10 KiB/s)<br>Actual bytes written: %11 (%12 KiB/s)", +                    \
KGlobal::locale()->formatByteSize(process->ioCharactersRead), \
QString::number(process->ioCharactersReadRate/1024),  +                    \
KGlobal::locale()->formatByteSize(process->ioCharactersWritten), \
QString::number(process->ioCharactersWrittenRate/1024), +                    \
QString::number(process->ioReadSyscalls), \
QString::number(process->ioReadSyscallsRate), +                    \
QString::number(process->ioWriteSyscalls), \
QString::number(process->ioWriteSyscallsRate)).arg( +                    \
KGlobal::locale()->formatByteSize(process->ioCharactersActuallyRead), \
QString::number(process->ioCharactersActuallyReadRate/1024 ), +                    \
KGlobal::locale()->formatByteSize(process->ioCharactersActuallyWritten), \
QString::number(process->ioCharactersActuallyWrittenRate/1024));  return tooltip;
         }
         case HeadingXTitle: {


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

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