397 // Factor to translate the timestamp to seconds. |
397 // Factor to translate the timestamp to seconds. |
398 #define TIMESTAMP_TO_SECONDS_FACTOR (1000 * 1000 * 1000) |
398 #define TIMESTAMP_TO_SECONDS_FACTOR (1000 * 1000 * 1000) |
399 |
399 |
400 void VMError::record_reporting_start_time() { |
400 void VMError::record_reporting_start_time() { |
401 const jlong now = get_current_timestamp(); |
401 const jlong now = get_current_timestamp(); |
402 Atomic::store(now, &_reporting_start_time); |
402 Atomic::store(&_reporting_start_time, now); |
403 } |
403 } |
404 |
404 |
405 jlong VMError::get_reporting_start_time() { |
405 jlong VMError::get_reporting_start_time() { |
406 return Atomic::load(&_reporting_start_time); |
406 return Atomic::load(&_reporting_start_time); |
407 } |
407 } |
408 |
408 |
409 void VMError::record_step_start_time() { |
409 void VMError::record_step_start_time() { |
410 const jlong now = get_current_timestamp(); |
410 const jlong now = get_current_timestamp(); |
411 Atomic::store(now, &_step_start_time); |
411 Atomic::store(&_step_start_time, now); |
412 } |
412 } |
413 |
413 |
414 jlong VMError::get_step_start_time() { |
414 jlong VMError::get_step_start_time() { |
415 return Atomic::load(&_step_start_time); |
415 return Atomic::load(&_step_start_time); |
416 } |
416 } |
417 |
417 |
418 void VMError::clear_step_start_time() { |
418 void VMError::clear_step_start_time() { |
419 return Atomic::store((jlong)0, &_step_start_time); |
419 return Atomic::store(&_step_start_time, (jlong)0); |
420 } |
420 } |
421 |
421 |
422 void VMError::report(outputStream* st, bool _verbose) { |
422 void VMError::report(outputStream* st, bool _verbose) { |
423 |
423 |
424 # define BEGIN if (_current_step == 0) { _current_step = __LINE__; |
424 # define BEGIN if (_current_step == 0) { _current_step = __LINE__; |