Gyro Integration and Trig?

Reading high resolution time is tricky on an Arduino. You can use millis() if you only need to be accurate to something near milliseconds. I'd go with that, you probably won't be making more than 100 updates per second anyway.

To get more accurate you need to look at the timer registers and the millis() value and try to figure it out from there, but that gets tricky. The ATmega8 manual talks at great length about the timer registers. Remember in the Arduino they are being used for the PWM outputs, so if you change their clock rates or cycle times you will mess up the PWMs.