drawImage, AnimationTimerの挙動がおかしい
いくつか問題があります。
n回に1回描画すると経過時間が(n-1)/nになる。60フレーム中2回なら0.5秒、3回なら0.66秒という感じ。
CPU使用率が徐々に上昇する。最初は10%未満で、80%程度まで確認。
毎フレーム描画すると非表示状態でタイマーの間隔が異常に短くなる。
こちらの環境はLubuntu15.04です。
コードは以下です。
import javafx.animation.AnimationTimer;
import javafx.application.Application;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.canvas.Canvas;
import javafx.scene.canvas.GraphicsContext;
import javafx.scene.image.WritableImage;
import javafx.stage.Stage;
public class Main extends Application {
int frame;
long last;
@Override
public void start(Stage primaryStage) throws Exception {
Group root = new Group();
primaryStage.setScene(new Scene(root));
Canvas canvas = new Canvas(640, 480);
root.getChildren().add(canvas);
GraphicsContext gc = canvas.getGraphicsContext2D();
WritableImage image = new WritableImage(32, 32);
new AnimationTimer() {
@Override
public void handle(long now) {
if (frame % 3 == 0) {
gc.drawImage(image, 0, 0);
}
if (frame % 60 == 0) {
primaryStage.setTitle("" + (now - last) / 1_000_000_000.0);
last = now;
}
frame++;
}
}.start();
primaryStage.show();
}
public static void main(String[] args) {
launch(args);
}
}
java1.8.0_102でも同じ結果となりました。
WindowsXP,7で実行したところCPU使用率の上昇は見られませんでした。
Windows7の方にLubuntuを入れてやってみたら上昇しましたので、OS側の問題ということでしょうか。