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:
parent
7b70195f5d
commit
c2fa05899d
|
@ -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);
|
||||||
|
|
Loading…
Reference in New Issue