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

Android Discussion :

OpenGL Moving map et asyntask : problème de performances


Sujet :

Android

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    141
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2009
    Messages : 141
    Points : 177
    Points
    177
    Par défaut OpenGL Moving map et asyntask : problème de performances
    Bonjour,

    J'ai une moving map avec des textures que je charge dynamiquement et j'ai un problème de performance.

    Je m'explique :

    Actuellement les textures sont chargées(*) via une asynctask DownloadTextureTask lancée depuis le constructeur
    de ma classe Tile à la fin de l'initialisation.

    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
     
    public class Tile {
     
      boolean loaded = false;
     
      public Tile() {
        // bla bla initialisation
        new DownloadTextureTask().execute;
      }
     
      private class DownloadTextureTask extends AsyncTask<..., ..., ...> {
        protected ... doInBackground(...) {
          // chargement file system
          // ou 
          // chargement réseau
        }
     
        protected void onPostExecute(...) {
          loaded = true;
        }
     
      }
    }
    Les instances de la classe Tile sont instanciées dans une boucle dans ma classe SceneRenderer à la demande car ça
    évolue en permanence. Les Tiles sont cachées dans une Lru donc j'alloue que ce dont j'ai besoin. Mais en gros je peux
    avoir besoin de 121 Tiles d'un coup (Matrice 11x11).

    Alors j'ai l'impression que l'allocation des Tiles se fait de façon séquentielle malgré le fait que le fait que ça soit dans
    une AsyncTask. Est-ce que ça provient du onPostExecute() qui bloque ou attend la fin de la tâche ?

    (*) L'async task utilise 2 niveaux de cache, le file system et le réseau. Quand c'est le réseau, avec un compteur de type
    static je vois bien que je n'ai qu'une requête en parallèle à un instant t.

    J'ai essayé les ThreadPoolExecutor à la place de l'AsyncTask, mais si là au niveau réseau ça marche bien en parallèle,
    ça saccade carrément au niveau de l'affichage OpenGL même lorsque les Tiles sont sur le file system ! J'ai essayé de limiter
    le nombre de Thread dans le ThreadPoolExecutor, mais ça ne change rien.

    Bref un truc de ouf. Avec l'async task ça fonctionne bien (aucun lag OpenGL) quand c'est en local, par contre les textures
    mettent pas mal de temps à apparaitre (même dans ce cas pas de lag).

    Bref je sais plus trop quoi explorer !

  2. #2
    Membre habitué
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    141
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2009
    Messages : 141
    Points : 177
    Points
    177
    Par défaut
    Ok donc à priori le lag semble venir de ma function updateModel (celle qui crée les Tiles) et ceci uniquement
    lorsque j'utilise les ThreadPoolExecutor alors qu'avec l'AsyncTask ça se passe bien (sauf pour le réseau ou ça rame).

    J'ai l'impression que ça vient du ThreadPoolExecutor qui n'appartiendrait pas au Thread UI alors que l'AsyncTask oui
    (je pense).

    Du coup je charge la hierarchie de Thread d'opengl (qui n'en n'a pas besoin) et non celle de l'ui...

    Faut que je creuse ça.

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    141
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2009
    Messages : 141
    Points : 177
    Points
    177
    Par défaut
    A priori en utilisant le ThreadPoolExecutor et en settant la priorité des Threads à Thread.MIN_PRIORITY
    j'arrive à retrouver la rapidité de l'AsyncTask (quasiment presque pas de ralentissement à l'affichage) tout
    en ayant un maximum de parallélisme sur les requêtes réseaux.

    Mais faut que j'analyse encore tout ça.

Discussions similaires

  1. Réponses: 2
    Dernier message: 02/04/2010, 19h16
  2. Problème de performance au chargement d'une Map
    Par alen dans le forum SL & STL
    Réponses: 11
    Dernier message: 13/01/2009, 15h37
  3. [C#] Probléme de performance avec IsDbNull
    Par jab dans le forum Windows Forms
    Réponses: 8
    Dernier message: 04/04/2005, 11h39
  4. [oracle 9i][Workbench]Problème de performance
    Par nuke_y dans le forum Oracle
    Réponses: 6
    Dernier message: 03/02/2005, 17h38
  5. [ POSTGRESQL ] Problème de performance
    Par Djouls64 dans le forum PostgreSQL
    Réponses: 6
    Dernier message: 26/05/2003, 16h18

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