зеркало из https://github.com/github/ruby.git
memory_status.c: Win32 API
* ext/-test-/memory_status/memory_status.c (read_status): use Win32 GetProcessMemoryInfo API. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@56377 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
Родитель
f0e1d72316
Коммит
1bbe67f5f6
|
@ -1,4 +1,7 @@
|
||||||
Sat Oct 8 10:34:25 2016 Nobuyoshi Nakada <nobu@ruby-lang.org>
|
Sat Oct 8 10:54:22 2016 Nobuyoshi Nakada <nobu@ruby-lang.org>
|
||||||
|
|
||||||
|
* ext/-test-/memory_status/memory_status.c (read_status): use
|
||||||
|
Win32 GetProcessMemoryInfo API.
|
||||||
|
|
||||||
* ext/-test-/memory_status/memory_status.c: get memory sizes by
|
* ext/-test-/memory_status/memory_status.c: get memory sizes by
|
||||||
mach task_info system call.
|
mach task_info system call.
|
||||||
|
|
|
@ -1,6 +1,10 @@
|
||||||
case RUBY_PLATFORM
|
case RUBY_PLATFORM
|
||||||
when /darwin/
|
when /darwin/
|
||||||
ok = true
|
ok = true
|
||||||
|
when /mswin/, /mingw/
|
||||||
|
func = "GetProcessMemoryInfo(0, 0, 0)"
|
||||||
|
hdr = "psapi.h"
|
||||||
|
ok = have_func(func, hdr) || have_library("psapi", func, hdr)
|
||||||
end
|
end
|
||||||
|
|
||||||
if ok
|
if ok
|
||||||
|
|
|
@ -4,6 +4,8 @@
|
||||||
# include <mach/message.h>
|
# include <mach/message.h>
|
||||||
# include <mach/kern_return.h>
|
# include <mach/kern_return.h>
|
||||||
# include <mach/task_info.h>
|
# include <mach/task_info.h>
|
||||||
|
#elif defined _WIN32
|
||||||
|
# include <psapi.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
static VALUE cMemoryStatus;
|
static VALUE cMemoryStatus;
|
||||||
|
@ -26,6 +28,15 @@ read_status(VALUE self)
|
||||||
size = ULL2NUM(taskinfo.virtual_size);
|
size = ULL2NUM(taskinfo.virtual_size);
|
||||||
rss = ULL2NUM(taskinfo.resident_size);
|
rss = ULL2NUM(taskinfo.resident_size);
|
||||||
rb_struct_aset(self, INT2FIX(1), rss);
|
rb_struct_aset(self, INT2FIX(1), rss);
|
||||||
|
#elif defined _WIN32
|
||||||
|
VALUE peak;
|
||||||
|
PROCESS_MEMORY_COUNTERS c;
|
||||||
|
c.cb = sizeof(c);
|
||||||
|
if (!GetProcessMemoryInfo(GetCurrentProcess(), &c, c.cb))
|
||||||
|
return Qnil;
|
||||||
|
size = SIZET2NUM(c.PagefileUsage);
|
||||||
|
peak = SIZET2NUM(c.PeakWorkingSetSize);
|
||||||
|
rb_struct_aset(self, INT2FIX(1), peak);
|
||||||
#endif
|
#endif
|
||||||
rb_struct_aset(self, INT2FIX(0), size);
|
rb_struct_aset(self, INT2FIX(0), size);
|
||||||
return self;
|
return self;
|
||||||
|
@ -39,6 +50,8 @@ Init_memory_status(void)
|
||||||
rb_struct_define_under(mMemory, "Status", "size",
|
rb_struct_define_under(mMemory, "Status", "size",
|
||||||
#if defined __APPLE__
|
#if defined __APPLE__
|
||||||
"rss",
|
"rss",
|
||||||
|
#elif defined _WIN32
|
||||||
|
"peak",
|
||||||
#endif
|
#endif
|
||||||
(char *)NULL);
|
(char *)NULL);
|
||||||
rb_define_method(cMemoryStatus, "_update", read_status, 0);
|
rb_define_method(cMemoryStatus, "_update", read_status, 0);
|
||||||
|
|
Загрузка…
Ссылка в новой задаче