src/hotspot/os/linux/stathist_linux.cpp
branchstuefe-statistical-history
changeset 57245 0ed37e453a39
parent 57221 9653470b7294
child 57246 75f6a833a444
equal deleted inserted replaced
57244:a535e674d50d 57245:0ed37e453a39
    68   }
    68   }
    69 
    69 
    70   const char* text() const { return _buf; }
    70   const char* text() const { return _buf; }
    71 
    71 
    72   const char* get_prefixed_line(const char* prefix) const {
    72   const char* get_prefixed_line(const char* prefix) const {
    73     const char* p = ::strstr(_buf, prefix);
    73     return ::strstr(_buf, prefix);
    74     if (p != NULL) {
       
    75       return p;
       
    76     }
       
    77     return NULL;
       
    78   }
    74   }
    79 
    75 
    80   value_t parsed_prefixed_value(const char* prefix, size_t scale = 1) const {
    76   value_t parsed_prefixed_value(const char* prefix, size_t scale = 1) const {
    81     value_t value = INVALID_VALUE;
    77     value_t value = INVALID_VALUE;
    82     const char* const s = get_prefixed_line(prefix);
    78     const char* const s = get_prefixed_line(prefix);
    83     if (s != NULL) {
    79     if (s != NULL) {
    84       errno = 0;
    80       errno = 0;
    85       const char* p = s + ::strlen(prefix);
    81       const char* p = s + ::strlen(prefix);
    86       value = (value_t)::strtoll(p, NULL, 10);
    82       char* endptr = NULL;
    87       if (value == 0 && errno != 0) {
    83       value = (value_t)::strtoll(p, &endptr, 10);
       
    84       if (p == endptr || errno != 0) {
    88         value = INVALID_VALUE;
    85         value = INVALID_VALUE;
    89       } else {
    86       } else {
    90         value *= scale;
    87         value *= scale;
    91       }
    88       }
    92     }
    89     }
   160         const uint64_t value_ms = (value * 1000) / _clk_tck;
   157         const uint64_t value_ms = (value * 1000) / _clk_tck;
   161         const uint64_t last_value_ms = (last_value * 1000) / _clk_tck;
   158         const uint64_t last_value_ms = (last_value * 1000) / _clk_tck;
   162         const uint64_t delta_ms = value_ms - last_value_ms;
   159         const uint64_t delta_ms = value_ms - last_value_ms;
   163 
   160 
   164         // Calculate the number of wallclock milliseconds for the delta interval...
   161         // Calculate the number of wallclock milliseconds for the delta interval...
   165         const int age_ms = last_value_age * 1000;
   162         const uint64_t age_ms = last_value_age * 1000;
   166 
   163 
   167         // times number of available cores.
   164         // times number of available cores.
   168         const int total_cpu_time_ms = age_ms * _num_cores;
   165         const uint64_t total_cpu_time_ms = age_ms * _num_cores;
   169 
   166 
   170         // Put the spent cpu time in reference to the total available cpu time.
   167         // Put the spent cpu time in reference to the total available cpu time.
   171         const float percentage = (100.0f * delta_ms) / total_cpu_time_ms;
   168         const double percentage = (100.0f * delta_ms) / total_cpu_time_ms;
   172 
   169 
   173         char buf[32];
   170         char buf[32];
   174         l = jio_snprintf(buf, sizeof(buf), "%.0f", percentage);
   171         l = jio_snprintf(buf, sizeof(buf), "%.0f", percentage);
   175         if (st != NULL) {
   172         if (st != NULL) {
   176           st->print_raw(buf);
   173           st->print_raw(buf);