Le
programme LibraryTimer v1.1 disponible sur Aminet est vraiment très
intéressant pour notre sujet. En effet, il permet de connaître avec
précision la fréquence d'utilisation de telle ou telle fonction de
n'importe quelle librairie Amiga.
Rappel
pour les débutants : les librairies sur nos Amiga sont toutes composées
de plusieurs fonctions ayant chacune une utilité bien spécifique. Par
exemple, la fonction R_CacheFlush de l'exec.library permet de remettre
le code et le data cache du CPU à zéro. Pour ce qui nous intéresse dans
cet article aujourd'hui, et bien les drivers Warp3D possèdent eux aussi
des fonctions, et LibraryTimer permet de savoir combien de fois les
programmes utilisant Warp3D (comme Quake2 par exemple, ou n'importe quel
autre) ont appelé chacune de ses nombreuses fonctions disponibles.
L'utilité pour le coder est bien sûr de retravailler déjà les fonctions
les plus importantes, celles qui sont les plus souvent appelées. Bien
évidement, ces statistiques varient suivant les jeux lancés et même
peut-être aussi suivant la séquence du jeu. Enfin bref, ici pour le
moment, nous prenons Quake2 et le tout début de l'aventure.
Son utilisation est très simple. Il suffit déjà de lancer le jeu :
Ensuite, revenir sous le Workbench avec Amiga-M et cliquer sur le
programme LibraryTimer. Une fois celui-ci chargé, il faut tout d'abord
choisir la librairie à examiner. Pour cet exemple, c'est
WD3_AvengerLEMU.library en cliquant alors après sur "Patch" :
Revenir au jeu, et y jouer pendant une courte durée, comme deux minutes,
afin d'obtenir un échantillon statistique. Re-switcher ensuite au
Workbench et cliquez sur "Update". Voilà, le nombre de "Calls" s'affiche
pour chaque fonctions (Offset) :
Déjà,
la constatation criante est que peu de fonctions sont appelées pour la
portion de Quake2 jouée. Les fonctions -$24 et -$40 ont été utilisées
respectivement 571 ($23B en hexadécimal) et 572 ($23C) fois. Notez que
"Time ticks" donne aussi la moyenne de temps qu'a prise la fonction a
été exécutée : j'ignore pour le moment si ces résultats sont probants
et/ou précis.
Une autre fonction a été utilisé encore bien plus souvent, la -$6C avec 6769 ($1A71) appels :
Mais il y a bien plus fort pour notre exemple ! La -$19E appelée 206 387
($32633) fois !! Incroyable ! Et les -$1BC et -$1C2 environ 108 390
($1A766) et 14 307 ($37E3) fois :
Là, c'est clair et net : c'est la -$19E qu'il faut optimiser le plus
possible !! Elle est appelée par W3D_GetDriverTexFmtInfo de la
Warp3D.library :
Bref, vous l'avez compris, LibraryTimer est très utile pour déjà
localiser les fonctions utilisées, et surtout celles qui sont le plus
souvent sollicitées.