Flex Profiler – Optimiser votre application Flex avec le Profiler de Flex Builder 3 (Partie 1)

Dans les précédents tutoriaux sur le Garbage Collector AS3 et la gestion des ressources dans une application Flex, vous avez pu voir comment était gérée la mémoire dans une application Flex (ou Adobe Air). Pour traquer ces fuites mémoire (Memory Leaks), vous pourriez regarder gonfler/dégonfler votre navigateur dans le gestionnaire des tâches ou bien utiliser la variable System.totalMemory offerte par flash qui indique quelle place prend votre application en mémoire. Cette technique est plutôt archaïque et ne peux pas vous permettre de gérer efficacement la mémoire utilisée par votre application en temps réel.

Heureusement, Flex Builder 3 propose un outil très utile appelé Flex Profiler. Il permet (entre autres) de visualiser le nombre d’instance et la taille en mémoire de tous les objets de votre application durant son exécution.

Dans cet article, je vais vous montrer comment utiliser ce Flex Profiler afin de visualiser les fuites mémoire de votre application. Pour que tout le monde parte de la même base, je vais expliquer le fonctionnement du Flex Profiler sur un projet crée pour l’occasion.

Télécharger le projet exemple du Flex Profiler FB3

Pour utiliser ce projet, créez simplement un nouveau projet nommé ProfilerScenarios dans Flex Builder 3, dezippez l’archive et remplacez le dossier src.

Lancer le Flex Profiler et établir la connexion à l’application

La première étape pour utiliser ce Profiler est bien sûr de le lancer et ensuite de vérifier qu’il soit bien connecté à l’application à « profiler ». Pour lancer le Flex Profiler, vous aurez besoin de Flex Builder 3 (Professional). Il vous suffit ensuite de cliquer sur le bouton juste à côté du bouton qui permet de lancer l’application en mode Debug.

flex profiler

L’application devrait se lancer et le focus va revenir sur Flex Builder car une nouvelle fenêtre de configuration vient de s’ouvrir. Cette fenêtre va vous permettre de configurer le lancement du Flex Profiler. Vous avez plusieurs options qui vont vous permettre de visualiser certaines informations (sachant que certaines options peuvent grandement ralentir votre application).

flex profiler 2

Voici à quoi servent ces différentes options:

  • Enable Memory Profiling: Demander au profiler de collecter les données concernant la mémoire. Utilisez cette option pour détecter les fuites de mémoire ou les créations d’objet excessives.
  • Watch Live Memory Data: Demander au Profiler d’afficher la donnée en mémoire dans la vue « Live Objects » lors de l’utilisation du Profiler.
  • Generate Object Allocation Stack Traces: Demander au Profiler de capturer le stack (la pile d’instruction) chaque fois qu’un nouvel objet est crée. Cette option peut ralentir le fonctionnement de l’application pendant le profiling, elle doit être cochée uniquement si nécessaire
  • Enable Performance Profiling: Demander au profiler de collecter les données de la pile d’instruction à un certain intervalle (échantillonage). Vous pouvez utiliser ces échantillons pour déterminer quand et comment le temps d’exécution est passé.

Si votre profiler ne se lance pas (la fenêtre ne s’ouvre pas et vous n’avez pas de messages d’erreur, plusieurs cas sont possibles:

  • Vous n’avez pas le Flash Debug Player installé
  • Regardez dans votre gestionnaire des tâches si vous n’avez pas un adl.exe (Adobe Air Debug Launcher) déjà lancé et qui soit resté en tâche de fond. Si oui, killez le et relancez le profiler
  • La connexion s’est mal faîte, relancez votre navigateur et/ou Flex Builder totalement

Vous pouvez décocher « Enable Performance Profiling » pour le moment. Une fois que vous avez fait votre choix, cliquez sur « Resume ». La perspective Flex Profiling va s’ouvrir et afficher les informations dont vous aurez besoin.

L’interface du Flex Profiler en détail

flex profiler 3

L’interface du Flex Profiler est partagée en 3 parties:

  • le coin en haut à gauche de l’écran montre l’application actuellement inspectée. Cette zone montre aussi les snapshots mémoire (voir plus loin) et plusieurs icônes dont je vais expliquer l’utilité.
  • Le coin en haut à droite montre le graphique de l’utilisation mémoire actuelle/maximale. Si votre application continue à monter en mémoire sur ce graphique au fur et à mesure de son utilisation, vous avez vraisemblablement une fuite mémoire.
  • Le bas de l’écran contient actuellement une vue appelée Live Objects. Cette vue affiche les classes, packages, instances courantes et cumulées de chaque type d’objet, ainsi que la mémoire courante et cumulative utilisée par ces objets.

La barre d’outils du Profiler contient les éléments suivants:

  •  resume Resume: Relancer le profiling. Ce bouton peut être pressé uniquement si la session a été mise en pause
  • suspend_icon.png Suspend: Mettre en pause le profiling de l’application.
  • terminate_icon.pngTerminate: Terminer la session actuelle. Cette option est uniquement disponible quand vous sélectionnez une application dans la liste en dessous
  • run_garbage_collector_icon.png Run Garbage Collector: Demande à Flash de déclencher le Garbage Collector(uniquement quand une application est en train d’être inspectée)
  • take_memory_snapshot_icon.png Take Memory Snapshot: Conserver l’utilisation mémoire actuelle d’une application pour pouvoir l’examiner et la comparer à d’autres snapshots par la suite. Cette option est disponible quand vous avez sélectionné Enable Memory Profiling au lancement du Profiler. Le Profiler ajoute ces memory snapshot comme enfant de l’application dans la vue Profile. Pour ouvrir un snapshot mémoire, double-cliquez simplement dessus dans la liste de la vue Profile. NB: Une garbage collector sera effectué avant que le memory snapshot soit effectué.
  • find_loitering_objects_icon.png Find Loitering Objects: Compare deux memory snapshot dans la vue « Loitering Objects ». Cette option est active quand vous avez deux memory snapshots sélectionnés.
  • view_allocation_trace_icon.png View Allocation Trace: Compare les méthodes entre deux memory snapshots dans la vue « Allocation Trace ». Cette option est active quand vous avez deux memory snapshots sélectionnés.
  • reset_performance_data_icon.png Reset Performance Data: Vide la donnée collectée. Utile pour faire une comparaison rapide (reset puis utilisation de l’application = différence entre deux snapshots)
  • capture_performance_data_icon.png Capture Performance Profile: Prend un performance snapshot et l’ajoute comme enfant de l’application dans la vue Profile. Cette option est accessible uniquement si vous avez coché Enable Performance Profiling au lancement du Profiler.
  • delete_icon.png Delete : Supprime le snapshot sélectionne de la mémoire. Ce bouton supprimer aussi l’application de la vue Profile si son statut est Terminated.

Flex Profiler – Optimiser votre application Flex avec le Profiler de Flex Builder 3 (Partie 2)

6 réflexions au sujet de « Flex Profiler – Optimiser votre application Flex avec le Profiler de Flex Builder 3 (Partie 1) »

  1. Ping : Flex Profiler - Optimiser votre application Flex avec le Profiler de Flex Builder 3 (Partie 2) - Adobe Flex Tutorial - Tutoriaux Flex Builder, MXML, ActionScript, AS3

  2. NoTsu

    Merci pour cet article :)

    Fort précieux pour ceux qui comme moi se lancent dans le profiling d’applications, d’ailleurs le profiler s’adapte tout aussi bien pour profiler des appli. Flash ( et c’est d’ailleurs la meilleure solution que j’ai actuellement pu trouver ^^ ).
    Vu la façon dont flash gère sa mémoire cet outil devient indispensable pour les projets conséquents.

  3. fnicollet Auteur de l’article

    Effectivement, le profiler peut aussi être utilisé pour des projets pur ActionScript. D’ailleurs, le debugger de Flex Builder est bien pratique aussi pour de gros projets AS3 :)

  4. NoTsu

    Par contre, sur mon projet « complexe » en AS3 pure, plusieurs fois de suite au lancement il me fait cette erreur :

    TypeError: Error #1009: Il est impossible d’accéder à la propriété ou à la méthode d’une référence d’objet nul.
    at ProfilerAgent/allCompleteHandler()[C:\SVN\branches\3.2.0\modules\profiler3\as\ProfilerAgent.as:293]

    Je fais Continuer à chaque fois et il finit par bien m’exécuter mon flash, une idée d’ou ça peut venir ? Le profiler serait buggé ? ^^

Les commentaires sont fermés.