Task

Write a program which uses a timer (with the least granularity available
on your system) to time how long a function takes to execute.

Whenever possible, use methods which measure only the processing time used
by the current process; instead of the difference in system time
between start and finish, which could include time used by
other processes on the computer.

This task is intended as a subtask for Measure relative performance of sorting algorithms implementations.




def countTo(x) {
	println("Counting...")
	for _ in 1..x {}
	println("Done!")
}
 
def MX := <unsafe:java.lang.management.makeManagementFactory>
def threadMX := MX.getThreadMXBean()
require(threadMX.isCurrentThreadCpuTimeSupported())
threadMX.setThreadCpuTimeEnabled(true)
 
for count in [10000, 100000] {
	def start := threadMX.getCurrentThreadCpuTime()
	countTo(count)
	def finish := threadMX.getCurrentThreadCpuTime()
	println(`Counting to $count takes ${(finish-start)//1000000}ms`)
}