13.1.20. Profilerul de cod#

Window → Show Code Profiler deschide un profiler la nivel de funcție pentru firmware-ul care rulează pe camera conectată: care funcții C au rulat, cât de des și unde s-au dus microsecundele, transmis în timp real în timp ce un script se execută. Răspunde la întrebarea pe care o ridică contorul FPS – de ce este lentă această conductă – la nivelul codului propriu al camerei.

Suportul pentru profilare este compilat în firmware, nefiind întotdeauna prezent: camera trebuie să ruleze un firmware construit cu PROFILE_ENABLE=1, iar intrarea de meniu rămâne dezactivată în caz contrar. Construirea unui astfel de firmware face parte din fluxul de lucru de construcție personalizată tratat în Construirea firmware-ului.

The Code Profiler window: the function table populated with call counts, timing columns, percentages, and two hardware event counter columns, with the Flat/Tree and Inclusive/Exclusive controls on top and the totals line at the bottom

Profilerul urmărind rularea unui script: apeluri pe funcție, cronometrare și procent din timpul total, cu două contoare de evenimente hardware în coloanele din extrema dreaptă și linia de totaluri dedesubt.#

Fereastra este un tabel sortabil de funcții cu numărul lor de apeluri, microsecundele minime, maxime, totale și medii, ciclurile medii și procentul din timpul total, cu o linie de totaluri dedesubt și o casetă de filtrare pentru găsirea funcțiilor după nume. Numele funcțiilor provin din fișierul ELF al firmware-ului – îndreaptă câmpul pentru calea firmware-ului al ferestrei către fișierul .elf produs de build, iar adresele se rezolvă în nume.

Două comenzi de vizualizare organizează datele. Flat clasifică fiecare funcție în mod independent – vizualizarea pentru „care este cea mai costisitoare funcție”. Tree imbrică funcțiile apelate sub apelanți, arătând cum se descompune timpul de-a lungul lanțului de apeluri. În mod independent, Inclusive atribuie unei funcții timpul petrecut în tot ceea ce a apelat, în timp ce Exclusive numără doar corpul propriu al funcției – inclusive găsește subsistemul costisitor, exclusive găsește bucla costisitoare. Reset aduce contoarele la zero, ceea ce reprezintă modul în care măsori o etapă a unei conducte în mod izolat: resetează, las-o să ruleze, citește.

Profilerul poate de asemenea afișa contoare de evenimente hardware – ratări de cache, predicții greșite de ramificare și celelalte evenimente pe care procesorul le poate număra – alături de coloanele de cronometrare; selectează-le în aceeași fereastră pe firmware construit cu suportul respectiv.

Vezi și

CLI-ul pachetului openmv poate suprapune aceleași date de profilare pe un flux live din linia de comandă – vezi Interfața de linie de comandă openmv.