2010-01-27 3 views
2

Je viens de sortir de la PSP où les tests de performance étaient faciles. Vous venez d'éteindre 'vsync' et d'imprimer le frameratem, puis de changer quelque chose et de voir si la fréquence d'images augmente ou diminue ...Obtenir des performances de framerate sur l'iPhone

Y at-il un moyen de faire la même chose sur l'iPhone? Comment désactivez-vous vsync? L'outil Instruments est à côté de inutile. Son principal problème étant que son fonctionnement affecte négativement la performance de l'application! En outre, le taux de trame qu'il signale est extrêmement sporadique.

Je ne veux pas d'outil sophistiqué qui signale les arbres d'appels et le temps passé dans chaque fonction. Je veux juste un taux de trame sans restriction et un moyen de voir ce que c'est. Y a-t-il un compteur de haute précision que vous pouvez utiliser sur l'iPhone? Quelque chose comme QueryPerformanceCounter dans Windows?

En outre, y a-t-il de toute façon pour vous de tuer les processus en arrière-plan de sorte que vous sachiez qu'ils ne peuvent pas affecter la performance, peut-être résoudre le problème de fréquence d'images sporadique?

Répondre

0

Vous adoptez l'approche «essayer quelque chose et mesurer». Très indirect. Il est facile de dire exactement ce qui prend le temps; cela ne dépend pas de quoi d'autre se passe et ne nécessite pas l'apprentissage d'un nouvel outil. All you need is a debugger that you can interrupt.

+0

donc l'idée est. Continuez à faire une pause et à reprendre le débogueur, et la fonction sur laquelle il s'arrête le plus est celle que vous devez optimiser en premier, que ce soit parce que c'est appelé beaucoup ou parce que cela prend du temps. ça sonne bien en théorie. mais le problème est, avec le filetage et les choses ect. Par exemple, lorsque vous appuyez sur pause, le débogueur doit attendre que le code atteigne une attente. par exemple j'ai essayé ceci sur mon application d'Iphone, et il casse au même point chaque fois. complètement dans le code du système (pas de fonctions de la mienne). avez-vous essayé cela sur l'iphone? Pouvez-vous énumérer certaines plates-formes/débogueurs où cela fonctionne? – matt

+0

@matt: Deux choses. 1) Regardez aussi la pile des appels, car toutes les lignes de code de la pile sont conjointement responsables de l'état dans lequel elle se trouve. Si l'une d'entre elles pouvait être réduite ou pas du tout, le temps serait sauvegardé. 2) Thread A pourrait être en attente de thread B, il est donc préférable si vous pouvez capturer tous les threads dans le processus. Cela devrait faire la lumière sur votre problème, à moins qu'il n'y ait vraiment rien à optimiser. Essayez-les, et bonne chance. –

0

Vous ne pouvez pas supprimer les processus d'arrière-plan sur l'iPhone. Cela permettrait à une application buggée ou malveillante d'interférer avec la fonction du téléphone et les besoins de toutes les autres fonctions sur l'iPhone sont subordonnés au téléphone.

+1

Ce n'est pas une raison valable. Les processus d'arrière-plan seront d'abord supprimés lorsque la mémoire est faible. Et tuer Phone.app n'interférera pas non plus avec la fonction téléphone. – kennytm

0

Essayez QuartzDebug ou OpenGL Profiler.

1

Affichez votre application avec des instruments et utilisez l'instrument Core Animation. Il donne un taux de trame.

+0

L'instrument d'animation de base ne m'a pas donné un taux de trame (je ne fais pas beaucoup d'animations). L'analyse OpenGL ES l'a fait, ce qui est utile pour des choses comme les vues de table, les cartes, etc. –

0

Utilisez des instruments pour obtenir la fréquence d'images. Pour ce faire, exécutez le profil sur votre application (cliquez et maintenez sur le bouton Exécuter dans xcode et choisissez le profil). Assurez-vous de lancer votre application sur l'appareil. Choisissez l'analyse openGL ES. Regardez l'affichage des données sous les images d'animation de base par seconde.

Vous voulez viser 60fps.

Questions connexes