System Analysis

A top-down approach to analysis and optimization suggests that you start with determining whether your problems are with the CPU or the GPU. Understanding your performance issues at this highest level is extremely important; otherwise, you might spend lots of time optimizing parts of your game that end up being secondary to much larger performance issues.


A good rule is to have a balance between the utilization of the CPU and the GPU resources – do not have the CPU running at 100% while the GPU is only 20% utilized, and vice-versa.

To find out whether your application is CPU bound or GPU bound, use System Analyzer running in a client/server mode.

Follow these basic steps to understand whether you OpenGL/OpenGL ES* application is CPU bound or GPU bound:


Set up your host and target systems for analysis

For Android OpenGL ES applications:

  1. Set up Android Debug Bridge (adb) USB connection and connect your device to the host system via a USB cable.
  2. Run the System Analyzer on your analysis system and connect System Analyzer to your Android device.
  3. Select an application for analysis.

For Desktop OpenGL applications:

  1. Analyze system data for your Ubuntu target system.
  2. Launch the application for analysis using the GPA Monitor.
  3. Run the System Analyzer and click Connect to use the tool on your local system. If you want to analyze your application remotely, you need to enter the IP address of the target system where your application runs.


Configure system analysis

Select the metrics you want to analyze for your application.  
The metrics available for display are dependent upon your specific graphics device. Optionally, you can also add your custom metrics.


Analyze performance data for your application in real time



  1. Analyze real-time metrics data monitored for your application and export metrics data to CSV file for further processing.
  2. Perform "what if" experiments to identify various bottlenecks through modifying render states. You do not need to change the application source code or recompile the application to see the effect of a particular render state on the rendering process.
  3. Simulate various CPU settings to determine whether your application performance depends on CPU frequency of the device - only applicable to OpenGL ES analysis on Android devices.

Next Steps

If all went well, you met your performance and playability goals by using the System Analyzer to identify and resolve issues with your game.

If you still have not met your overall objectives, try the following:

  • If you suspect that your game is GPU-bound, use the Graphics Frame Analyzer to perform a "deep dive" into exactly what is happening within a specific frame. For details, see Frame Analysis for OpenGL/OpenGL ES* Applications.
  • If you know that your game is CPU-bound, you might try using some CPU-specific tools to help improve your performance on the CPU. In particular, with multiple cores now being the rule rather than the exception, parallelizing your code can have a big impact on overall CPU performance.
For more complete information about compiler optimizations, see our Optimization Notice.