[iPhone, XCode] Измерение точности таймера iPhone
Автор: Roman Pshenichny
Цель и задачи: Измерение точности работы таймера iPhone. Измерение влияния iOS на скорость работы приложения.
Материалы: XCode 3.2.3, iPhone SDK 4.0, iPod Touch 3G, iOS 3.1.3
Самый точный таймер на iPhone: mach_absolute_time().
По виду выглядит очень похоже на QueryPerformanceCounter из Windows, тоже возвращает время в попугаях. Чтобы привести показания к человеческому времени, есть функция mach_timebase_info().
Делаем простую вещь: вызываем 10 раз подряд mach_absolute_time(), считаем сколько прошло времени между вызовами и смотрим на разброс значений. Таким образом определяем точность таймера.
Второе: 10 раз крутим длинный цикл, внутри которого делаем простые вещи (например, постоянно увеличиваем переменную) и считаем сколько времени занимает этот длинный цикл. Если разброс времени сильно больше точности таймера - то это время кто-то у нас украл. Ясно кто - многозадачная операционная система.
Перед всеми замерами подождем 5 секунд, чтобы минимизировать влияние операционной системы (которая после запуска приложения делает анимацию раскрытия окна).
Замеры делаем минимум четыре раза. Сборка Release.
На симуляторе (Core2Duo 2.66Ghz) такие цифры: узнать показания таймера = 27..30 наносекунд, точность таймера = 3 наносекунды (миллиард наносекунд = 1 секунде, свет за 1 наносекунду пройдет всего 30 см).
MacOS ворует от 0,05 до 0,33 % времени вне зависимости от длинны цикла.
Но, симулятор это не интересно, пробуем на iPod Touch 3G (предварительно выключив и включив его).
Узнать показания таймера: 1208..1416 наносекунды.
Средняя точность таймера: 125 наносекунды, худшая 209 наносекунд.
Влияние iOS: от 0,5 и аж до 12 %, в среднем 1 %.
Ни разные стройки компилятора, ни запуск сразу с устройства - не оказал существенного влияния на точность таймера.