Прошедшее время сообщается как 0ns на Android с помощью ndk - PullRequest
3 голосов
/ 20 февраля 2012

У меня есть следующий код

static unsigned long long GetCurrentTimeInNanoseconds()
{
    timespec t;
    clock_gettime(CLOCK_MONOTONIC, &t);
    return (unsigned long long)(t.tv_sec*1000000000ULL) + (unsigned long long)t.tv_nsec;
}

Когда я использую это так:

unsigned long long current = GetCurrentTimeInNanoseconds();
usleep(5000);
LOG_MESSAGE1( "sleep:  %llu ns", GetCurrentTimeInNanoseconds() - current);

Это печатает это:

"сон: 5126953 нс"

Но если я буду использовать это так:

current = GetCurrentTimeInNanoseconds();
glFinish();
LOG_MESSAGE1( "finish:  %llu ns", GetCurrentTimeInNanoseconds() - current);

Тогда он печатает:

"финиш: 0 нс"

glFinish - это блокирующий вызов в opengl ... и когда я изменяю эту строку кода, мое приложение значительно замедляется. Так как же это может занять 0ns, чтобы сделать glFinish на Android? Это может быть нет? Иначе кто-нибудь видит какие-либо проблемы с тем, как я получаю время или использую время?

1 Ответ

2 голосов
/ 20 февраля 2012

Это может вам помочь.

Время работы Android (Linux) с использованием CLOCK_MONOTONIC

В частности, первый ответ.

CLOCK_MONOTONIC останавливается, когда система приостановлена.Некоторые люди чувствовали, что это было ошибкой, и впоследствии были исправления для добавления часов CLOCK_BOOTTIME: https://lwn.net/Articles/428176/.Я не знаю, были ли эти патчи включены в основное ядро.

...