I have the same problem in 3G. I simplified my application only to the FPS counter drawn above the empty (pink) backbuffer, and it was still 40 fps.
After some searches, I found a very similar problem being discussed in the cocos2d-iphone.org forum.
The solution was to disable the autorotation of the view controller. So I made my mustAutorotateToInterfaceOrientation to always return NO, and it worked (!!!). I had a stable 60 FPS. Then I returned my simple game graphics and it was stable at 60 FPS. But my game, which is expected to work in landscape mode, currently works in portrait mode by default.
I have no desire to write my own autorotation code, so I return to 40 frames per second. Does anyone know how to avoid this personnel reduction in autorotation?
source share