IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Graphisme Java Discussion :

[Performances]Afficher des mesures FPS


Sujet :

Graphisme Java

  1. #1
    Expert confirmé
    Avatar de GLDavid
    Homme Profil pro
    Service Delivery Manager
    Inscrit en
    Janvier 2003
    Messages
    2 852
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Service Delivery Manager
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Janvier 2003
    Messages : 2 852
    Points : 4 759
    Points
    4 759
    Par défaut [Performances]Afficher des mesures FPS
    Bonjour

    Au départ, mon projet de visualisation de réseaux moléculaires utilisait la librairie Piccolo. Mais, comme j'ai besoin d'algos sur les réseaux, je me suis ensuite rabattu sur JUNG. L'avantage de JUNG étant que c'est une librairie graphique mais qui offre aussi des algos très puissants pour la gestion d'un réseau affiché. Oui, tout sauf un petit quelque chose qui manque. En effet, la librairie ne permet pas pour le moment d'afficher une quelquonque mesure de FPS pour que j'évalue la performance de l'affichage de la libraire. D'après les auteurs, il faut que je m'y colle ! Leur premier indice étant de travailler à partir de cette classe qui est un JPanel. Donc, comment évaluer les FPS d'un JPanel ?
    Merci d'avance de vos réponses.

    @++
    GLDavid
    Consultez la FAQ Perl ainsi que mes cours de Perl.
    N'oubliez pas les balises code ni le tag

    Je ne répond à aucune question technique par MP.

  2. #2
    Membre chevronné
    Homme Profil pro
    Dév. Java & C#
    Inscrit en
    Octobre 2002
    Messages
    1 413
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Dév. Java & C#
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2002
    Messages : 1 413
    Points : 1 993
    Points
    1 993
    Par défaut
    Une petite piste vers une solution:

    C'est de redéfinir la méthode paint de JPanel pour compter combien d'appel sont effectuer durant 1 seconde (Algo simpliste).

    Pas testé:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
     
      private int countPaint = 0;
      private long millis = 0;
      private float fps = 0;
     
    public void paint(Graphics g) {
        if (countPaint = 0) {
           millis = System.currentTimeMillis();
           countPaint = 1;
        }
        else if (System.currentTimeMillis() - millis < 1000){
           countPaint++;
        }
        else {
          fps = ++countPaint / (System.currentTimeMillis() - millis) * 1000;
          countPaint = 0;
        }
        super.paint(g);
    }
    Bien le bonjour chez vous
    Jowo

  3. #3
    Expert confirmé
    Avatar de GLDavid
    Homme Profil pro
    Service Delivery Manager
    Inscrit en
    Janvier 2003
    Messages
    2 852
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Service Delivery Manager
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Janvier 2003
    Messages : 2 852
    Points : 4 759
    Points
    4 759
    Par défaut
    Salut jowo

    Merci de ta réponse mais je crois qu'il y a un bug. A chaque tour, il m'indique 0 fps :o
    Donc, il doit y avoir une correction à apporter.

    @++ et merci encore de ton élément de réponse
    GLDavid
    Consultez la FAQ Perl ainsi que mes cours de Perl.
    N'oubliez pas les balises code ni le tag

    Je ne répond à aucune question technique par MP.

  4. #4
    Membre chevronné
    Homme Profil pro
    Dév. Java & C#
    Inscrit en
    Octobre 2002
    Messages
    1 413
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Dév. Java & C#
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2002
    Messages : 1 413
    Points : 1 993
    Points
    1 993
    Par défaut
    Sûrement qu'il existe un bug vu la vitesse où je l'ai pondu.

    Initialise fps à -1 pour contrôler si il est rafraichi au moins une fois....

    En plus ce n'était qu'une idée. Je n'ai jamais dû estimer un fps
    Bien le bonjour chez vous
    Jowo

  5. #5
    Expert confirmé
    Avatar de GLDavid
    Homme Profil pro
    Service Delivery Manager
    Inscrit en
    Janvier 2003
    Messages
    2 852
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Service Delivery Manager
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Janvier 2003
    Messages : 2 852
    Points : 4 759
    Points
    4 759
    Par défaut
    Ok, merci en tout cas de ton aide.
    Y a t'il des programmeurs Java et infographistes dans la place ?

    @++
    GLDavid
    Consultez la FAQ Perl ainsi que mes cours de Perl.
    N'oubliez pas les balises code ni le tag

    Je ne répond à aucune question technique par MP.

  6. #6
    Membre chevronné
    Homme Profil pro
    Dév. Java & C#
    Inscrit en
    Octobre 2002
    Messages
    1 413
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Dév. Java & C#
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2002
    Messages : 1 413
    Points : 1 993
    Points
    1 993
    Par défaut
    Voilà un code qui fonctionne (au moins, il donne un résultat)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    class FPSPanel extends JPanel {
    	private int countPaint = 0;
    	private long millis = 0;
    	private float fps = 0;
     
        public void paintComponent (Graphics surface) {
            super.paintComponent(surface);
        }
     
        public void paint(Graphics g) {
        	long currentMillis = System.currentTimeMillis();
            if (countPaint == 0) {
                millis = currentMillis;
                countPaint = 1;
             }
             else if (currentMillis - millis < 1000){
                countPaint++;
             }
             else {
               estimateFPS(currentMillis);
             }    	
        	super.paint(g);
        }
     
        private float estimateFPS(long currentMillis) {
        	float tmp = ++countPaint;
            fps = tmp / (currentMillis - millis) * 1000;
            millis = currentMillis;
            countPaint = 0;
            return fps;
        }
     
        public float getFPS() {
        	return estimateFPS(System.currentTimeMillis());
        }
    }
    Bien le bonjour chez vous
    Jowo

  7. #7
    Expert confirmé
    Avatar de GLDavid
    Homme Profil pro
    Service Delivery Manager
    Inscrit en
    Janvier 2003
    Messages
    2 852
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Service Delivery Manager
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Janvier 2003
    Messages : 2 852
    Points : 4 759
    Points
    4 759
    Par défaut
    Salut Jowo

    Oui, ça retourne un résultat : l'infini !!
    Voici ma sortie :
    Il doit demeurer un cafard encore (appelez le machin vert !).

    @++
    GLDavid
    Consultez la FAQ Perl ainsi que mes cours de Perl.
    N'oubliez pas les balises code ni le tag

    Je ne répond à aucune question technique par MP.

  8. #8
    Membre chevronné
    Homme Profil pro
    Dév. Java & C#
    Inscrit en
    Octobre 2002
    Messages
    1 413
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Dév. Java & C#
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2002
    Messages : 1 413
    Points : 1 993
    Points
    1 993
    Par défaut
    OK je jette l'éponge
    Bien le bonjour chez vous
    Jowo

  9. #9
    Expert confirmé
    Avatar de GLDavid
    Homme Profil pro
    Service Delivery Manager
    Inscrit en
    Janvier 2003
    Messages
    2 852
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Service Delivery Manager
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Janvier 2003
    Messages : 2 852
    Points : 4 759
    Points
    4 759
    Par défaut
    T'inquiètes pas Jowo, c'est déjà super les éléments que tu m'as fourni.
    Voici un correctif qui ne renvoit pas l'infini :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
     
    public void paint(Graphics g){
    		long currentMillis = System.currentTimeMillis();
    		if (countPaint == 0) {
    			millis = currentMillis;
    			countPaint = 1;
    		}
    		else if (currentMillis - millis < 1000){
    			countPaint++;
    		}
    		else {
    			estimateFPS(currentMillis);
    			//System.out.println(""+getFPS()+" FPS");
    		}       
    		super.paint(g);
    	}
     
    	private void estimateFPS(long currentMillis) {
    		float tmp = ++countPaint;
    		fps = tmp / (currentMillis - millis) * 1000;
    		millis = currentMillis;
    		countPaint = 0;
    		System.out.println(""+fps);
    		//return fps; 
    	}
    Petite question : est-il normale que si le panel ne "bouge" pas, je sois à 0 FPS ?

    @++
    GLDavid
    Consultez la FAQ Perl ainsi que mes cours de Perl.
    N'oubliez pas les balises code ni le tag

    Je ne répond à aucune question technique par MP.

  10. #10
    Membre chevronné
    Homme Profil pro
    Dév. Java & C#
    Inscrit en
    Octobre 2002
    Messages
    1 413
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Dév. Java & C#
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2002
    Messages : 1 413
    Points : 1 993
    Points
    1 993
    Par défaut
    ça fait chaud au coeur que son travail soit reconnu


    OFPS est normal si la méthode n'a pas été appelée.
    Bien le bonjour chez vous
    Jowo

  11. #11
    Expert confirmé
    Avatar de GLDavid
    Homme Profil pro
    Service Delivery Manager
    Inscrit en
    Janvier 2003
    Messages
    2 852
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Service Delivery Manager
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Janvier 2003
    Messages : 2 852
    Points : 4 759
    Points
    4 759
    Par défaut
    Ok, ce qui serait cool, ce serait de trouver une méthode qui rafraîchisse tout le temps le Panel, comme ça, j'ai une évaluation en continue.
    Et je le redis encore, Jowo pour tes indices, cela m'a bien aidé !!

    @++
    GLDavid
    Consultez la FAQ Perl ainsi que mes cours de Perl.
    N'oubliez pas les balises code ni le tag

    Je ne répond à aucune question technique par MP.

  12. #12
    Expert confirmé
    Avatar de GLDavid
    Homme Profil pro
    Service Delivery Manager
    Inscrit en
    Janvier 2003
    Messages
    2 852
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Service Delivery Manager
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Janvier 2003
    Messages : 2 852
    Points : 4 759
    Points
    4 759
    Par défaut
    Ok, je crois avoir trouvé, j'ai ajouté ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
     
    public void paint(Graphics g){
    		long currentMillis = System.currentTimeMillis();
    		if (countPaint == 0) {
    			millis = currentMillis;
    			countPaint = 1;
    		}
    		else if (currentMillis - millis < 1000){
    			countPaint++;
    		}
    		else {
    			estimateFPS(currentMillis);
    		}       
    		super.paint(g);
    		repaint();
    	}
    Je rafraîchis en continu et j'ai une évaluation bien meilleure de mes FPS. Quelqu'un peut-il attester de la pertinence de cette fonction ?

    @++
    GLDavid
    Consultez la FAQ Perl ainsi que mes cours de Perl.
    N'oubliez pas les balises code ni le tag

    Je ne répond à aucune question technique par MP.

  13. #13
    Expert confirmé
    Avatar de GLDavid
    Homme Profil pro
    Service Delivery Manager
    Inscrit en
    Janvier 2003
    Messages
    2 852
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Service Delivery Manager
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Janvier 2003
    Messages : 2 852
    Points : 4 759
    Points
    4 759
    Par défaut
    Aïe, c'est pas si bon que ça !
    Si j'affiche une fenêtre secondaire telle que mon application est prévue, j'ai un mauvais rafraîchissement : le contenu de ma fenêtre secondaire n'est pas affiché.
    Un petit détail à résoudre !

    @++
    GLDavid
    Consultez la FAQ Perl ainsi que mes cours de Perl.
    N'oubliez pas les balises code ni le tag

    Je ne répond à aucune question technique par MP.

  14. #14
    Membre chevronné
    Homme Profil pro
    Dév. Java & C#
    Inscrit en
    Octobre 2002
    Messages
    1 413
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Dév. Java & C#
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2002
    Messages : 1 413
    Points : 1 993
    Points
    1 993
    Par défaut
    En effet repaint(), appelle indirectement paint()

    Il faudrait un thread indépandant qui appelle repaint()
    Bien le bonjour chez vous
    Jowo

  15. #15
    Expert confirmé
    Avatar de GLDavid
    Homme Profil pro
    Service Delivery Manager
    Inscrit en
    Janvier 2003
    Messages
    2 852
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Service Delivery Manager
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Janvier 2003
    Messages : 2 852
    Points : 4 759
    Points
    4 759
    Par défaut
    Du style ?
    Faudrait-il que je l'inclus dans cette classe ou ailleurs ?

    @++
    GLDavid
    Consultez la FAQ Perl ainsi que mes cours de Perl.
    N'oubliez pas les balises code ni le tag

    Je ne répond à aucune question technique par MP.

  16. #16
    Membre chevronné
    Homme Profil pro
    Dév. Java & C#
    Inscrit en
    Octobre 2002
    Messages
    1 413
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Dév. Java & C#
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2002
    Messages : 1 413
    Points : 1 993
    Points
    1 993
    Par défaut
    un bout de code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
     
        private FPSPanel panelFPS;
     
     
        public TestGraphic () {  
        	setSize (300,200);
            addWindowListener (new WindowAdapter() {
                public void windowClosing (WindowEvent événement) {
                    System.exit(0);
                }
            });
     
            panelFPS= new FPSPanel();
            getContentPane().add(panelFPS);
     
            Thread thisThread = new Thread(this);
    	thisThread.start();
        }
     
        public void run() {
            while (true) {
                panelFPS.repaint();
                System.err.println(panelFPS.getFPS());    
          }
        }
    Un correction de la méthode pour éviter l'"infinity"
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
        private synchronized float estimateFPS(long currentMillis) {
        	long delta = (currentMillis - millis);
        	if (delta > 0) {
        		float tmp = ++countPaint;
        		fps = tmp /  delta * 1000;
        		millis = currentMillis;
        		countPaint = 0;
        	}
            return fps;
        }
    Bien le bonjour chez vous
    Jowo

  17. #17
    Expert confirmé
    Avatar de GLDavid
    Homme Profil pro
    Service Delivery Manager
    Inscrit en
    Janvier 2003
    Messages
    2 852
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Service Delivery Manager
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Janvier 2003
    Messages : 2 852
    Points : 4 759
    Points
    4 759
    Par défaut
    Ok, Jowo, je crois qu'on tient quelque chose de sympa ! 8)
    Ca semble bien tourner chez moi.
    Merci à toi de ton aide immense !!
    A charge de revanche si tu passes au Perl.

    @++
    GLDavid
    Consultez la FAQ Perl ainsi que mes cours de Perl.
    N'oubliez pas les balises code ni le tag

    Je ne répond à aucune question technique par MP.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [2012] Afficher des mesures en ligne
    Par Ornitho76 dans le forum SSAS
    Réponses: 6
    Dernier message: 06/10/2014, 12h24
  2. Réponses: 8
    Dernier message: 13/08/2013, 09h11
  3. Réponses: 0
    Dernier message: 12/03/2009, 00h53

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo