Ich bin ein wenig überrascht, dass JavaFX meine CPU konsumieren, indem Sie einfachen Fließtext auf einem Bildschirm zeigen.Javafx 2d Text-Rendering beschleunigen
Meine Frage gibt es eine Option zwickt, Hardwarebeschleunigung für Knoten wie Text einzuschalten? Verwenden Sie GPU und nicht CPU beim Rendern von 2D-Primitiven?
Hier ist das einfache Beispiel, dass bis zu 40% CPU auf meinem 2,53Mhz Core 2 Duo + Nvidia 9600M GT verbrauchen. Betriebssystem: Mac OS X. JavaFX 1.2; JRE 1.5
Bearbeiten: Ich legte Animation in das Beispiel nur Text Scrollen zu simulieren. Sie können versuchen, den gleichen CPU-Verbrauch zu erzielen, indem Sie ListBox oder ein Bild ohne Unterbrechung durchblättern.
package text2dacceleration;
import javafx.stage.Stage;
import javafx.scene.Scene;
import javafx.scene.layout.VBox;
import javafx.scene.transform.Transform;
import javafx.scene.text.Text;
import javafx.animation.*;
def longLine = for (i in [1..45]) "{i}";
def textNodes = for (i in [1..64]) Text{content: "{longLine} line number {i}"};
var yoffset = 0.0;
Timeline {
repeatCount: Timeline.INDEFINITE
autoReverse: true
keyFrames: [
KeyFrame { time: 0s values: [yoffset => 0.0]}
KeyFrame { time: 1s values: [yoffset => 10.0]}]
}.play();
Stage {
title: "Text nodes"
width: 800
height: 600
resizable: false
scene: Scene {
content: [
VBox {
content: textNodes
transforms: bind Transform.translate(0, yoffset);
}]}}
Bildrate ist gut. Alles ist glatt wie es sein sollte. Aber warum CPU verbrauchen und nicht GPU? –
(WinXP run, Java FX 1.2, Java 1.6) Wenn sich die Maus über das Fenster bewegt, scheint die Bildrate, sogar von 10, wenig zu ändern. Hohe CPU. Wenn die Maus aus dem Fenster ist, läuft CPU weniger und niedriger mit niedrigeren Frameraten. Dies deutet darauf hin, dass das Problem wirklich nicht das Rendering der Frames ist. – Refactor
Setzen Sie den gesamten Text in einen einzelnen Textknoten und zeigen Sie an, dass immer noch das gleiche CPU-Problem auftritt, wenn Sie mit der Maus über das Fenster fahren (obwohl das Bild auf meinem System sogar bei einer Framerate von 10 glatter ist). blocksmouse: true macht keinen Unterschied. – Refactor