Bug#782636: Feature request: add an ELAPSED column

2015-04-23 Thread Eugene V. Lyubimkin
Control: tags -1 upstream
Control: forwarded -1 https://github.com/hishamhm/htop/issues/187

Hello,

On 15.04.2015 12:53, Stéphane Glondu wrote:
 It would be nice if htop had the possibility to output the time
 elapsed since the start of a process (as ps -o etime does).
 
 Attached is a patch that implements this feature. It is probably not
 optimal, but it is a proof of concept that it is possible.

Thank you for the proposal, I just forwarded it upstream.


-- 
Eugene V. Lyubimkin aka JackYF, JID: jackyf(maildog)jabber.fsfe.org
C++ GNU/Linux userspace developer, Debian Developer


-- 
To UNSUBSCRIBE, email to debian-bugs-dist-requ...@lists.debian.org
with a subject of unsubscribe. Trouble? Contact listmas...@lists.debian.org



Bug#782636: Feature request: add an ELAPSED column

2015-04-15 Thread Stéphane Glondu
Package: htop
Version: 1.0.3-1
Severity: wishlist
Tags: patch

Dear Maintainer,

It would be nice if htop had the possibility to output the time
elapsed since the start of a process (as ps -o etime does).

Attached is a patch that implements this feature. It is probably not
optimal, but it is a proof of concept that it is possible.

Cheers,

-- 
Stéphane

-- System Information:
Debian Release: 8.0
  APT prefers testing
  APT policy: (990, 'testing'), (500, 'unstable'), (1, 'experimental')
Architecture: amd64 (x86_64)
Foreign Architectures: i386

Kernel: Linux 3.16.0-4-amd64 (SMP w/8 CPU cores)
Locale: LANG=fr_FR.UTF-8, LC_CTYPE=fr_FR.UTF-8 (charmap=UTF-8)
Shell: /bin/sh linked to /bin/dash
Init: systemd (via /run/systemd/system)

Versions of packages htop depends on:
ii  libc6 2.19-17
ii  libncursesw5  5.9+20140913-1+b1
ii  libtinfo5 5.9+20140913-1+b1

htop recommends no packages.

Versions of packages htop suggests:
ii  ltrace  0.7.3-4
ii  strace  4.9-2

-- no debconf information
From 16694355e1a4116584975ea08e9a7f2207842bd7 Mon Sep 17 00:00:00 2001
From: Stephane Glondu st...@glondu.net
Date: Wed, 15 Apr 2015 11:12:12 +0200
Subject: [PATCH] Add ELAPSED

---
 Process.c | 8 
 Process.h | 2 ++
 ProcessList.c | 5 +
 3 files changed, 15 insertions(+)

diff --git a/Process.c b/Process.c
index 4efd854..173e04a 100644
--- a/Process.c
+++ b/Process.c
@@ -85,6 +85,7 @@ typedef enum ProcessField_ {
OOM,
#endif
IO_PRIORITY,
+   ELAPSED,
LAST_PROCESSFIELD
 } ProcessField;
 
@@ -115,6 +116,7 @@ typedef struct Process_ {
float percent_mem;
char* user;
 
+   unsigned long long int etime;
unsigned long long int utime;
unsigned long long int stime;
unsigned long long int cutime;
@@ -221,6 +223,7 @@ const char *Process_fieldNames[] = {
OOM,
 #endif
IO_PRIORITY,
+   ELAPSED,
 *** report bug! ***
 };
 
@@ -278,6 +281,7 @@ const char *Process_fieldTitles[] = {
OOM ,
 #endif
IO ,
+ELAPSED ,
 *** report bug! ***
 };
 
@@ -568,6 +572,7 @@ static void Process_writeField(Process* this, RichString* str, ProcessField fiel
   }
   break;
}
+   case ELAPSED: Process_printTime(str, this-etime); return;
case UTIME: Process_printTime(str, this-utime); return;
case STIME: Process_printTime(str, this-stime); return;
case CUTIME: Process_printTime(str, this-cutime); return;
@@ -680,6 +685,7 @@ Process* Process_new(struct ProcessList_ *pl) {
this-showChildren = true;
this-show = true;
this-updated = false;
+   this-etime = 0;
this-utime = 0;
this-stime = 0;
this-comm = NULL;
@@ -845,6 +851,8 @@ int Process_compare(const void* v1, const void* v2) {
   return (p2-percent_cpu  p1-percent_cpu ? 1 : -1);
case PERCENT_MEM:
   return (p2-m_resident - p1-m_resident);
+   case ELAPSED:
+  return (p2-etime - p1-etime);
case UTIME:
   return (p2-utime - p1-utime);
case STIME:
diff --git a/Process.h b/Process.h
index 19083fd..56dfa0d 100644
--- a/Process.h
+++ b/Process.h
@@ -64,6 +64,7 @@ typedef enum ProcessField_ {
OOM,
#endif
IO_PRIORITY,
+   ELAPSED,
LAST_PROCESSFIELD
 } ProcessField;
 
@@ -94,6 +95,7 @@ typedef struct Process_ {
float percent_mem;
char* user;
 
+   unsigned long long int etime;
unsigned long long int utime;
unsigned long long int stime;
unsigned long long int cutime;
diff --git a/ProcessList.c b/ProcessList.c
index d362115..f374581 100644
--- a/ProcessList.c
+++ b/ProcessList.c
@@ -722,6 +722,8 @@ static bool ProcessList_readCmdlineFile(Process* process, const char* dirname, c
 }
 
 
+static double jiffy = 0.0;
+
 static bool ProcessList_processEntries(ProcessList* this, const char* dirname, Process* parent, double period, struct timeval tv) {
DIR* dir;
struct dirent* entry;
@@ -798,6 +800,9 @@ static bool ProcessList_processEntries(ProcessList* this, const char* dirname, P
   if (isnan(process-percent_cpu)) process-percent_cpu = 0.0;
   process-percent_mem = (process-m_resident * PAGE_SIZE_KB) / (double)(this-totalMem) * 100.0;
 
+  if(jiffy == 0.0) jiffy = sysconf(_SC_CLK_TCK);
+  process-etime = difftime(time(NULL), process-starttime_ctime) * jiffy;
+
   if(!existingProcess) {
 
  if (! ProcessList_statProcessDir(process, dirname, name, curTime))
-- 
2.1.4