RFR: 8341418: Prism/es2 DrawableInfo is never freed (leak)
Thiago Milczarek Sayao
tsayao at openjdk.org
Thu Oct 3 14:25:49 UTC 2024
When creating a Scene, a `DrawableInfo` is allocated with `malloc`. When scene changes, this is called on `WindowStage.java`:
`QuantumRenderer.getInstance().disposePresentable(painter.presentable); // latched on RT`
But the underlying `DrawableInfo` is never freed.
I also think this should be done when the Stage is closed.
To test:
import javafx.animation.Animation;
import javafx.animation.KeyFrame;
import javafx.animation.KeyValue;
import javafx.animation.Timeline;
import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.TextField;
import javafx.scene.control.Label;
import javafx.scene.layout.Pane;
import javafx.scene.layout.StackPane;
import javafx.scene.layout.VBox;
import javafx.scene.paint.Color;
import javafx.stage.Stage;
import javafx.util.Duration;
public class TestScenes extends Application {
@Override
public void start(Stage stage) {
Timeline timeline = new Timeline(
new KeyFrame(Duration.millis(100), e -> stage.setScene(createScene("Scene 1", Color.RED))),
new KeyFrame(Duration.millis(200), e -> stage.setScene(createScene("Scene 2", Color.BLUE))),
new KeyFrame(Duration.millis(300), e -> stage.setScene(createScene("Scene 3", Color.GREEN)))
);
timeline.setCycleCount(Animation.INDEFINITE);
timeline.play();
stage.show();
}
private Scene createScene(String text, Color color) {
return new Scene(new StackPane(), 400, 300, color);
}
public static void main(String[] args) {
launch(TestScenes.class, args);
}
}
-------------
Commit messages:
- Remove Debug printfs
- MonocleGLDrawable seems to not require dispose
- Improve draft
- Improve draft
- Improve draft
- Improve draft
- Possible (incomplete) fix for es2 drawable leak
Changes: https://git.openjdk.org/jfx/pull/1586/files
Webrev: https://webrevs.openjdk.org/?repo=jfx&pr=1586&range=00
Issue: https://bugs.openjdk.org/browse/JDK-8341418
Stats: 141 lines in 13 files changed: 112 ins; 26 del; 3 mod
Patch: https://git.openjdk.org/jfx/pull/1586.diff
Fetch: git fetch https://git.openjdk.org/jfx.git pull/1586/head:pull/1586
PR: https://git.openjdk.org/jfx/pull/1586
More information about the openjfx-dev
mailing list