summaryrefslogtreecommitdiff
path: root/ext/-test-
diff options
context:
space:
mode:
Diffstat (limited to 'ext/-test-')
-rw-r--r--ext/-test-/memory_status/extconf.rb4
-rw-r--r--ext/-test-/memory_status/memory_status.c13
2 files changed, 17 insertions, 0 deletions
diff --git a/ext/-test-/memory_status/extconf.rb b/ext/-test-/memory_status/extconf.rb
index 8bfbfe6321..1c1096d8f4 100644
--- a/ext/-test-/memory_status/extconf.rb
+++ b/ext/-test-/memory_status/extconf.rb
@@ -1,6 +1,10 @@
case RUBY_PLATFORM
when /darwin/
ok = true
+when /mswin/, /mingw/
+ func = "GetProcessMemoryInfo(0, 0, 0)"
+ hdr = "psapi.h"
+ ok = have_func(func, hdr) || have_library("psapi", func, hdr)
end
if ok
diff --git a/ext/-test-/memory_status/memory_status.c b/ext/-test-/memory_status/memory_status.c
index 813a8349c4..80e2648992 100644
--- a/ext/-test-/memory_status/memory_status.c
+++ b/ext/-test-/memory_status/memory_status.c
@@ -4,6 +4,8 @@
# include <mach/message.h>
# include <mach/kern_return.h>
# include <mach/task_info.h>
+#elif defined _WIN32
+# include <psapi.h>
#endif
static VALUE cMemoryStatus;
@@ -26,6 +28,15 @@ read_status(VALUE self)
size = ULL2NUM(taskinfo.virtual_size);
rss = ULL2NUM(taskinfo.resident_size);
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
rb_struct_aset(self, INT2FIX(0), size);
return self;
@@ -39,6 +50,8 @@ Init_memory_status(void)
rb_struct_define_under(mMemory, "Status", "size",
#if defined __APPLE__
"rss",
+#elif defined _WIN32
+ "peak",
#endif
(char *)NULL);
rb_define_method(cMemoryStatus, "_update", read_status, 0);