Что вызывает в инструментах "Цветные скопированные изображения" и "Цвет попадает в зеленый цвет и отсутствует красный"?

В Руководстве пользователя Инструментов есть это, чтобы сказать:

  • Цветные скопированные изображения. Помещает голубой цвет на изображения, скопированные с помощью Core Animation.

Но это не объясняет, почему изображение было скопировано. Кажется, не существует очевидного паттерна от одного скопированного изображения к другому, хотя он является регулярным и воспроизводимым.

Документы в настоящее время даже не упоминают Color Hits Green и Misses Red, но я думаю, что это может иметь какое-то отношение к CALayer"s shouldRasterize имущество.

Есть идеи?

3 ответа

Решение

Для "Цветных скопированных изображений" об этом красиво говорилось на Сессии 419 WWDC 2014:

"Если изображение в цветном формате, с которым GPU не может работать напрямую, оно будет преобразовано в CPU".

Пример. Представьте, что вы получаете изображения из онлайн-источника, где вы не контролируете формат. JPEG поддерживает 24-битные цветные изображения (8 бит на цвет). Формат TIFF может хранить цвета в 48-битных цветных изображениях (16 бит на цвет). В зависимости от того, что хочет iOS, эти различия, возможно, придется преобразовать.

Решением было бы преобразовать их в фоновом режиме в правильный цветовой формат, чтобы избежать проблем с производительностью при выполнении этих преобразований в основном потоке.

Для "Color Hits Green и Misses Red" OP правильный, он проверяет, правильно ли вы используете свойство shouldRasterize. Зеленый означает хорошо, вы повторно использовали кеш, который вы создали из свойства shouldRasterize. Красный означает плохо, вам нужно было записать в кеш (вызывает закадровый проход), а затем нарисовать.

Изображения могут быть скопированы, если они поддерживаются пользовательским поставщиком данных или не могут быть сопоставлены с другим процессом по какой-либо другой причине.

Рендеринг отладки iOS с помощью Core Animation Instruments

[iOS CALayer]

Хорошей практикой является наличие:

  • 60 кадров в секунду (кадров в секунду)Real device -> Profile -> Core Animation FPS
  • пакет тестового релиза из-за некоторых оптимизаций компиляции

Основные инструменты анимации

Симулятор -> Отладка:

  • Color Blended Layers(overdraw, смешение цветов) [Зеленый, красный]

Один и тот же пиксель отрисовывается более одного раза в одном кадре рендеринга

Если красный - применяется смешение цветов. Непростая задача вычислить правильный цвет результирующего пикселя, когда под ним есть пиксели с альфа-каналом.

[iOS альфа против непрозрачности против непрозрачности]

Случаи использования:

  1. UIView.layer.cornerRadiusприменяется смешение цветов. Это означает, что дополнительный слой с альфой применяется

Чтобы решить эту проблему, вы можете:

-Использовать маску (будет применена)
-Добавить дополнительный слой с закругленными углами

  1. UILableView- backgroundColor прозрачен
  2. UIImageс альфа-каналом (который можно использовать вUIImageView)

Чтобы предотвратить смешивание цветов: -плоская иерархия просмотра
-уменьшить прозрачность

  • Color Copied Images[Синий, по умолчанию]

Если Blue - изображение копируется с GPU на CPU, т.к. GPU не поддерживает этот цветовой формат. Например, вы можете создать большое изображение и установить.pdfизображение

      imageView.image = UIImage(named: "ring")
  • Color Misaligned Images[Желтый, по умолчанию]

Размер изображения не равен размеру изображения. Поскольку для сжатия изображения требуется дополнительная работа

  • Color Off-screen Rendered[Желтый, по умолчанию]

Если желтый - слой отрисовывался за кадром. Напримерmask,shadow **without** path,cornerRadius, что-то нестандартное с CGContext,drawRect

Реальное устройство дополнительно имеет:

Xcode(13.3.1) -> Debug -> View Debugging -> Rendering

  • Color Hits Green and Misses Red[Зеленый, красный, по умолчанию]

Показывает, чтоshouldRasterize = trueоказывает негативное влияние. Зеленый — кеширование прошло успешно, красный — кеш регенерирован. Только частая регенерация влияет на производительность.

[iOS следует растрировать]

  • Color Layer Formats(Цветовые нестандартные форматы поверхности) не задокументировано
  • Color Immediately

По умолчаниюCore Animation Instrumentsобновления отладочного цвета выкладываются каждые 10 мс. Этот параметр задает обновление каждого кадра, что оказывает некоторое влияние на производительность и точность.

  • Color Compositing Fast-Path Blue(Цвет OpenGL FastPath Blue) [Синий, красный, по умолчанию]

Выделите (синий) слой, который отображается непосредственно на экране с помощью OpenGL, что является наилучшей практикой. Если вы работаете с OpenGL и не видите синего цвета, значит, вы выполняете дополнительную работу.

  • Flash Updated Regions[Желтый, по умолчанию]

Желтый - это область, которая обновляется (перерисовывается). Самый простой сценарий - поиск ненужных эффектов

Другие вопросы по тегам