import com.sun.javafx.perf.PerformanceTracker; import java.util.ArrayList; import java.util.List; import javafx.animation.AnimationTimer; import javafx.animation.KeyFrame; import javafx.animation.Timeline; import javafx.application.Application; import javafx.collections.*; import javafx.event.ActionEvent; import javafx.event.EventHandler; import javafx.scene.Group; import javafx.scene.Scene; import javafx.scene.control.ListView; import javafx.stage.Stage; import javafx.util.Duration; /* * To change this template, choose Tools | Templates * and open the template in the editor. */ /** * * @author ekaterina.pavlova@oracle.com */ public class ListViewMemTest extends Application { enum TestMode {STATIC, DYNAMIC }; static TestMode testMode = TestMode.STATIC; static double SCENE_WEIGHT = 400.0; static double SCENE_HEIGHT = 400.0; static int ROWS = 30; static ObservableList staticListViewlData; public void initStaticListViewData() { staticListViewlData = FXCollections.observableArrayList(); for (int row = 0; row < ROWS; row++) { staticListViewlData.add("Static row " + row); } } ObservableList createListViewData(int iter) { ObservableList listviewData = FXCollections.observableArrayList(); for (int i=0; i() { @Override public void handle(ActionEvent e) { String fpsText = String.format("FPS: %.2f", perfTracker.getInstantFPS()); System.out.println(fpsText); } }); fpsTimeline.getKeyFrames().add(fpsKeyFrame); initStaticListViewData(); AnimationTimer objectsAllocator = new AnimationTimer() { @Override public void handle(long l) { stage.setTitle("ListView " + iters); ListView listView; ObservableList listviewData = staticListViewlData; if (testMode == TestMode.DYNAMIC) { listviewData = createListViewData(iters); } rootGroup.getChildren().clear(); listView = new ListView(); listView.setPrefSize(150, 250); listView.setItems(listviewData); listView.setLayoutX(iters % (SCENE_WEIGHT - 150)); rootGroup.getChildren().add(listView); if (iters % 100 == 0) { System.out.println("Created " + iters + " ListView"); } iters ++; } }; fpsTimeline.play(); objectsAllocator.start(); } public static void main(String[] args) { for (int index = 0; index < args.length; index++) { String arg = args[index]; if ("-mode".equals(arg)) { if (index+1 >= args.length) { System.err.println("-mode option requires an argument"); System.exit(1); } try { testMode = TestMode.valueOf(args[index+1].toUpperCase()); } catch (IllegalArgumentException e) { System.err.print("-mode option must be from {"); for (int i=0; i