Подтвердить что ты не робот

Как отладить перегрузку backboardd?

У меня есть UIView с несколькими экземплярами подкласса CAShapeLayer, добавленными как подслои к свойству слоя.

Я оживляю изменения в UIBezierPath для каждого из этих уровней, который выглядит потрясающе и работает, , но достигает ~ 90% CPU в процессе backboardd, когда я запускаю его через Монитор активности в Инструментах.

Как я могу получить дополнительную информацию о том, что происходит здесь? backboardd - это закулисный рендеринг материала Core Graphics/Core Animation на графическом процессоре, верно? Есть ли поддержка для дальнейшей отладки в Инструментах где-то? Могу ли я сделать что-то необычное с GCD, чтобы загрузить backboardd меньше?

РЕДАКТИРОВАТЬ:. После эскалации этого в TSI с Apple они подтвердили, что это "ожидаемое поведение" для этого количества анимированных CAShapeLayers. Вздох. Они предложили предложение по этой ссылке, которое предполагает постоянную приостановку и приостановку анимации, чтобы имитировать более низкую частоту кадров. (Так как это вычисления для каждого кадра анимации с блокировкой DisplayLink, которые захлопываются backboardd)

-(void)pauseLayer:(CALayer*)layer {

    CFTimeInterval pausedTime = [layer convertTime:CACurrentMediaTime() fromLayer:nil];
    layer.speed = 0.0;
    layer.timeOffset = pausedTime;
}

-(void)resumeLayer:(CALayer*)layer {

    CFTimeInterval pausedTime = [layer timeOffset];
    layer.speed = 1.0;
    layer.timeOffset = 0.0;
    layer.beginTime = 0.0;
    CFTimeInterval timeSincePause = [layer convertTime:CACurrentMediaTime() fromLayer:nil] - pausedTime;
    layer.beginTime = timeSincePause;
}

Наконец, хорошая технология Apple указала, что управление рамкой анимации анимации "сделает достойный запрос на улучшение API, как в сторону" - поэтому я делаю один, и вы тоже должны.:)

4b9b3361

Ответ 1

Вам нужно попытаться изолировать вашу проблему. Похоже, что иерархия уровней не масштабируется хорошо и становится слишком сложной.

Вы видите ту же активность ЦП, если используете меньше экземпляров подкласса CAShapeLayer? Или если вы пытаетесь выполнить меньше анимаций?