My guess is that the first time this runs, it is rasterizing the ovals and caching them as textures on the GPU - then subsequent runs are just using the pre-cached textures. If this is the case, I'm not sure there is a simple solution for speeding up the first run.
On Mon, May 12, 2014 at 8:40 AM, Renato Rodrigues <[email protected]> wrote: > Hi all, > > I'm trying to convert some Java2D code to JavaFX and I'm stuck with an > issue regarding the performance of the JavaFX Canvas. At some point, I'll > have to draw thousands of small circles on the screen. > > My problem is on the first drawing, on which my code takes a lot of time to > execute. But if I have to perform a second drawing, it takes only a > fraction of the time to draw (it is at least 10 times faster). > > Is there anything I'm doing wrong? Is there any way to prevent that initial > delay? > > I wrote this code to test it. In this code I draw 500,000 circles at random > positions on a 1000 x 1000 canvas (built previously). I linked this code to > a button click event, and on the first time I click it takes 10 seconds to > execute. But if I just click again, it takes only 0.025 seconds. > > private void paintCanvas() { > long initTime = System.currentTimeMillis(); > > GraphicsContext cg = canvas.getGraphicsContext2D(); > cg.setFill(Color.WHITE); > cg.fillRect(0, 0, canvas.getWidth(), canvas.getHeight()); > cg.setFill(Color.rgb(0, 0, 0, 0.1)); > > Random rand = new Random(); > for (int i = 0; i < 500000; i++) { > cg.fillOval(1000 * rand.nextFloat(), 1000 * rand.nextFloat(), 2, > 2); > } > > long endTime = System.currentTimeMillis(); > System.out.println("Time spent on drawing:" + (endTime - > initTime)/1000.0f); } > > > Can anyone help me to understand the reason of this initial paint delay? > > Thanks in advance, > Renato. > > -- > *Renato Rodrigues Oliveira da Silva* > VICG - Visualization, Imaging and Computer Graphics - ICMC - USP São Carlos > -- Steve Hannah Web Lite Solutions Corp.
