426 private:
427 CPUPerfCounters _counters;
428
429 int cpu_load(int which_logical_cpu, double* cpu_load);
430 int context_switch_rate(double* rate);
431 int cpu_load_total_process(double* cpu_load);
432 int cpu_loads_process(double* pjvmUserLoad, double* pjvmKernelLoad, double* psystemTotalLoad);
433
434 public:
435 CPUPerformance();
436 bool initialize();
437 ~CPUPerformance();
438 };
439
440 CPUPerformanceInterface::CPUPerformance::CPUPerformance() {
441 _counters.nProcs = os::active_processor_count();
442 _counters.cpus = NULL;
443 }
444
445 bool CPUPerformanceInterface::CPUPerformance::initialize() {
446 size_t tick_array_size = (_counters.nProcs +1) * sizeof(CPUPerfTicks);
447 _counters.cpus = (CPUPerfTicks*)NEW_C_HEAP_ARRAY(char, tick_array_size, mtInternal);
448 if (NULL == _counters.cpus) {
449 return false;
450 }
451 memset(_counters.cpus, 0, tick_array_size);
452
453 // For the CPU load total
454 get_total_ticks(-1, &_counters.cpus[_counters.nProcs]);
455
456 // For each CPU
457 for (int i = 0; i < _counters.nProcs; i++) {
458 get_total_ticks(i, &_counters.cpus[i]);
459 }
460 // For JVM load
461 get_jvm_ticks(&_counters.jvmTicks);
462
463 // initialize context switch system
464 // the double is only for init
465 double init_ctx_switch_rate;
466 perf_context_switch_rate(&init_ctx_switch_rate);
467
468 return true;
469 }
470
471 CPUPerformanceInterface::CPUPerformance::~CPUPerformance() {
|
426 private:
427 CPUPerfCounters _counters;
428
429 int cpu_load(int which_logical_cpu, double* cpu_load);
430 int context_switch_rate(double* rate);
431 int cpu_load_total_process(double* cpu_load);
432 int cpu_loads_process(double* pjvmUserLoad, double* pjvmKernelLoad, double* psystemTotalLoad);
433
434 public:
435 CPUPerformance();
436 bool initialize();
437 ~CPUPerformance();
438 };
439
440 CPUPerformanceInterface::CPUPerformance::CPUPerformance() {
441 _counters.nProcs = os::active_processor_count();
442 _counters.cpus = NULL;
443 }
444
445 bool CPUPerformanceInterface::CPUPerformance::initialize() {
446 size_t array_entry_count = _counters.nProcs + 1;
447 _counters.cpus = NEW_C_HEAP_ARRAY(CPUPerfTicks, array_entry_count, mtInternal);
448 if (NULL == _counters.cpus) {
449 return false;
450 }
451 memset(_counters.cpus, 0, array_entry_count * sizeof(*_counters.cpus));
452
453 // For the CPU load total
454 get_total_ticks(-1, &_counters.cpus[_counters.nProcs]);
455
456 // For each CPU
457 for (int i = 0; i < _counters.nProcs; i++) {
458 get_total_ticks(i, &_counters.cpus[i]);
459 }
460 // For JVM load
461 get_jvm_ticks(&_counters.jvmTicks);
462
463 // initialize context switch system
464 // the double is only for init
465 double init_ctx_switch_rate;
466 perf_context_switch_rate(&init_ctx_switch_rate);
467
468 return true;
469 }
470
471 CPUPerformanceInterface::CPUPerformance::~CPUPerformance() {
|