sg_page_stats *sg_get_page_stats_diff() { sg_page_stats *page_ptr; static sg_page_stats page_stats_diff; if(page_stats_uninit) { page_ptr=sg_get_page_stats(); if(page_ptr==NULL) { return NULL; } page_stats_uninit=0; return page_ptr; } page_stats_diff.pages_pagein=page_stats.pages_pagein; page_stats_diff.pages_pageout=page_stats.pages_pageout; page_stats_diff.systime=page_stats.systime; page_ptr=sg_get_page_stats(); if(page_ptr==NULL) { return NULL; } page_stats_diff.pages_pagein=page_stats.pages_pagein-page_stats_diff.pages_pagein; page_stats_diff.pages_pageout=page_stats.pages_pageout-page_stats_diff.pages_pageout; page_stats_diff.systime=page_stats.systime-page_stats_diff.systime; return &page_stats_diff; }
void populate_page() { sg_page_stats *page; page = use_diffs ? sg_get_page_stats_diff() : sg_get_page_stats(); if (page != NULL) { add_stat(LONG_LONG, &page->pages_pagein, "page", "in", NULL); add_stat(LONG_LONG, &page->pages_pageout, "page", "out", NULL); add_stat(TIME_T, &page->systime, "page", "systime", NULL); } }
static void populate_page(void) { sg_page_stats *page; page = use_diffs ? sg_get_page_stats_diff(NULL) : sg_get_page_stats(NULL); if (page != NULL) { add_stat(STAT_TYPE_UNSIGNED_LONG_LONG, &page->pages_pagein, "page", "in", NULL); add_stat(STAT_TYPE_UNSIGNED_LONG_LONG, &page->pages_pageout, "page", "out", NULL); add_stat(STAT_TYPE_TIME_T, &page->systime, "page", "systime", NULL); } }
sg_page_stats *sg_get_page_stats_diff(){ static sg_page_stats page_stats_diff; #ifndef WIN32 sg_page_stats *page_ptr; if(page_stats_uninit){ page_ptr=sg_get_page_stats(); if(page_ptr==NULL){ return NULL; } page_stats_uninit=0; return page_ptr; } page_stats_diff.pages_pagein=page_stats.pages_pagein; page_stats_diff.pages_pageout=page_stats.pages_pageout; page_stats_diff.systime=page_stats.systime; page_ptr=sg_get_page_stats(); if(page_ptr==NULL){ return NULL; } page_stats_diff.pages_pagein=page_stats.pages_pagein-page_stats_diff.pages_pagein; page_stats_diff.pages_pageout=page_stats.pages_pageout-page_stats_diff.pages_pageout; page_stats_diff.systime=page_stats.systime-page_stats_diff.systime; #else /* WIN32 */ if(read_counter_large(SG_WIN32_PAGEIN, &page_stats_diff.pages_pagein)) { sg_set_error(SG_ERROR_PDHREAD, PDH_PAGEIN); return NULL; } if(read_counter_large(SG_WIN32_PAGEOUT, &page_stats_diff.pages_pageout)) { sg_set_error(SG_ERROR_PDHREAD, PDH_PAGEIN); return NULL; } page_stats_diff.systime = 0; #endif /* WIN32 */ return &page_stats_diff; }
/* * Paging statistics, see <tt>sg_get_page_stats(3)</tt> manpage. */ static VALUE statgrab_page_stats(VALUE self) { sg_page_stats *stats; VALUE info, time_at; if ((stats = sg_get_page_stats()) == NULL) statgrab_handle_error(); info = rb_hash_new(); rb_hash_aset(info, ID2SYM(rb_intern("pages_pagein")), INT2NUM(stats->pages_pagein)); rb_hash_aset(info, ID2SYM(rb_intern("pages_pageout")), INT2NUM(stats->pages_pageout)); rb_hash_aset(info, ID2SYM(rb_intern("systime")), INT2NUM(stats->systime)); time_at = rb_funcall(rb_cTime, rb_intern("at"), 1, INT2NUM(stats->systime)); rb_hash_aset(info, ID2SYM(rb_intern("time")), time_at); return info; }