JavaFX PulseLogger - Как найти, какие узлы НЕ кэшируются? - PullRequest
0 голосов
/ 15 сентября 2018

Я испытываю некоторую задержку в приложении JavaFX при прокрутке и всякий раз, когда сцена нуждается в повторном рендеринге.Включение импульсного логгера в JavaFX Я вижу, что число узлов перерисовывается в каждом импульсе (как в примере ниже).

PULSE: 3310 [16ms:26ms] 
T1 (0 +0ms): CSS Pass 
T1 (0 +0ms): Layout Pass 
T1 (0 +0ms): Update bounds
T1 (0 +13ms): Waiting for previous rendering 
T1 (13 +0ms): Copy state to render graph 
T7 (14 +0ms): Dirty Opts Computed 
T7 : 1 different dirty regions to render 
T7 : Dirty Region 0: RectBounds { minX:366.0, minY:143.0, maxX:374.0, maxY:539.0} (w:8.0, h:396.0) 
T7 : Render Root Path 0: [com.sun.javafx.sg.prism.NGRegion@bd6cd80, com.sun.javafx.sg.prism.NGRegion@b6f5240, com.sun.javafx.sg.prism.NGRegion@1347d5a0, com.sun.javafx.sg.prism.NGRegion@b982360, com.sun.javafx.sg.prism.NGRegion@b9826c0] 
T7 (14 +0ms): Render Roots Discovered 
T7 (14 +1ms): Painting 
T7 (16 +10ms): Presenting 
Counters:
        CacheFilter rebuilding: 1
        Nodes cached: 8
        Nodes rendered: 19
        Nodes visited during render: 25

Существует ли простой способ найти эти 19 узлов,отображается так, чтобы я мог их кэшировать для повышения производительности?

1 Ответ

0 голосов
/ 22 сентября 2018

Нет, простого пути нет. Все импульсное информационное сообщение является внутренним API. Приращение к счетчику «Узлы рендеринга» выполняется из NGNode (однорангового узла общего доступа Node) в его методе doRender, если необходимо визуализировать узел. Классы PulseLogger и PrintLogger обрабатывают регистрацию и печать информации.

Вам придется изменить эти классы, чтобы NGNode не просто увеличивал счетчик, а отправлял свою собственную информацию (например, идентификатор или имя); или как-то перехватить вызовы метода.

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

...