always use the most accurate timing method depending on platform