Работоспособность Android (Linux) с использованием CLOCK_MONOTONIC - PullRequest
6 голосов
/ 15 июня 2011

Согласно Справочнику разработчика Android uptimeMillis() возвращает количество миллисекунд с момента загрузки, не считая времени, проведенного в глубоком сне .Я проверил реализацию uptimeMillis() в своем коде, и это примерно так:

struct timespec t;
t.tv_sec = t.tv_nsec = 0;
clock_gettime(CLOCK_MONOTONIC, &t);
return (int64_t)(t.tv_sec)*1000000000LL + t.tv_nsec;

Насколько я знаю CLOCK_MONOTONIC отсчитывает от некоторой неопределенной точки линейно, включая время сна,

Вот мои сомнения -

  1. Если CLOCK_MONOTONIC включает время сна, почему uptimeMillis() не учитывает это?Если мое понимание неверно и CLOCK_MONOTONIC не учитывает сон, то что я должен использовать, чтобы получить время работы системы, включая сон?

  2. Что такое глубокий сон?Находится ли процессор на холостом ходу как глубокий сон?

  3. Какое значение неопределенная точка в Linux?Не могли бы вы указать в коде, где эти часы запущены?

1 Ответ

9 голосов
/ 15 июня 2011
  1. CLOCK_MONOTONIC останавливается, когда система приостановлена. Некоторые люди чувствовали, что это было ошибкой, и впоследствии были исправления для добавления часов CLOCK_BOOTTIME: https://lwn.net/Articles/428176/. Я не знаю, были ли эти патчи включены в основное ядро. CLOCK_BOOTTIME в ndk-9c - это заняло всего 2,5 года;) - Войцех

  2. Приостановить, я полагаю.

  3. IIRC некоторое фиксированное время перед загрузкой. Вы найдете точное значение, если покопаетесь в исходном коде ядра. Опять же, весь смысл в том, что он не указан , заключается в том, что он может измениться в любой момент, поэтому полагаться на него мне кажется неразумным.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...