This blog post is dedicated to PVRMonitor, our newest hardware profiling tool for Android devices. PVRMonitor displays real-time CPU and GPU performance data as bar graphs (where a low load is green and a high load is red) in a persistent overlay on top of all the other windows. This is done using Android’s Hardware Composition, allowing the graph to be rendered with a negligible performance impact.
PVRMonitor is ideal for the everyday testing and profiling as it will allow you to see performance regressions pretty quickly even when the game runs at solid 60 frames per second.
You can download PVRMonitor now from Google Play and install it on your PowerVR-based device.
For those of you who don’t have access to Google Play, you can download the APK by clicking on the icon below.
Have you downloaded, installed and opened the app yet? Okay, read on for an overview of the features that we’ve implemented.
PVRMonitor is a real time system profiling tool that is overlaid on top of other windows. The information gets displayed as a bar chart containing an overview of the CPU load as well as various loads from the GPU.
Displays the CPU load (%) averaged over 200ms; there is an option to average it over 1 second and to display each core as a separate bar.
Why should I use it: This counter is very important as it will allow you to quickly see if the bottleneck is related to the CPU side of things.
The total load of the pixel processing hardware. This includes work in the ISP (Image Synthesis Processor), TSP (Texture and Shading Processor), pixel processing in the ALUs and related stall time.
This value displays the total load (%) of the pixel processing hardware. This includes the texturing, raster operation and of course, fragment shader processing.
Why should I use it: This value is very important as it is directly proportional to the number of pixels displayed at every frame. There will be situations for which the game will run at rock-solid 60fps but with a very high Total Pixel (%) and thus it will be a hint that something can still be optimized in order to achieve better battery life.
The total load of the vertex processing hardware. This includes vertex processing in the ALUs, work in the TA (Tile Accelerator) and related stall time.
This value displays the total load (%) of the vertex processing hardware. This includes not only the vertex shader processing but also the tiling.
Why should I use it: Generally neither tiling nor vertex shader processing will be a bottleneck. But if they ever become one, you’d want to know about it sooner rather than later.
Percentage of time that the ALUs have spent processing pixel shaders.
This value displays the time (%) that the shader processors have spent working in fragment shaders.
Why should I use it: Use it to know how expensive the fragment shaders of your application are. For example, this counter will be perfect to help you tune the ideal level of effects and lightning/shadowing quality to display on a given scene.
Percentage of time that the ALUs have spent processing vertex shaders.
This value displays the time (%) that the vertex processors have spent working in vertex shaders.
Why should I use it: Use it to monitor the amount of geometry being processed and help you to optimize it; often times a little mesh can go a long way. This counter will usually (or should usually) remain well below 10% in most games.
Notice that since our ALUs are unified (that is, they can process both fragment and vertex shaders), the ALU: Pixel and the ALU: Vertex values cannot go over 100% if added together.
Needless to say, all the values displayed should sound familiar if you ever had a chance to give PVRTune a go.
But… is this a PVRTune replacement? Not exactly.
PVRTune is the tool you should use for a full in-depth profiling work. PVRMonitor is a simplified overview of what the GPU and CPU are doing.
What’s under the hood?
For more details on the PVRMonitor internals, just read my previous blog post about PVRScope Stats. In short, PVRMonitor is an Android application built on top of the same PVRScope libraries that we distribute with the PowerVR Graphics SDK.
The GPU values displayed by PVRMonitor map 1:1 with the PVRScope counterpart, that is:
- Total Pixel → GPU task load: 3D core
- Total Vertex → GPU task load: TA core
- ALU: Pixel → USSE load: Pixel
- ALU: Vertex → USSE load: Vertex
What about the overhead? Negligible.
Since Android 4.0 (Ice Cream Sandwich) there is a hardware composer that takes care of the screen composition/blending of surfaces (up to a certain number of layers). Previously that task was done by SurfaceFlinger by using OpenGL ES 1.x in order to allow a software fallback.
PVRMonitor is an awesome and hassle-free way to know how your next big game is performing… while you are playing it! It will help you identify a wide range of possible bottlenecks without using any external tool and with no setup time required.
Download PVRMonitor now from Google Play and give it a go; if you have any suggestions or you think we should add any particular features to PVRMonitor, please use our recently-launched PowerVR Insider Feedback system. If you are unsure whether your device has a PowerVR GPU, here is a selection of mobile SoCs that run Android and integrate our graphics cores:
- Actions ATM7021
- Ingenic JZ4780
- Intel ‘Medfield’ Z2460, ‘Lexington’ Z2420
- MediaTek MT6573, MT6575, MT6577
- Rockchip RK3168
- Texas Instruments OMAP4430, OMAP4460
- Actions ATM7039
- Allwinner A31, A31s
- Intel ‘CloverTrail+’ Z2520, Z2560, Z2580
- MediaTek MT6589, MT8125
- Renesas (now acquired by Broadcom) MP5232, MP6530
- Samsung Exynos 5410
- Texas Instruments OMAP4470
- MediaTek MT8135
Don’t forget to come back to our blog for more tutorials and walk-throughs for our PowerVR Graphics SDK tools and follow us on Twitter (@PowerVRInsider and @ImaginationTech) for news and updates from our Developer Technology team.