Note that, without any time overriding, if a game has been paused for a minute, when unpaused, the game will think the last frame took one minute to render. If the game is a racing game the physics engine will think the car went straight for a minute and the scene after unpausing will be totally different than when the game was paused. To prevent this from happening, GPU PerfStudio can override the values returned by the time functions:
How the Time Override Mode works
Most modern games are time-based, meaning that the position of objects within the game can be given by the following formula:
where 's' is the position of the object, 'v' is the object's velocity and 't' is the absolute time. Usually, applications use QueryPerformanceCounter to get 't'. By overriding the return value of this function, GPU PerfStudio can get the application to appear to freeze, run slower, or even run faster. By returning the same value over and over for 't', GPU PerfStudio can appear to freeze the application, though, in reality, the application is simply rendering the objects in the same position for each frame.
Make sure you are not enforcing a frame rate limiter, pausing will make your application believe it is running infinitely fast, this will cause the frame rate limiter to introduce huge delays that will cause the slowdown. Make sure you disable the frame rate limiter when you run with GPU PerfStudio.
When GPU PerfStudio pauses your application, it forces the timing functions to always return the same value. Make sure you are not dividing by the difference between these timing values or you will get a division by zero exception. A quick work around is to set the 'Time Override Mode' option to 'Slow motion' in the Client Settings dialog. This will cause the timers to run very slowly so lapses will be different from zero. The best fix is to handle the division by zero case in the animation engine.
Another alternative is to try using GPU PerfStudio's Frame Capture mode.
A few applications think that when a frame got rendered very quickly is because they are minimized and hence they stop rendering. Check that this is not the case. Setting the 'Time Override Mode' option to 'Slow motion' in the Client Settings dialog may help.
Your application is probably frame-based. GPU PerfStudio cannot pause frame-based application; you will have to make the application time-based or have a pause mode in your engine. In the latter case, you can try setting the 'Time Override Mode' option to 'None'. Another alternative is to try using GPU PerfStudio's Frame Capture mode.
The objects that are moving are probably being animated in a frame-based manner. This will cause the speed of their animation to depend on the CPU or GPU speed of the computer. The animation may run fine on your machine, but it may be different on faster or slower machines. You will have to make these animations time-based if you would like to debug them with GPU PerfStudio. Another alternative is to try using GPU PerfStudio's Frame Capture mode.
If your application has its own pause mode, where it will render the exact same draw calls for each frame, you can set the 'Time Override Mode' option to 'None' in order to avoid overriding the time values. Applications which have a frame rate limiter may crash, hang or render too slowly with the Time Override Mode set to 'Freeze' or 'Slow motion', however, the 'None' option prevents GPU PerfStudio from interfering with the time values, so you should not have these issues.
Try using GPU PerfStudio's Frame Capture mode. RDTSC does not work well on multi-core systems (http://msdn.microsoft.com/en-us/library/ee417693(v=vs.85).aspx) and is not as precise as QueryPerformanceCounter. It is recommended that you switch your application to using QueryPerformanceCounter if you would like to use GPU PerfStudio. Alternatively, if your application supports a pause mode, you can set the 'Time Override Mode' option to 'None'.