2009-11-15 48 views

回答

4

嘗試運行:

Run -> Run With Performance Tool -> OpenGL ES

你必須在連接到設備運行工具(你明明想反正性能調優...)

它給你的Core Animation FPS可能(可能)不會是你正在尋找,但它可以爲您繪製許多其他有用的統計數據,這些數據也可以幫助您優化。

+0

我可以在運行2.2.1的舊式iPod touch上看到FPS,但運行3.1的新款iphone 3gs卻沒有。它只提供了一個選項... – Mel 2009-11-15 19:36:52

+0

嘗試運行獨立的Instruments,並附加到正在運行的進程 - 這可以讓您添加任何您喜歡的工具,其中XCode有時會對您「允許」運行的工具感到困惑。用於'CFAbsoluteTimeGetCurrent()'的+1 – 2009-11-15 20:47:51

1

找到像高分辨率定時器(超過1000個滴答/秒), 的東西,並測量從開始渲染到屏幕之間的時間。

除以時間每秒滴答你只是測量,你有FPS。

0

檢查this線程。有一些非常有用的鏈接。祝你好運!

1

當您到達繪圖代碼的末尾時,增加一個計數器。

設置一個NSTimer火災每一秒,顯示該計數器,並且它重置爲零。

0

在開發過程中測量FPS幾乎沒有意義。 測量你需要的渲染時間!

這樣你將有你的變化是如何影響性能更加清醒地認識。 通常,將渲染時間分割爲有意義的切片是一個非常好的主意,例如, 「渲染背景」,「渲染級別」,「渲染小怪」等。

如果你仍然想做FPS,我個人最喜歡的是Johns NSTimer版本,即使它不顯示尖峯。

4

我猜你想要的東西是這樣的:

// 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; 
} 

問候, 阿薩夫Pinhassi。

+0

。使用NSTimer我發現它看起來像運行循環一樣快,所以使用絕對時間意味着我知道每秒鐘我有多少幀。 – jowie 2013-06-12 10:04:51