Глюки анимации при рендеринге в SurfaceView

FPS около 60, но анимация иногда глючит. Я выполнил профилирование потоков и обнаружил, что на Samsung S4 или Samsung S3 lockCanvas() иногда может занимать до 20 мс. Есть ли для этого какая-то конкретная причина? Как избежать таких глюков.


person Taras    schedule 11.11.2014    source источник
comment
Вы сами регулируете частоту кадров, засыпая поток? Я обнаружил, что постоянно получаю только 55 кадров в секунду с помощью SurfaceView. В противном случае вы находитесь во власти скорости вашего процессора и, следовательно, сбоев, если он решает, что выполняет слишком много работы, и замедляет некоторые кадры с временем блокировки или решает обрабатывать некоторые другие кадры быстрее. И если вы уменьшите частоту кадров до 30 кадров в секунду, время блокировки холста уменьшится до 0-1 мс, и больше не будет сбоев. Вы можете попробовать Textureview (api 14), так как время блокировки составляет всего 0-1 мс при полном дросселе (мне пришлось регулировать частоту кадров, потому что моя анимация работала слишком быстро).   -  person Whitney    schedule 11.11.2014


Ответы (1)


Некоторые устройства, особенно основанные на процессорах qcom, будут агрессивно управлять питанием с помощью screen-is-touched-rele/21322371#21322371">понизить часы, поэтому вы будете иногда видеть сбои в анимации со скоростью 60 кадров в секунду, когда ваш палец не будет активно перемещаться по сенсорному экрану.

Лучший способ справиться с этим — пропускать кадры, когда это необходимо. Действие «Запись приложения GL» в Grafika использует для этого простой трюк с Choreographer. Подробное объяснение см. в этом приложении в документе по графической архитектуре.

Я также должен отметить, что рендеринг Canvas на поверхности SurfaceView не ускоряется аппаратно, и по мере увеличения количества пикселей время рендеринга также увеличивается, что повышает вероятность того, что вы пропустите свое окно. В некотором смысле дополнительная нагрузка на ЦП может даже сделать работу более плавной — если управление питанием считает, что устройство сильно загружено, оно не снизит тактовые частоты, — но разряжает батарею быстрее.

person fadden    schedule 11.11.2014