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

Eclipse Platform Discussion :

[RCP] Palette et image -> cpu à 100%


Sujet :

Eclipse Platform

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé Avatar de r2d2abc
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    212
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 212
    Par défaut [RCP] Palette et image -> cpu à 100%
    Salut à tous, je travaille sur une application dans laquelle j'installe des composants graphiques classiques (lignes,....) et image.
    J'utilise une PaletteRoot et des PaletteGroup dans lesquels j'ajoute mes composants de type ToolEntry dont je surcharge le createTool() pour la création du composant. Le createTool() renvoie une instance de type Tool.
    L'image apparaît correctement sur l'editpart mais j'ai la cpu qui monte à 100%. Le fait de la supprimer/cacher par une autre fenêtre quelconque fait retromber l'activité. Je pense à quelque chose du style repaint/update area selon que la zone est cachée ou partiellement (totalement) visible. Mais je ne trouve pas l'api qui boucle, jvisualvm ne m'indique une activité que sur des threads RMI, je ne vois pas le rapport, et l'appli commence a être conséquente et ..... je ne trouve pas à moins d'avoir une stack trace (un bon profiler coute cher..) je séche, si qq1 a une idée.
    thank's d'avance

  2. #2
    Membre Expert
    Avatar de Gueritarish
    Homme Profil pro
    Développeur Java
    Inscrit en
    Mai 2007
    Messages
    1 800
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2007
    Messages : 1 800
    Par défaut
    Salut,

    Avec JProfiler tu as une version d'essai qui sera assez bien foutu pour pouvoir t'indiquer quels sont les méthodes qui te prennent le plus de ressources...

    Voilà pour une idée, à+
    Gueritarish

  3. #3
    Membre confirmé Avatar de r2d2abc
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    212
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 212
    Par défaut
    Merci Gueritarish, en fait je me suis débrouillé en ecrivant un petit agent jvmti qui m'a permis de localiser le point chaud.
    J'allais poster l'avancement de l'introspection pour demander un peu d'aide sur la cause dont je n'ai pas la raison au premier abord, comme quoi ...
    La cause : un AbstractGraphicalEditPart spécialisé dont le createFigure renvoie un ImageFigure spécialisé. Les images vont dans un Layer. Ors si je mets uniquement le super.paintFigure tout va bien, si je commence à vouloir mettre quelque chose d'autre (jouer avec le graphics ou mettre un line border (comme plus bas)) le paintFigure() est appelé puis le layer.paintClientArea() et ainsi de suite. Il est clair que l'un doit avoir un impact sur l'autre et qu'ils (Layer <-> ImageFigure) se renvoient la balle si je puis dire donc une succession de paintFigure/paintClientArea se succedent super vite dans la console avec un cpu qui monte à 100%.
    Toute idée est la bienvenue.

    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
     
     
     
            //ImageFigure paint fct overloaded -------------------------
            protected void paintFigure(Graphics graphics) 
            {
           	    System.out.println("-> paintFigure");
                /** ///bugged code
                LineBorder lb;
                lb = new LineBorder (ColorConstants.black, 1);
                setBorder(lb);
                /**/
                super.paintFigure(graphics);
            }
     
        //Layer paint fct overloaded --------------------
        / try to  set graphics.restoreState();//seems to be req by paintclientarea()
        protected void paintClientArea(Graphics graphics) 
        {
          System.out.println("-> paintClientArea");
           super.paintClientArea(graphics);
     
        }

  4. #4
    Membre confirmé Avatar de r2d2abc
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    212
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 212
    Par défaut
    pour info, voici la solution (super simple bien sur). Trois manières existent pour mettre un cadre autour d'un composant.
    1. Dans le createFigure(): on en profite avant de renvoyer l' ImageFigure de paramétrer un LineBorder comme d'autre choses à ce moment là, mais ca n'est bon qu'une fois à la création (sic)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
        protected IFigure createFigure() 
        {
            ImageDescriptor defimg = ImageDescriptor.createFromFile(Images.class, "/res/img/DefImg.gif");         
            ImageFigure image = new ImageFigureNew(defimg);
            image.setBorder(new LineBorder());// we can a little customized here
            return image;
        }
    2. Dans le refreshVisuals(): dans les mêmes condition si ce n'est que cette api est appelée for each refresh step (sic) donc plus de souplesse.
    3. Si l'on veut customiser la bordure finement, tout basiquement dans la fonction paintBorder de la classe ImageFigure surchargée (ImageFigureNew) et instantiée par le createfigure indiquée plus haut plutôt que le paintFigure (qui plus est on a un objet Graphics donc la porte est ouverte).

    voilà un ex de code (de test ici)
    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
     
    class ImageFigureNew extends ImageFigure
    {
            ...
     
            protected void paintBorder(Graphics graphics) 
            {
                System.out.println("-> paintBorder");
                super.paintBorder(graphics);
                /**/
                graphics.setForegroundColor(ColorConstants.red);
                graphics.setLineStyle(Graphics.LINE_DOT);
                //graphics.setXORMode(true);
                //graphics.drawRectangle(0,0,10,10);
                Rectangle clientArea = getClientArea();
                //clientArea.expand (1, 1);
                //clientArea.shrink(1, 1);
                clientArea.width--; //OK (see also getBounds().getCropped(new Insets(0, 0, 1, 1)))
                clientArea.height--;//OK
                //clientArea.x--;//ko: < left bound -> nothing appears
                //graphics.drawFocus(clientArea);//rectangle line dot black
                graphics.drawRectangle(clientArea);
                /**/
            }
     
    }
    hope this helps...

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

Discussions similaires

  1. Consomation CPU 100%
    Par Ines102006 dans le forum Oracle
    Réponses: 10
    Dernier message: 27/12/2006, 17h55
  2. [Hardware]PC s'éteint tout seul quand CPU 100%
    Par gojira dans le forum Composants
    Réponses: 18
    Dernier message: 03/08/2006, 10h49
  3. Grille OnDrawCell CPU 100%
    Par diam's dans le forum Composants VCL
    Réponses: 11
    Dernier message: 27/02/2006, 18h06
  4. [Eclipse 3.1 et WTP 0.7M5] Utilisation du CPU à 100%
    Par stanislas dans le forum Eclipse Java
    Réponses: 1
    Dernier message: 09/07/2005, 23h21
  5. [WSAD] pb de lenteur et CPU à 100%
    Par triphop17 dans le forum Eclipse Java
    Réponses: 4
    Dernier message: 27/10/2004, 14h05

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