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

В настоящее время я пишу текстовый блок с подсветкой синтаксиса в OpenGL и правильно строю свои строки с оберткой LineBreakMeasurer . Я использую AWTs LineBreakMeasurer . Визуальные результаты идеальны, производительность в порядке, однако мне было интересно, есть ли возможности сделать это немного быстрее. В настоящее время для выделения одной строки текста требуется в среднем 2-3 миллисекунды.

Таким образом, это код, который в настоящее время используется для создания макета

 private fun calculateLineLayout(line: AttributedString, graphics: Graphics2D, width: Int, layouts: ArrayList<TextLayout>): Float { val iterator = line.iterator if(iterator.beginIndex >= iterator.endIndex) { return 0.0f } val end = iterator.endIndex val measurer = LineBreakMeasurer(iterator, graphics.fontRenderContext) measurer.position = iterator.beginIndex var sizeY = 0.0f while(measurer.position < end) { val layout = measurer.nextLayout(width.toFloat()) layouts.add(layout) sizeY += layout.ascent + layout.descent + layout.leading } return sizeY } 

Мои вопросы будут

  • Существуют ли альтернативы LineBreakMeasurer от AWT, которые более эффективны?
  • Может ли быть потенциал оптимизации из факта, что шрифт всегда будет моноширинным, и поэтому количество символов в строке уже вычитается из ширины?

Intereting Posts
Преобразовать массив в список в Котлине Observable.just (), который возвращает Единицу в Котлин Что эквивалентно статическим методам Java в Котлине? Невозможно включить предупреждение «тип платформы объявлений» Kotlin в сообщение об ошибке Проверка метода Спящий режим Какова цель по умолчанию для аннотации при аннотации свойства в Котлине? Заполнение ListView из массива в Котлине Как я могу использовать runblocking при нажатии кнопки Как не передавать данные Flowable для модульных тестов? Kotlin RuntimeInvisibleParameterAnnotations: MyType (String) Связь между деятельностью и фрагментом в Котлине Каков правильный подход к «Этот класс AsyncTask должен быть статическим или может возникнуть утечка» в Kotlin Android? Конфигурация Джерси CORS для разрешения ответов с сервера DBFlow: могу ли я удалить один из них с отключением списка? содержание в параметре основного развлечения в котлине