Cygwin: get_mem_values: Return number of Cygwin pages in arguments

Simplify callers accordingly.

Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
This commit is contained in:
Corinna Vinschen 2018-08-17 20:31:24 +02:00
parent 7b70195f5d
commit c2fa05899d
1 changed files with 15 additions and 9 deletions

View File

@ -1214,12 +1214,10 @@ format_process_status (void *data, char *&destbuf)
if (!get_mem_values (p->dwProcessId, vmsize, vmrss, vmtext, vmdata, if (!get_mem_values (p->dwProcessId, vmsize, vmrss, vmtext, vmdata,
vmlib, vmshare)) vmlib, vmshare))
return 0; return 0;
size_t page_size = wincap.page_size ();
vmsize *= page_size; vmrss *= page_size; vmdata *= page_size;
vmtext *= page_size; vmlib *= page_size;
/* The real uid value for *this* process is stored at cygheap->user.real_uid /* The real uid value for *this* process is stored at cygheap->user.real_uid
but we can't get at the real uid value for any other process, so but we can't get at the real uid value for any other process, so
just fake it as p->uid. Similar for p->gid. */ just fake it as p->uid. Similar for p->gid. */
size_t kb_per_page = wincap.allocation_granularity() / 1024;
destbuf = (char *) crealloc_abort (destbuf, strlen (cmd) + 320); destbuf = (char *) crealloc_abort (destbuf, strlen (cmd) + 320);
return __small_sprintf (destbuf, "Name:\t%s\n" return __small_sprintf (destbuf, "Name:\t%s\n"
"State:\t%c (%s)\n" "State:\t%c (%s)\n"
@ -1245,8 +1243,9 @@ format_process_status (void *data, char *&destbuf)
p->ppid, p->ppid,
p->uid, p->uid, p->uid, p->uid, p->uid, p->uid, p->uid, p->uid,
p->gid, p->gid, p->gid, p->gid, p->gid, p->gid, p->gid, p->gid,
vmsize >> 10, 0, vmrss >> 10, vmdata >> 10, 0, vmsize * kb_per_page, 0UL, vmrss * kb_per_page,
vmtext >> 10, vmlib >> 10, vmdata * kb_per_page, 0UL, vmtext * kb_per_page,
vmlib * kb_per_page,
0, 0, _my_tls.sigmask 0, 0, _my_tls.sigmask
); );
} }
@ -1256,16 +1255,13 @@ format_process_statm (void *data, char *&destbuf)
{ {
_pinfo *p = (_pinfo *) data; _pinfo *p = (_pinfo *) data;
size_t vmsize = 0, vmrss = 0, vmtext = 0, vmdata = 0, vmlib = 0, vmshare = 0; size_t vmsize = 0, vmrss = 0, vmtext = 0, vmdata = 0, vmlib = 0, vmshare = 0;
size_t page_scale;
if (!get_mem_values (p->dwProcessId, vmsize, vmrss, vmtext, vmdata, if (!get_mem_values (p->dwProcessId, vmsize, vmrss, vmtext, vmdata,
vmlib, vmshare)) vmlib, vmshare))
return 0; return 0;
page_scale = wincap.allocation_granularity() / wincap.page_size();
destbuf = (char *) crealloc_abort (destbuf, 96); destbuf = (char *) crealloc_abort (destbuf, 96);
return __small_sprintf (destbuf, "%lu %lu %lu %lu %lu %lu 0\n", return __small_sprintf (destbuf, "%lu %lu %lu %lu %lu %lu 0\n",
vmsize / page_scale, vmrss / page_scale, vmshare / page_scale, vmsize, vmrss, vmshare, vmtext, vmlib, vmdata);
vmtext / page_scale, vmlib / page_scale, vmdata / page_scale);
} }
extern "C" { extern "C" {
@ -1446,6 +1442,8 @@ get_mem_values (DWORD dwProcessId, size_t &vmsize, unsigned long &vmrss,
VM_COUNTERS vmc; VM_COUNTERS vmc;
PMEMORY_WORKING_SET_LIST p; PMEMORY_WORKING_SET_LIST p;
SIZE_T n = 0x4000, length; SIZE_T n = 0x4000, length;
const size_t page_scale = wincap.allocation_granularity()
/ wincap.page_size();
/* This appears to work despite MSDN claiming that QueryWorkingSet requires /* This appears to work despite MSDN claiming that QueryWorkingSet requires
PROCESS_QUERY_INFORMATION *and* PROCESS_VM_READ. Since we're trying to do PROCESS_QUERY_INFORMATION *and* PROCESS_VM_READ. Since we're trying to do
@ -1510,6 +1508,14 @@ get_mem_values (DWORD dwProcessId, size_t &vmsize, unsigned long &vmrss,
goto out; goto out;
} }
vmsize = vmc.PagefileUsage / wincap.page_size (); vmsize = vmc.PagefileUsage / wincap.page_size ();
/* Return number of Cygwin pages. Page size in Cygwin is equivalent
to Windows allocation_granularity. */
vmsize = howmany (vmsize, page_scale);
vmrss = howmany (vmrss, page_scale);
vmshare = howmany (vmshare, page_scale);
vmtext = howmany (vmtext, page_scale);
vmlib = howmany (vmlib, page_scale);
vmdata = howmany (vmdata, page_scale);
res = true; res = true;
out: out:
free (p); free (p);