# Optimize graphics performance using Frame Advisor render graphs

## In this learning path

- [Introduction](https://learn.arm.com/learning-paths/mobile-graphics-and-gaming/render-graph-optimization/)
- [What are render graphs?](https://learn.arm.com/learning-paths/mobile-graphics-and-gaming/render-graph-optimization/what-are-render-graphs/)
- [Generating a render graph for your application](https://learn.arm.com/learning-paths/mobile-graphics-and-gaming/render-graph-optimization/generating-a-render-graph-for-your-application/)
- [Understanding your render graph](https://learn.arm.com/learning-paths/mobile-graphics-and-gaming/render-graph-optimization/understanding-your-render-graph/)
- [Problem solving – unused resources](https://learn.arm.com/learning-paths/mobile-graphics-and-gaming/render-graph-optimization/unused-resources/)
- [Problem solving – unwanted execution nodes](https://learn.arm.com/learning-paths/mobile-graphics-and-gaming/render-graph-optimization/unwanted-execution-nodes/)
- [Problem solving – textures with excessive resolution](https://learn.arm.com/learning-paths/mobile-graphics-and-gaming/render-graph-optimization/textures-with-excessive-resolution/)
- [Problem solving – inefficient transfer workloads](https://learn.arm.com/learning-paths/mobile-graphics-and-gaming/render-graph-optimization/inefficient-transfer-workloads/)
- [Next Steps](https://learn.arm.com/learning-paths/mobile-graphics-and-gaming/render-graph-optimization/_next-steps/)

## About this Learning Path

| Skill level:       | Introductory      |
|---------------------|-------------------|
| Reading time:       | 30 min            |
| Last updated:       | 21 Aug 2026       |

| Author:            | Mark Thurman      |
|---------------------|-------------------|
| Arm IP:            | [Mali](https://support.arm.com/?tab=compute-ip&Product%20Type=Graphics%20Processors), [Immortalis](https://support.arm.com/?tab=compute-ip&Product%20Type=Graphics%20Processors) |
| Tags:              | [Performance and Architecture](https://learn.arm.com/tag/performance-and-architecture), [Linux](https://learn.arm.com/tag/linux), [Windows](https://learn.arm.com/tag/windows), [macOS](https://learn.arm.com/tag/macos), [Android](https://learn.arm.com/tag/android), [OpenGL ES](https://learn.arm.com/tag/opengl-es), [Vulkan](https://learn.arm.com/tag/vulkan) |

### Who is this for?
Mobile application developers who wish to improve graphics performance.

### What will you learn?
Upon completion of this Learning Path, you will be able to:
- Understand Frame Advisor's Render Graph view.
- Use the Render Graph view to identify and resolve performance issues in your application.

### Prerequisites
Before starting, you will need the following:
- Frame Advisor, part of Arm Performance Studio, installed. Refer to the [Arm Performance Studio](https://learn.arm.com/install-guides/ams/) install guide.
- If you wish to analyze your own applications you will need a supported Android device.
- Some basic familiarity with Frame Advisor. Review the [Frame Advisor](https://learn.arm.com/learning-paths/mobile-graphics-and-gaming/ams/fa/) section in [Get started with Arm Performance Studio for mobile](https://learn.arm.com/learning-paths/mobile-graphics-and-gaming/ams/).

### Summary
You’ll use Arm Performance Studio and Frame Advisor render graphs to find rendering work that wastes GPU resources. First, you’ll capture GPU data with Streamline, then capture an affected frame in Frame Advisor. After that, you’ll interpret execution and resource nodes to find unused outputs, unnecessary execution nodes, oversized textures, and inefficient transfers. Finally, you’ll use the graph and the **API Calls** view to identify code to change.

### Frequently asked questions

<details>
<summary>How do I enable GPU data collection in Streamline before generating a render graph?</summary>
Open the **Configure Capture** section of the **Start** view and configure GPU data. For an Arm GPU, deselect **Use advanced mode** and select **Capture Arm GPU**.
</details>

<details>
<summary>What should I look for in the **Render Graph** view to understand frame execution?</summary>
Boxes (nodes) represent execution and resources, while arrows (edges) show how data moves between them. Focus on how resources produced by one node are consumed by later nodes to trace the frame’s data flow.
</details>

<details>
<summary>How do I spot unused resources in the graph?</summary>
Look for resources produced by an execution node that don’t feed into any downstream node. In the example, depth and stencil outputs are written but never consumed, indicating unnecessary work.
</details>

<details>
<summary>What should I do if an execution node produces only unused outputs?</summary>
Remove any API calls that represent that unused computation. Review the graph and code carefully to confirm the work is truly unused before making changes.
</details>

<details>
<summary>Why begin with Streamline before inspecting a render graph?</summary>
Streamline helps you identify which parts of the application are GPU‑heavy so you can target the right frames. After it’s identified, generate a render graph for those frames to investigate specific rendering inefficiencies.
</details>
