JavaFX: производительность, связанная с размером окна - PullRequest
2 голосов
/ 16 января 2020

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

В следующем примере обновляется только небольшой квадрат 25x25, изменяя его фон .

public class WindowSizeTest extends Application {

    private int speed = 1500000000;

    @Override
    public void start(Stage primaryStage) {
        StackPane content = new StackPane();
        content.setPrefSize(25, 25);
        content.setMaxSize(Region.USE_PREF_SIZE, Region.USE_PREF_SIZE);

        new AnimationTimer() {
            @Override
            public void handle(long now) {
                double val = ((double) now % speed) / speed;
                BackgroundFill backgroundFill = new BackgroundFill(Color.color(val, val, val), CornerRadii.EMPTY, Insets.EMPTY);
                Background background = new Background(backgroundFill);
                content.setBackground(background);
            }
        }.start();

        StackPane root = new StackPane(content);
        Scene scene = new Scene(root);
        primaryStage.setScene(scene);
        primaryStage.show();
    }

    public static void main(String[] args) {
        launch(args);
    }
}

Когда окно маленькое, все идет гладко:

enter image description here

.. но ..

если его развернуть на внешнем мониторе 4k, он сильно использует мой графический процессор, и производительность всей системы падает:

enter image description here

Похоже, что JavaFX redr aws все содержимое окна, а не только измененная часть (такое же поведение на Windows).

Это ожидаемое поведение? Может кто-нибудь сказать мне, почему это происходит?

...