Firefox a maintenant un profileur intégré (nom de code SPS). Ce profileur permet, entres autres, de mieux mesurer la réactivité, de déterminer plus précisément à quoi est dû un changement dans les performances, et s'exécute dans des environnements et des plate formes pour lesquelles les profileurs externes ne sont généralement pas disponibles, telles que l'ordinateur d'un utilisateur standard, ou un appareil Android fermé par son constructeur.
"Stackwalking" contre "pseudostack"
Le profileur est conçu pour opérer dans deux modes différents : "Pseudostack" (par défaut) ou "stackwalking".
Pseudostack
Pseudostack (le défaut) requiert une version de Firefox qui a été intrumentée au niveau du code source avec SAMPLE_LABEL("NAMESPACE", "NAME");'
. Ceci ajoute un élément dans la pile d'appel qui est utilisé par le profileur pour déterminer par échantillonnage quel code est en train de s'exécuter. Ce mode est compatible avec toutes les architectures et environnements techniques.
For this to be effective, you do need to liberally use SAMPLE_LABEL
throughout the code, and unfortunately it won't be able to dig into system library and drivers.
Because of the small overhead of the instrumentation, the sample label shouldn't be placed inside hot loops. A profile reporting that a large portion is spent in "Unknown" code indicates that the area being executed doesn't have sample label. As we focus on using this tool and add additional sample labels this will improve.
"Stackwalking"
"Stackwalking" est une fonctionnalité dépendant de l'architecture de la plate forme d'exécution dont la prise en charge est encore incomplète. L'objectif est de déterminer quel code s'exécute en parcourant la pile des appels sans instrumentation, sur les architectures où cela est possible. Ceci permet d'avoir plus de détails sur les appels, et aide à analyser les problèmes dans lesquels du temps est passé dans les librairies systèmes ou les pilotes. Nous travaillons sur les fonctions nécessaires pour ce parcours de pile et l'identification des symboles, et toute aide est la bienvenue.
Disponibilité
Le profileur fonctionne en mode soit "Pseudostack" soit "stackwalking" en fonction de votre environment. Voir la description au-dessus pour les différences entre ces 2 modes.
Compilé en local | Version "Nightly" | Version officielle (Gecko 15.0+) | |
---|---|---|---|
Windows | Stackwalking (étapes de configuration à suivre) | Stackwalking | Pseudostack |
Mac | Stackwalking | Stackwalking | Pseudostack |
Linux | Pseudo stack (Bug concernant l'activation du stackwalking) | Pseudo stack (Bug concernant l'activation du stackwalking) | Pseudostack |
Fennec | Pseudostack | Non supporté (Bug) | Non supporté(Bug) |
B2G | Pseudostack (patchs à appliquer au source) | ??? | Non supporté(Bug) |
Exécuter le profileur
- Utiliser une version "nightly" ou compiler avec
ac_add_options --enable-profiling
(activez aussi les optimizations afin que que le profilage soit significatif). - Installer la dernière version de l'extension Profileur. Si le module n'est pas visible, activer 'Affichage ->Barre d'outils->Barre des modules'. Laissez l'extension se mettre à jour.
- Contrôler l'exécution du profileur depuis le menu qui s'ouvre en cliquant sur la partie Profileur de la barre des module en bas à droite.
- Démarrer le profiler avant d'exécuter l'action anormalement lente ou le laisser simplement tourner
- Utilisez le bouton "Analyse" ou le raccourci Ctrl-Shift-O (Cmd-Shift-O sur Mac OS X) pour visualiser le résultat en cours sur le site du Profileur
- Sauvegarder le profil en local, ou utiliser l'option Upload et mémoriser l'URL associée.
- Ouvrir un bug sur bugzilla concernant le problème de performance avec le fichier ou l'URL joint, ou les transmettre à une personne capable de s'en occuper
Profiler une compilation en local sous Windows
If you built Firefox for Windows locally and you would like to use the local symbols with the profiler, you will need to run an additional tool; see Profiling with the Built-in Profiler and Local Symbols on Windows.
Profiler Firefox mobile
- You'll need a custom build, this build should be built with optimization,
STRIP_FLAGS="--strip-debug"
andac_add_options --disable-elf-hack
(until we fix bug 747033) but should NOT be built with--enable-profiling
. - You'll need to have
adb
andarm-eabi-addr2line
in your bashPATH
, so uselocate arm-eabi-addr2line
(on linux) ormdfind name:arm-eabi-addr2line
(on OS X) and stick an export to its location in~/.bash_profile
. The extension will invoke bash to useadb
andaddr2line
. - Install the latest version of the extension in your host machine's Firefox browser that has your phone reachable via ADB.
- On your first run use "Get Libs". You'll need to repeat this step when switching phones.
- Start Firefox mobile normally and hit "Pull". This will recognize the instance of Firefox mobile and restart it with profiling enabled. Run your benchmark and hit "Pull" again.
Profiler "Boot to Gecko"
Note: Pour l'instant une carte SD est requise, jusqu'à ce que le bug 758697 soit fermé.
- You'll need a local build of Boot to Gecko; the default build configuration is fine.
- You'll need to have
adb
andarm-eabi-addr2line
in your bashPATH
, so uselocate arm-eabi-addr2line
(on linux) ormdfind name:arm-eabi-addr2line
(on OS X) and stick an export to its location in~/.bash_profile
. The extension will invoke bash to useadb
andarm-eabi-
addr2line
. If they are not there the process will fail or you'll only see raw addresses - In order to get symbols to work you may need to avoid stripping them. I'm not sure the best way to do this. Some candidates are adding
STRIP_FLAGS="--strip-debug"
togonk-misc/default-gecko-config
(this is copied toobjdir-gecko/.mozconfig
by some part of the build system) - Install the latest version of the extension in your host (Desktop) machine's Firefox browser that has your phone reachable via ADB.
- On your first run use "Get Libs". You'll need to repeat this step when switching reflashing/switching phone (this step needs to be done every time you update gecko). "Get Libs" will skip any existing files, so you'll need to delete them so that the new ones get pulled. They are stored in
/tmp/[device id]
/ - Make sure B2G is running and hit "Pull". This will recognize the instance of B2G and restart it with profiling enabled. Run your benchmark and hit "Pull" again.
Profiling content processes. Apply this patch to the profiler add-on.
Warning: When you're done profiling restart Boot to Gecko using adb shell stop b2g && adb shell start b2g
.
Contribuer
Le bug listant les problèmes ouverts est le bug 713227. Le source se situe dans tools/profiler
.
Le source de l'extension Profileur se trouve sur : https://github.com/bgirard/Gecko-Profiler-Addon.
Le dépôt de source Cleopatra se trouve sur : https://github.com/bgirard/cleopatra.
Fonctionnalités prévues
Here's a list of feature ideas that we haven't committed to yet; feel free to add your ideas:
- A "Doctor" extension that would detect if the user's browser periodically hangs for more than 500 ms and provide a UI notification with some profile data. The profile data can either be reported to Mozilla to correlate problems, have built in heuristics for resolving the problem (disabling the offending add-on, plug-in tab, db caches etc...), or be used by support for diagnostics.
- Automatically turn on the profiler a few seconds prior to triggering the hang detectors and attach a profile to the minidump.