Iyon Skrevet 9. april 2008 Del Skrevet 9. april 2008 Hei I mitt prosjekt trenger jeg et grafikkbibliotek for i bunn og grunn å tegne et stort antall rektangler på skjermen. For å sammenlikne ytelsen til Java2d og Jogl, har jeg skrevet en benchmark-applikasjon. Benchmarkapplikasjonen lager en JFrame med JPanel-implementasjon. En tråd kaller repaint på dette panelet, som resulterer i at paintComponent-metoden blir kalt. Denne metoden er gjengitt nedenfor. Det jeg lurer på er om dette er en god måte å måle ytelsen til Java 2D på. Om det eventuelt er ukjente ytelsesbegrensende faktorer som kan lukes ut, f.eks.. protected void paintComponent(Graphics g) { super.paintComponent(g); if (!initialised) initialise(); long start = System.currentTimeMillis(); Graphics2D g2d = (Graphics2D)g; int i = 0; int x = 0, y = 0; height = this.getHeight(); width = this.getWidth(); //Regner ut hvor mange objekter vi har plass til med nåværende størrelse amount = (int)(width / (objectLength + 1) * (height / (objectThickness + 1))); g2d.setPaint(Color.GREEN); while (i++ < amount) { //sørger for at vi tegner rader helt til alle rektangler er tegnet while (x < width-(objectLength+1)) { // Tegner en rad med rektangler Rectangle2D.Double r = new Rectangle2D.Double(x, y, objectLength, objectThickness); g2d.fill(r); g2d.draw(r); x += objectLength + 2; } x = 0; y += objectThickness + 2; } //Drawing complete long stop = System.currentTimeMillis(); drawingTime = stop - start; check(); String title = "" + 1 / ((double)drawingTime / 1000) + " FPS"; f.setTitle(title); drawingTime = 0; } private void initialise() { objectLength = this.getWidth(); objectThickness = this.getHeight(); this.initialised = true; } private void check() { if (drawingTime > 1000) { //brukte vi mer enn ett sekund på denne tegningen? System.out.println("Rendering "+amount+" squares of size "+objectLength+"px by "+objectThickness+"px required "+drawingTime+"ms"); f.dispose(); System.exit(0); } objectLength -= objectLength*.01; //Reduce size by a hundredth objectThickness -= objectThickness*.01; } Lenke til kommentar
___ Skrevet 9. april 2008 Del Skrevet 9. april 2008 (endret) Jeg ville ha generert diverse pseudorandom-tabeller (slik at resultatet blir det samme ved hver kjøring) for å få "tilfeldig" posisjon og størrelse på rektanglene, og gjerne tegnet opp noen tusen stykker av dem. Bruk tilfeldig bredde og høyde. Tegn gjerne utenfor canvas også siden det framtvinger clipping. Denne testen bør utføres med og uten filling. Med filling burde du benyttet forskjellige mønstre. Lag samme testene for sirkler også. Lag en test som tegner linjer i forskjellige lengder, tykkelser og mønster. Du bør kjøre alle testene både med og uten antialiasing. Dessuten burde du lage tester som benyttet transformering og skalering, for å måle ytelsen på disse. Last gjerne inn en JPG e.l. i f.eks. 1024x768, og paint diverse skaleringer av dette på et canvas. Hilsen Werner PS! Ser nå at du bare ville måle ytelsen på rektangler. Men det kan jo være greit å lage et full-fledged benchmark-program når man er i gang Endret 9. april 2008 av wernie Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå