Оптимизация производительности 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, которые более эффективны?
  • Может ли быть потенциал оптимизации из факта, что шрифт всегда будет моноширинным, и поэтому количество символов в строке уже вычитается из ширины?

Solutions Collecting From Web of "Оптимизация производительности LineBreakMeasurer"