Открыть сервис

Skia

Skia — это кроссплатформенная графическая библиотека с открытым исходным кодом, разработанная компанией Google. Она предоставляет низкоуровневый API для рендеринга 2D-графики, включая рисование геометрических фигур, текста, изображений и сложных визуальных эффектов. Skia служит графическим движком для ряда крупных продуктов Google, таких как браузер Google Chrome, операционная система Android и веб-платформа Flutter, а также используется в других проектах, включая Mozilla Firefox и LibreOffice.

История

Создание и ранние годы

Skia была основана в 2005 году Майком Ридом и Кэри Кларком, бывшими сотрудниками компании Transmeta. Первоначально библиотека разрабатывалась как частный проект под названием Skia Graphics Engine. В 2005 году Skia была приобретена компанией Google, которая искала эффективное решение для рендеринга графики в своём браузере Chrome. После приобретения код библиотеки был переписан и оптимизирован для интеграции с браузером.

Развитие под управлением Google

После покупки Skia стала основным графическим движком для Google Chrome, который был выпущен в 2008 году. В 2012 году Google объявила, что Skia будет использоваться в качестве графического бэкенда для операционной системы Android, заменив устаревшую библиотеку SurfaceFlinger. Это решение позволило улучшить производительность и качество рендеринга на мобильных устройствах. В 2014 году Skia была открыта под лицензией BSD, что сделало её доступной для сторонних разработчиков.

Современное состояние

В 2018 году Skia стала основой для графического движка Flutter — фреймворка для создания кроссплатформенных мобильных и десктопных приложений. С тех пор библиотека активно развивается, поддерживая новые функции, такие как аппаратное ускорение через Vulkan и Metal, а также улучшенную обработку текста и шрифтов. На 2025 год Skia остаётся одним из самых распространённых графических движков в мире.

Архитектура и основные возможности

Модульная структура

Skia построена на модульной архитектуре, которая включает несколько ключевых компонентов:

  • SkCanvas — основной интерфейс для рисования, предоставляющий методы для отрисовки геометрических фигур, путей и текста.
  • SkPaintобъект, определяющий стиль рисования, включая цвет, толщину линии, прозрачность и эффекты (например, тени или градиенты).
  • SkSurface — контекст рендеринга, который управляет целевым буфером (например, экраном или изображением).
  • SkImageпредставление растровых изображений с поддержкой различных форматов (PNG, JPEG, WebP).
  • SkTextBlob — оптимизированный объект для рендеринга текста, поддерживающий кеширование глифов.

Поддержка графических API

Skia может работать с различными графическими бэкендами, выбирая наиболее подходящий для конкретной платформы:

  • OpenGL — используется на большинстве десктопных систем.
  • Vulkan — обеспечивает низкоуровневый доступ к GPU для высокопроизводительного рендеринга.
  • Metal — применяется на устройствах Apple (macOS, iOS).
  • Direct3D — используется в Windows для интеграции с DirectX.
  • Raster — программный рендеринг, выполняемый на CPU, для случаев, когда аппаратное ускорение недоступно.

Поддержка шрифтов и текста

Skia включает в себя встроенную подсистему для работы со шрифтами, основанную на библиотеке FreeType. Она поддерживает форматы TrueType, OpenType и Type 1, а также сложные функции, такие как лигатуры, кернинг и подстановки для языков с письмом справа налево (например, арабского). Для рендеринга текста используется технология субпиксельного сглаживания, что улучшает чёткость на экранах с высоким разрешением.

Применение

Google Chrome

В браузере Google Chrome Skia отвечает за рендеринг веб-страниц, включая отрисовку CSS-стилей, SVG-графики и элементов Canvas. Благодаря Skia браузер может эффективно обрабатывать сложные визуальные эффекты, такие как анимации и переходы, с минимальной задержкой.

Android

Начиная с версии Android 4.0 (Ice Cream Sandwich), Skia используется для рендеринга пользовательского интерфейса системы. Она обрабатывает отрисовку окон, кнопок, иконок и анимаций, обеспечивая плавную работу на устройствах с различными характеристиками GPU. В Android также используется аппаратное ускорение через Skia, что позволяет снизить нагрузку на CPU.

Flutter

В фреймворке Flutter Skia служит основным графическим движком, который компилирует код на языке Dart в команды для рендеринга. Это позволяет Flutter-приложениям работать с высокой производительностью на разных платформах, включая Android, iOS, Windows, macOS и Linux. Skia в Flutter также поддерживает кастомные шейдеры и эффекты, такие как размытие и наложение текстур.

Другие проекты

Skia используется в ряде сторонних проектов, включая:

  • Mozilla Firefox — для рендеринга веб-содержимого в некоторых версиях браузера.
  • LibreOffice — для отрисовки интерфейса и документов.
  • TensorFlow — для визуализации данных и графиков.
  • Krita — в качестве одного из графических движков для цифрового рисования.

Производительность и оптимизация

Аппаратное ускорение

Skia поддерживает аппаратное ускорение через GPU, что позволяет значительно повысить производительность при рендеринге сложных сцен. Использование Vulkan и Metal обеспечивает низкую задержку и эффективное использование ресурсов, особенно на мобильных устройствах.

Кеширование

Библиотека активно использует кеширование для ускорения повторяющихся операций. Например, Skia кеширует скомпилированные шейдеры, глифы шрифтов и результаты рендеринга текстур. Это снижает нагрузку на процессор и память при многократной отрисовке одних и тех же элементов.

Многопоточность

Skia поддерживает многопоточный рендеринг, что позволяет распределять задачи между ядрами CPU. Однако в большинстве случаев библиотека работает в однопоточном режиме, чтобы избежать проблем с синхронизацией.

Критика и ограничения

Сложность интеграции

Несмотря на открытый исходный код, Skia имеет сложную архитектуру, что затрудняет её интеграцию в небольшие проекты. Документация библиотеки часто считается недостаточно подробной, особенно для новичков.

Размер библиотеки

Skia является относительно крупной библиотекой (около 10–20 МБ в скомпилированном виде), что может быть проблемой для встраиваемых систем или приложений с ограниченными ресурсами.

Зависимость от платформы

Хотя Skia кроссплатформенна, некоторые функции (например, аппаратное ускорение через Metal) доступны только на определённых ОС. Это может привести к несоответствиям в поведении приложений на разных устройствах.

Интересные факты

  • Название «Skia» происходит от греческого слова «σκιά» (тень), что отражает фокус библиотеки на рендеринге теней и других эффектов.
  • Skia поддерживает рендеринг в формате PDF, что позволяет создавать документы с векторной графикой.
  • В 2020 году Google добавила в Skia поддержку шейдеров на языке GLSL, что позволяет разработчикам создавать кастомные визуальные эффекты.
  • Skia используется в операционной системе Fuchsia — экспериментальной ОС от Google, предназначенной для встраиваемых устройств.

Источники

  • Официальная документация Skia (skia.org)
  • «Skia: The 2D Graphics Library Behind Chrome, Android, and Flutter» — статья на Google Developers Blog
  • «History of Skia» — раздел в репозитории Skia на GitHub
  • «Android Graphics Architecture» — документация Android Open Source Project
  • «Flutter Rendering Pipeline» — руководство по Flutter на flutter.dev

BFOmetr — база данных и аналитика по компаниям России.

На главную BFOmetr →