src/hotspot/share/utilities/spinYield.cpp
changeset 53077 33b8f6f4cdf5
parent 50113 caf115bb98ad
equal deleted inserted replaced
53076:dd5d7ba5b539 53077:33b8f6f4cdf5
    25 #include "precompiled.hpp"
    25 #include "precompiled.hpp"
    26 #include "runtime/os.hpp"
    26 #include "runtime/os.hpp"
    27 #include "utilities/ostream.hpp"
    27 #include "utilities/ostream.hpp"
    28 #include "utilities/spinYield.hpp"
    28 #include "utilities/spinYield.hpp"
    29 
    29 
    30 SpinYield::SpinYield(uint spin_limit, uint yield_limit) :
    30 SpinYield::SpinYield(uint spin_limit, uint yield_limit, uint sleep_ns) :
    31   _sleep_time(),
    31   _sleep_time(),
    32   _spins(0),
    32   _spins(0),
    33   _yields(0),
    33   _yields(0),
    34   _spin_limit(os::is_MP() ? spin_limit : 0),
    34   _spin_limit(os::is_MP() ? spin_limit : 0),
    35   _yield_limit(yield_limit)
    35   _yield_limit(yield_limit),
       
    36   _sleep_ns(sleep_ns)
    36 {}
    37 {}
    37 
    38 
    38 void SpinYield::yield_or_sleep() {
    39 void SpinYield::yield_or_sleep() {
    39   if (_yields < _yield_limit) {
    40   if (_yields < _yield_limit) {
    40     ++_yields;
    41     ++_yields;
    41     os::naked_yield();
    42     os::naked_yield();
    42   } else {
    43   } else {
    43     Ticks sleep_start = Ticks::now();
    44     Ticks sleep_start = Ticks::now();
    44     os::naked_short_sleep(1);
    45     os::naked_short_nanosleep(_sleep_ns);
    45     _sleep_time += Ticks::now() - sleep_start;
    46     _sleep_time += Ticks::now() - sleep_start;
    46   }
    47   }
    47 }
    48 }
    48 
    49 
    49 static const char* print_separator(outputStream* s, const char* separator) {
    50 static const char* print_separator(outputStream* s, const char* separator) {