2009-11-15 6 views

Répondre

4

Essayez de lancer:

Run -> Run With Performance Tool -> OpenGL ES.

vous devez exécuter cet outil lorsqu'il est connecté à l'appareil (que vous voudriez évidemment de toute façon pour le réglage des performances ...)

Il vous donne Core Animation FPS qui peut (probablement) pas ce que vous Vous cherchez, mais il peut représenter un certain nombre d'autres statistiques utiles pour vous, ce qui peut également vous aider à optimiser.

+0

Je suis en mesure de voir FPS sur mon ancien iPod touch en cours d'exécution 2.2.1 mais pas mon nouvel iPhone 3gs en cours d'exécution 3.1. – Mel

+0

Essayez de lancer Instruments en mode autonome, et attachez-le à votre processus en cours d'exécution - cela vous permet d'ajouter l'outil que vous voulez, où XCode devient parfois confus au sujet des outils que vous êtes autorisé à exécuter. –

1

Trouver quelque chose comme un temporisateur haute résolution (plus de 1000 ticks/secondes), et mesurer le temps entre le début du rendu et son affichage à l'écran.

Diviser les tiques par seconde au moment où vous mesurée juste, et vous avez le FPS.

0

filets.Vérifier this out. Il y a des liens très utiles à ce sujet. Bonne chance!

1

Lorsque vous atteignez la fin de votre code de dessin, augmenter un compteur.

Configuration d'un incendie NSTimer chaque seconde, afficher le compteur, et le remettre à zéro.

0

La mesure de FPS pendant le développement est presque insignifiante. Mesurez le temps de rendu dont vous avez besoin!

De cette façon, vous aurez une bien meilleure compréhension de la façon dont vos modifications affectent les performances. Habituellement, c'est une très bonne idée de diviser votre temps de rendu en tranches significatives, par ex. "rendu arrière-plan", "rendu niveau", "rendu mobs", etc.

Si vous voulez toujours faire des FPS, mon préféré est la version de Johns NSTimer, même si elle ne montre pas de pics.

4

je suppose que ce que vous voulez est la suivante:

// fps calculation 
static int m_nFps; // current FPS 
static CFTimeInterval lastFrameStartTime; 
static int m_nAverageFps; // the average FPS over 15 frames 
static int m_nAverageFpsCounter; 
static int m_nAverageFpsSum; 
static UInt8* m_pRGBimage; 

static void calcFps() 
{ 
    CFTimeInterval thisFrameStartTime = CFAbsoluteTimeGetCurrent(); 
    float deltaTimeInSeconds = thisFrameStartTime - lastFrameStartTime; 
    m_nFps = (deltaTimeInSeconds == 0) ? 0: 1/(deltaTimeInSeconds); 

    m_nAverageFpsCounter++; 
    m_nAverageFpsSum+=m_nFps; 
    if (m_nAverageFpsCounter >= 15) // calculate average FPS over 15 frames 
    { 
     m_nAverageFps = m_nAverageFpsSum/m_nAverageFpsCounter; 
     m_nAverageFpsCounter = 0; 
     m_nAverageFpsSum = 0; 
    } 


    lastFrameStartTime = thisFrameStartTime; 
} 

Cordialement, Asaf Pinhassi.

+0

+1 pour 'CFAbsoluteTimeGetCurrent()'. En utilisant NSTimer, j'ai trouvé que ça tournait aussi vite que la boucle d'exécution, donc l'utilisation du temps absolu signifie que je sais combien d'images par seconde je reçois vraiment. – jowie

Questions connexes