[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