У меня возникли проблемы с приложением живых обоев, которое я пишу.
Я использую OpenGL 1.0 для рендеринга. В целом, производительность, которую я получаю, довольно приличная. На Samsung Galaxy S2 (2.3.4) я могу получить 60 FPS без ограничения кадра.
Однако время от времени я получаю некоторые кадры, которые значительно больше других (скажем, нормальный кадр составляет 33 мс, а всплеск составляет около 70-100 мс). Это происходит через равные промежутки времени, примерно раз в секунду.
Мой код выполняет одинаковую обработку каждого кадра, поэтому это ненормальное поведение. Похоже, что мой поток по какой-то причине обменивается / задерживается или просто виртуальная машина начинает работать медленнее в какой-то момент.
Замедления не связаны с обработкой на GPU, так как eglSwapBuffers никогда не ждет. Я также почти уверен, что мой процесс не заставляет GC работать, потому что я стараюсь, чтобы в моем цикле не было недолговечных объектов (проверено в трекере распределения DDMS).
Интересно то, что если я держу палец на экране, то всплески во времени кадра, как правило, становятся значительно меньше. Как будто ОС повышает приоритет процесса из-за этого.
Решение этой проблемы очень важно, потому что мои анимации выглядят очень плохо при всплеске.
Кто-нибудь еще испытывал такую же проблему? Любые намеки на то, что может быть причиной проблемы, также будут высоко оценены.