openjdk.ruOpenJDK на русском

JEP 265: Marlin Graphics Renderer

Графический растеризатор Marlin

ОтветственныйLaurent Bourgès
ТипFeature
ОбластьJDK
СтатусClosed / Delivered
Выпуск9
Компонентclient-libs / 2d
Обсуждениеgraphics dash rasterizer dash dev at openjdk dot java dot net
ТрудоёмкостьS
ДлительностьS
РецензентыJim Graham, Philip Race, Victor Dyakov
ОдобренKevin Rushforth
Создан2015/07/17 12:30
Обновлён2017/02/27 20:29
Задача8131760

Аннотация

Перевести Java 2D на Marlin Renderer в качестве графического растеризатора по умолчанию.

Критерии успеха

Marlin Renderer должен неизменно работать не хуже Pisces, текущего графического растеризатора, с таким же или более высоким качеством и точностью. На большинстве бенчмарков он должен значительно превосходить Pisces. Он должен продемонстрировать лучшую, чем у Pisces, масштабируемость при многопоточной работе. Версия в разработке уже достигает этих целей. Дополнительные цели — сравняться с растеризатором Ductus с закрытым исходным кодом или превзойти его по однопоточной производительности, а также не уступать ему по качеству и точности. Marlin уже показал лучшую, чем у Ductus, масштабируемость в многопоточном (MT) случае.

Мотивация

Сейчас в JDK используется графический растеризатор Pisces. Он применяется для отрисовки со сглаживанием (кроме шрифтов), поэтому его производительность критически важна для многих приложений с интенсивной графикой, однако она значительно ниже, чем у растеризатора Ductus с закрытым исходным кодом, который поставляет Oracle. Поэтому некоторые приложения уже используют Marlin вместо Pisces, помещая его в bootstrap class path. Следовательно, для распространения важен более производительный растеризатор.

Описание

Графический растеризатор — это библиотека реализации, которую использует Java 2D. Она реализует внутренний интерфейс для взаимодействия с подсистемами AWT и Java 2D, но не имеет внешне видимого API для Java-разработчиков. Marlin (пока) целиком написан на Java и является форком растеризатора Pisces. Хотя долгое время он размещался отдельно, сейчас он разрабатывается в рамках продолжения проекта OpenJDK graphics-rasterizer, который изначально был посвящён Pisces. Marlin уже в основном готов, прошёл проверку в реальных условиях, а также внутреннее тестирование Oracle. Он будет поэтапно дорабатываться, а затем будет интегрирован в JDK как замена Pisces и, по усмотрению Oracle, возможно, также Ductus.

Тестирование

Разработка новых тестов не требуется, так как API нет. Однако мы предполагаем разработать дополнительные тестовые сценарии для существующего J2DBench или других наборов тестов, чтобы исследовать многопоточную (MT) производительность, если обнаружим там пробелы. Будут выполняться существующие функциональные тесты и тесты на соответствие, а также существующие тесты производительности, например J2DBench Текущая версия Marlin уже прошла все функциональные, регрессионные тесты и тесты на соответствие (JCK) в JDK 9, которые любезно провела группа Oracle SQE.