Esempio n. 1
0
DYNAMORIO_EXPORT
void
dr_inject_print_stats(void *data, int elapsed_secs, bool showstats, bool showmem)
{
    dr_inject_info_t *info = (dr_inject_info_t *) data;
    VM_COUNTERS mem;
    /* not in DR library - floating point use is OK */
    int secs = elapsed_secs;

    if (data == NULL)
        return;

    if (!get_process_mem_stats(info->pi.hProcess, &mem)) {
        /* failed */
        memset(&mem, 0, sizeof(VM_COUNTERS));
    }

    if (showstats) {
        int cpu = get_process_load(info->pi.hProcess);
        /* Elapsed real (wall clock) time.  */
        if (secs >= 3600) {     /* One hour -> h:m:s.  */
            fprintf(FP, "%ld:%02ld:%02ldelapsed ",
                    secs / 3600,
                    (secs % 3600) / 60,
                    secs % 60);
        } else {
            fprintf(FP, "%ld:%02ld.%02ldelapsed ",      /* -> m:s.  */
                    secs / 60,
                    secs % 60,
                    0 /* for now */);
        }
        fprintf(FP, "%d%%CPU \n", cpu);
        fprintf(FP, "(%lu tot, %lu RSS, %lu paged, %lu non, %lu swap)k\n",
                mem.PeakVirtualSize/1024,
                mem.PeakWorkingSetSize/1024,
                mem.QuotaPeakPagedPoolUsage/1024,
                mem.QuotaPeakNonPagedPoolUsage/1024,
                mem.PeakPagefileUsage/1024);
    }
    if (showmem) {
        fprintf(FP, "Process Memory Statistics:\n");
        fprintf(FP, "\tPeak virtual size:         %6d KB\n",
               mem.PeakVirtualSize/1024);
        fprintf(FP, "\tPeak working set size:     %6d KB\n",
               mem.PeakWorkingSetSize/1024);
        fprintf(FP, "\tPeak paged pool usage:     %6d KB\n",
               mem.QuotaPeakPagedPoolUsage/1024);
        fprintf(FP, "\tPeak non-paged pool usage: %6d KB\n",
               mem.QuotaPeakNonPagedPoolUsage/1024);
        fprintf(FP, "\tPeak pagefile usage:       %6d KB\n",
               mem.PeakPagefileUsage/1024);
    }
}
JNIEXPORT jdouble JNICALL
Java_com_sun_management_internal_OperatingSystemImpl_getProcessCpuLoad0
(JNIEnv *env, jobject dummy)
{
    return get_process_load();
}