Android Eclipse: Traceview, je ne comprends tout simplement pas

Je n’ai tout simplement pas les différents éléments de la sortie de traceview et je ne trouve pas de tutoriel. Quelqu’un pourrait-il s’il vous plaît expliquer ce qui suit en référence au diagramme ci-dessous:

entrer la description de l'image ici

  1. La largeur des barres correspond au temps que prend la fonction. A quoi correspond la hauteur?
  2. Quelle est la différence spécifique entre Inclusive et Exclusive. J’ai supposé que inclusif inclut les appels de toutes les fonctions enfants?
  3. Serait-ce vrai: la sum de (temps par appel fois Appels) = heure d’exécution du programme (qu’en est-il des tâches asynchrones?)
  4. Les tâches asynchrones peuvent-elles être ignorées lors du débogage du ralentissement sur le thread principal?
  5. La sum de tous les pourcentages en% Excl doit-elle être égale à 100%?
  6. Que se passe-t-il quand il y a des lacunes (blanc au milieu du noir)? Est-ce que lorsque d’autres processus Android sont en cours d’exécution, ou simplement vos propres tâches asynchrones (il semble que les lacunes de l’un soient alignées avec le remplissage partiel dans l’autre, si c’est le cas, il est utile de déplacer des tâches intensives vers une AsyncTask) )?

    Je ne peux pas répondre à toutes vos questions, mais je peux dire …

    pour # 4 no, vous exécutez un processeur à cœur unique (ou au moins un processeur), de sorte que les tâches asynchrones sur leur propre thread doivent interrompre le thread principal pour obtenir le temps de traitement. Chaque fois qu’un autre thread s’exécute sera “ralentissement” sur le thread principal, vous devriez donc regarder cela.

    pour # 6, les écarts que vous voyez dans la trace d’exécution de vos threads principaux correspondent exactement aux moments où votre asynctask reçoit du temps processeur. Encore une fois, single core, ne peut faire qu’un seul thread à la fois. Dans ce laps de temps, cela ne ressemble à aucun autre processus, mais ces threads étaient encore en arrière-plan. Comme c’était (probablement) un émulateur, c’est commun. Sur un téléphone en direct, vous en verrez beaucoup plus 🙂

    Je suis également assez sûr pour # 1 que la hauteur de chaque pic dans l’exécution du thread est le% d’utilisation du processeur. Par exemple, la zone “noire” du thread principal est inactive. Edit: Ok, je suis sûr maintenant. C’est ce que c’est. Ainsi, dans votre fil de discussion principal, cette zone en rose solide est une utilisation solide du processeur à 100%.

    (J’aurais ajouté ceci en tant que commentaire à la réponse de @ron, mais ma réputation n’est toujours pas assez élevée pour que je puisse en parler)).

    Depuis juillet 2011, vous pouvez en effet obtenir traceview et VMDebug pour vous donner l’heure de l’horloge murale ainsi que le temps d’utilisation du processeur, grâce à un changement de code de Jeff Brown. Je crains toutefois que les permissions nécessaires nécessitent un périphérique rooté. Cela conduit également à une fenêtre de suivi légèrement différente de celle de l’article de tjb ci-dessus.

    http://git.insignal.co.kr/?p=mirror/aosp/platform/dalvik.git;a=commitdiff;h=9f640af99bebc6e96f6e1e9903557e2c8f567483

    TLDR; adb shell setprop dalvik.vm.extra-opts -Xprofile:dualclock et redémarrer votre appareil.

    HRM, puisque je suis techniquement supposé aider à répondre à la question:

    1. D’après ce que je comprends des hauteurs des barres, elles sont liées aux fonctions parentales. Supposons qu’un () appelle b (). Alors un () est en cours d’exécution alors que b () est également en cours d’exécution. Pendant que b () est en cours d’exécution, traceview affichera la couleur de b; mais lorsqu’une est en cours d’exécution (c.-à-d. excl. le temps), elle va dessiner une couleur, et la barre sera légèrement plus haute que celle de b. Au moins, c’est certainement comme ça que les choses fonctionnent lorsque vous effectuez un zoom avant; Si vous cliquez sur la fonction correspondant à la barre plus haute, des parenthèses seront placées sous les petites barres à proximité, indiquant que le parent était responsable de la totalité; et le parent est toujours affiché comme la barre plus grande.

    2. Oui :). Inclusive est le temps passé à exécuter la fonction ou toute chose appelée par cette fonction; Exclusive est «exclusif des fonctions appelées» et correspond uniquement au temps passé dans la fonction proprement dite (ou à son entrée / sortie).

    3. Seulement pour le niveau supérieur, que je pense que vous avez impliqué; et même alors voir la réponse de @ ron – c’est le temps d’utilisation de l’unité centrale, pas l’heure de l’horloge murale. AsyncTasks s’exécutent dans le thread principal, et seront donc inclus quelque part dans la répartition du niveau supérieur. Même chose pour les gestionnaires

    4. répondu par Eric

    5. Non, en raison de l’arrondi / arrondi (c.-à-d. 1,87% afficherait 1,9%); mais la sum des entrées dans “Exclusif” doit correspondre à la durée totale indiquée dans le coin supérieur droit, ce qui correspond au nombre calculé pour votre question (3)

    6. répondu par Eric

    Un autre savoir-faire important concernant le graphique de traceview (comme mentionné ici ): L’heure affichée par traceview n’est pas l’heure de l’horloge murale, mais le temps CPU utilisé.

    Par exemple, en réduisant le nombre d’images par seconde, il se peut que la forme du graphique de suivi ne change pas, car il n’inclut pas les cycles de fonctionnement inactifs. Par conséquent, lors de la mesure des performances, il est également recommandé d’exécuter l’application pendant une période de temps déterminée (10 secondes, 60 secondes, etc.) et de vérifier si le temps pris par les appels 100% inclus est inférieur.

    Google vient de sortir un cours incroyable sur Udacity sur les performances d’Android. Il y a ce module qui donne un aperçu de Traceview , ainsi qu’un lien sous le module vidéo vers leur guide de cours qui couvre l’utilisation de Traceview en profondeur. En regardant ces réponses, vous répondrez à la plupart de vos questions. Je vous recommande fortement de le vérifier!