docs.unity3d.com
Search Results for

    Show / Hide Table of Contents

    Class SystemMetricsMali

    System Metrics Mali class provides access to a wide variety of GPU performance Profiler Counters related to various aspects of device performance. You can use exposed ProfilerRecorderHandle to create relevant ProfilerRecorder to access collected performance data.

    Inheritance
    object
    SystemMetricsMali
    Namespace: Unity.Profiling.SystemMetrics
    Assembly: Unity.Profiling.SystemMetrics.Mali.dll
    Syntax
    public class SystemMetricsMali

    Properties

    Active

    Returns true if System Metrics Mali was initialized successfully, false otherwise. This means that System Metrics Mali runs on a device that supports hardware counters.

    Declaration
    public bool Active { get; }
    Property Value
    Type Description
    bool

    True when System Metrics Mali is available, false otherwise.

    Category

    Returns the ProfilerCategory for all System Metrics Mali counters

    Declaration
    public ProfilerCategory Category { get; }
    Property Value
    Type Description
    ProfilerCategory

    The ProfilerCategory that all Mali counters belong to.

    GpuCacheReadLookups

    Returns Cache Read Lookups performance counter handler (Mali counter: MaliL2CacheRdLookup).

    Declaration
    public ProfilerRecorderHandle GpuCacheReadLookups { get; }
    Property Value
    Type Description
    ProfilerRecorderHandle

    Use ProfilerRecorderHandle to access counter data with ProfilerRecorder and Valid to check if counter is supported.

    Remarks

    L2 cache read lookup activity. High values relative to external memory reads indicate good cache efficiency. Low cache hit rates may indicate poor data locality or working sets larger than cache capacity.

    GpuCacheWriteLookups

    Returns Cache Write Lookups performance counter handler (Mali counter: MaliL2CacheWrLookup).

    Declaration
    public ProfilerRecorderHandle GpuCacheWriteLookups { get; }
    Property Value
    Type Description
    ProfilerRecorderHandle

    Use ProfilerRecorderHandle to access counter data with ProfilerRecorder and Valid to check if counter is supported.

    Remarks

    L2 cache write lookup activity. High values relative to external memory writes indicate good cache efficiency. Monitors effectiveness of write combining and cache utilization for output data.

    GpuClippedPrimitives

    Returns Facing/XY Plane Culled Primitives performance counter handler (Mali counter: MaliGeomFaceXYPlaneCullPrim).

    Declaration
    public ProfilerRecorderHandle GpuClippedPrimitives { get; }
    Property Value
    Type Description
    ProfilerRecorderHandle

    Use ProfilerRecorderHandle to access counter data with ProfilerRecorder and Valid to check if counter is supported.

    Remarks

    Primitives culled by facing and XY plane tests (back-facing or out-of-frustum in XY axis). More than 50% culled may indicate out-of-frustum geometry - optimize with better software culling or batching granularity.

    GpuClippedPrimitivesPercentage

    Returns % Clipped Primitives performance counter handler (Mali counter: MaliGeomFaceXYPlaneCullRate)

    Declaration
    public ProfilerRecorderHandle GpuClippedPrimitivesPercentage { get; }
    Property Value
    Type Description
    ProfilerRecorderHandle

    Use ProfilerRecorderHandle to access counter data with ProfilerRecorder and Valid to check if counter is supported.

    GpuComputeQueueActiveCycles

    Returns Compute Queue Cycles performance counter handler (Mali counter: MaliCompQueueActiveCy).

    Declaration
    public ProfilerRecorderHandle GpuComputeQueueActiveCycles { get; }
    Property Value
    Type Description
    ProfilerRecorderHandle

    Use ProfilerRecorderHandle to access counter data with ProfilerRecorder and Valid to check if counter is supported.

    Remarks

    Number of cycles the compute processing queue has any workload present, including compute shaders. This provides granular analysis of compute shader workloads separate from vertex processing, enabling targeted optimization of compute-heavy applications.

    GpuComputeQueueUtilization

    Returns Compute Queue Utilization performance counter handler (Mali counter: MaliCompQueueUtil).

    Declaration
    public ProfilerRecorderHandle GpuComputeQueueUtilization { get; }
    Property Value
    Type Description
    ProfilerRecorderHandle

    Use ProfilerRecorderHandle to access counter data with ProfilerRecorder and Valid to check if counter is supported.

    Remarks

    Compute queue utilization as percentage of GPU active time, measuring compute shader processing pressure. This enables analysis of compute-specific bottlenecks separate from vertex shader workloads. High utilization indicates compute-bound performance.

    GpuCulledPrimitives

    Returns Z Plane Culled Primitives performance counter handler (Mali counter: MaliGeomZPlaneCullPrim).

    Declaration
    public ProfilerRecorderHandle GpuCulledPrimitives { get; }
    Property Value
    Type Description
    ProfilerRecorderHandle

    Use ProfilerRecorderHandle to access counter data with ProfilerRecorder and Valid to check if counter is supported.

    Remarks

    Primitives culled by Z plane test (closer than near clip or further than far clip). Significant culling at this stage indicates insufficient application software culling - optimize view frustum culling.

    GpuCulledPrimitivesPercentage

    Returns % Culled Primitives performance counter handler (Mali counter: MaliGeomZPlaneCullRate)

    Declaration
    public ProfilerRecorderHandle GpuCulledPrimitivesPercentage { get; }
    Property Value
    Type Description
    ProfilerRecorderHandle

    Use ProfilerRecorderHandle to access counter data with ProfilerRecorder and Valid to check if counter is supported.

    GpuCycles

    Returns GPU Active Cycles performance counter handler (Mali counter: MaliGPUActiveCy).

    Declaration
    public ProfilerRecorderHandle GpuCycles { get; }
    Property Value
    Type Description
    ProfilerRecorderHandle

    Use ProfilerRecorderHandle to access counter data with ProfilerRecorder and Valid to check if counter is supported.

    Remarks

    Shows overall GPU processing load. High values indicate GPU-bound content. If high but individual queues are low, may indicate serialization or dependency issues preventing parallel processing.

    GpuCyclesPerPixels

    Returns Cycles Per Pixel performance counter handler (Mali counter: MaliGPUCyPerPix)

    Declaration
    public ProfilerRecorderHandle GpuCyclesPerPixels { get; }
    Property Value
    Type Description
    ProfilerRecorderHandle

    Use ProfilerRecorderHandle to access counter data with ProfilerRecorder and Valid to check if counter is supported.

    GpuDivergedInstructions

    Returns Diverged Instructions performance counter handler (Mali counter: MaliEngDivergedInstr)

    Declaration
    public ProfilerRecorderHandle GpuDivergedInstructions { get; }
    Property Value
    Type Description
    ProfilerRecorderHandle

    Use ProfilerRecorderHandle to access counter data with ProfilerRecorder and Valid to check if counter is supported.

    GpuEarlyZKills

    Returns Early Z Kills performance counter handler (Mali counter: MaliFragEZSKillQd).

    Declaration
    public ProfilerRecorderHandle GpuEarlyZKills { get; }
    Property Value
    Type Description
    ProfilerRecorderHandle

    Use ProfilerRecorderHandle to access counter data with ProfilerRecorder and Valid to check if counter is supported.

    Remarks

    Fragment quads killed by early depth/stencil testing before shading. High percentage is generally good as it avoids redundant processing. May indicate opportunity for software culling (portal/occlusion culling) to avoid submitting occluded geometry.

    GpuEarlyZTests

    Returns Early Z Tests performance counter handler (Mali counter: MaliFragEZSTestQd).

    Declaration
    public ProfilerRecorderHandle GpuEarlyZTests { get; }
    Property Value
    Type Description
    ProfilerRecorderHandle

    Use ProfilerRecorderHandle to access counter data with ProfilerRecorder and Valid to check if counter is supported.

    Remarks

    Fragment quads subjected to early depth/stencil testing. High early test rates are efficient as they remove redundant work before shading. Enable depth testing and avoid modifiable coverage for better early test rates.

    GpuFragmentCycles

    Returns Fragment Queue Cycles performance counter handler (Mali counter: MaliFragQueueActiveCy).

    Declaration
    public ProfilerRecorderHandle GpuFragmentCycles { get; }
    Property Value
    Type Description
    ProfilerRecorderHandle

    Use ProfilerRecorderHandle to access counter data with ProfilerRecorder and Valid to check if counter is supported.

    Remarks

    Indicates fragment workload pressure. For good parallelism, should be similar to GPU active cycles. Low values with high GPU cycles may indicate vertex/compute bottleneck. Includes stall time waiting for external memory.

    GpuFragmentFPKActiveCycles

    Returns Fragment FPK Active Cycles performance counter handler (Mali counter: MaliFragFPKActiveCy)

    Declaration
    public ProfilerRecorderHandle GpuFragmentFPKActiveCycles { get; }
    Property Value
    Type Description
    ProfilerRecorderHandle

    Use ProfilerRecorderHandle to access counter data with ProfilerRecorder and Valid to check if counter is supported.

    GpuFragmentJobs

    Returns Fragment Jobs performance counter handler (Mali counter: MaliFragThread).

    Declaration
    public ProfilerRecorderHandle GpuFragmentJobs { get; }
    Property Value
    Type Description
    ProfilerRecorderHandle

    Use ProfilerRecorderHandle to access counter data with ProfilerRecorder and Valid to check if counter is supported.

    Remarks

    Fragment shader tasks executed by GPU. High counts indicate fragment processing bottleneck. Optimize with simplified fragment shaders, reduced overdraw, better early-Z utilization, or precision lowering (mediump/lowp).

    GpuFragmentUtilization

    Returns Fragment Queue Utilization performance counter handler (Mali counter: MaliFragQueueUtil).

    Declaration
    public ProfilerRecorderHandle GpuFragmentUtilization { get; }
    Property Value
    Type Description
    ProfilerRecorderHandle

    Use ProfilerRecorderHandle to access counter data with ProfilerRecorder and Valid to check if counter is supported.

    Remarks

    Fragment queue utilization as percentage of GPU active time. For GPU-bound content, the dominant queue should be close to 100%. Low utilization may indicate dependency problems or insufficient fragment work.

    GpuInputPrimitives

    Returns Input Primitives performance counter handler (Mali counter: MaliGeomTotalPrim).

    Declaration
    public ProfilerRecorderHandle GpuInputPrimitives { get; }
    Property Value
    Type Description
    ProfilerRecorderHandle

    Use ProfilerRecorderHandle to access counter data with ProfilerRecorder and Valid to check if counter is supported.

    Remarks

    Total number of input primitives to rendering process. High complexity geometry is expensive as vertices are larger than compressed texels (~32 bytes each). Use dynamic LOD and normal maps to reduce primitive count.

    GpuInstructions

    Returns Instructions performance counter handler (Mali counter: MaliEngInstr)

    Declaration
    public ProfilerRecorderHandle GpuInstructions { get; }
    Property Value
    Type Description
    ProfilerRecorderHandle

    Use ProfilerRecorderHandle to access counter data with ProfilerRecorder and Valid to check if counter is supported.

    GpuInterruptCycles

    Returns GPU Interrupt Cycles performance counter handler (Mali counter: MaliGPUIRQActiveCy).

    Declaration
    public ProfilerRecorderHandle GpuInterruptCycles { get; }
    Property Value
    Type Description
    ProfilerRecorderHandle

    Use ProfilerRecorderHandle to access counter data with ProfilerRecorder and Valid to check if counter is supported.

    Remarks

    Cycles when GPU has interrupt pending, waiting for CPU processing. High percentage of GPU active cycles may indicate system integration issues preventing efficient CPU interrupt handling (not typically application-resolvable).

    GpuLateZKills

    Returns Late Z Kills performance counter handler (Mali counter: MaliFragLZSKillTd).

    Declaration
    public ProfilerRecorderHandle GpuLateZKills { get; }
    Property Value
    Type Description
    ProfilerRecorderHandle

    Use ProfilerRecorderHandle to access counter data with ProfilerRecorder and Valid to check if counter is supported.

    Remarks

    Fragment tiles killed by late depth/stencil testing after running some fragment program. High percentage indicates redundant processing. Avoid modifiable coverage and shader depth writes. Always start from cleared values when possible.

    GpuLateZTests

    Returns Late Z Tests performance counter handler (Mali counter: MaliFragLZSTestTd).

    Declaration
    public ProfilerRecorderHandle GpuLateZTests { get; }
    Property Value
    Type Description
    ProfilerRecorderHandle

    Use ProfilerRecorderHandle to access counter data with ProfilerRecorder and Valid to check if counter is supported.

    Remarks

    Fragment tiles tested by late depth/stencil testing. High percentage can cause slow performance as younger fragments can't complete early ZS until older fragments complete late ZS. Avoid modifiable coverage and shader depth writes.

    GpuMemoryReadAccesses

    Returns Memory Read Accesses performance counter handler (Mali counter: MaliExtBusRd)

    Declaration
    public ProfilerRecorderHandle GpuMemoryReadAccesses { get; }
    Property Value
    Type Description
    ProfilerRecorderHandle

    Use ProfilerRecorderHandle to access counter data with ProfilerRecorder and Valid to check if counter is supported.

    GpuMemoryReadBytes

    Returns Memory Read Bytes performance counter handler (Mali counter: MaliExtBusRdBt).

    Declaration
    public ProfilerRecorderHandle GpuMemoryReadBytes { get; }
    Property Value
    Type Description
    ProfilerRecorderHandle

    Use ProfilerRecorderHandle to access counter data with ProfilerRecorder and Valid to check if counter is supported.

    Remarks

    External memory read bandwidth usage. High values indicate memory bandwidth bottleneck. On mobile, ~100MB per frame at 60FPS is sustainable. Reduce texture sizes, buffer sizes, or use compression to optimize.

    GpuMemoryReadStallRate

    Returns % Memory Read Stalled performance counter handler (Mali counter: MaliExtBusRdStallRate).

    Declaration
    public ProfilerRecorderHandle GpuMemoryReadStallRate { get; }
    Property Value
    Type Description
    ProfilerRecorderHandle

    Use ProfilerRecorderHandle to access counter data with ProfilerRecorder and Valid to check if counter is supported.

    Remarks

    Percentage of GPU cycles stalled on external read transactions. High stall rates indicate content requesting more data than memory system can provide. Reduce by minimizing data resource sizes (buffers, textures).

    GpuMemoryReadStalledCycles

    Returns Memory Read Stalled Cycles performance counter handler (Mali counter: MaliExtBusRdStallCy)

    Declaration
    public ProfilerRecorderHandle GpuMemoryReadStalledCycles { get; }
    Property Value
    Type Description
    ProfilerRecorderHandle

    Use ProfilerRecorderHandle to access counter data with ProfilerRecorder and Valid to check if counter is supported.

    GpuMemoryWriteAccesses

    Returns Memory Write Accesses performance counter handler (Mali counter: MaliExtBusWr)

    Declaration
    public ProfilerRecorderHandle GpuMemoryWriteAccesses { get; }
    Property Value
    Type Description
    ProfilerRecorderHandle

    Use ProfilerRecorderHandle to access counter data with ProfilerRecorder and Valid to check if counter is supported.

    GpuMemoryWriteBytes

    Returns Memory Write Bytes performance counter handler (Mali counter: MaliExtBusWrBt).

    Declaration
    public ProfilerRecorderHandle GpuMemoryWriteBytes { get; }
    Property Value
    Type Description
    ProfilerRecorderHandle

    Use ProfilerRecorderHandle to access counter data with ProfilerRecorder and Valid to check if counter is supported.

    Remarks

    External memory write bandwidth usage. High values indicate memory bandwidth bottleneck. Accessing external DRAM costs 80-100mW per GB/s. Reduce framebuffer sizes or geometry complexity to optimize.

    GpuMemoryWriteStallRate

    Returns % Memory Write Stalled performance counter handler (Mali counter: MaliExtBusWrStallRate).

    Declaration
    public ProfilerRecorderHandle GpuMemoryWriteStallRate { get; }
    Property Value
    Type Description
    ProfilerRecorderHandle

    Use ProfilerRecorderHandle to access counter data with ProfilerRecorder and Valid to check if counter is supported.

    Remarks

    Percentage of GPU cycles stalled on external write transactions. High stall rates indicate memory bandwidth bottleneck. Reduce by minimizing geometry complexity or framebuffer sizes in memory.

    GpuMemoryWriteStalledCycles

    Returns Memory Write Stalled Cycles performance counter handler (Mali counter: MaliExtBusWrStallCy)

    Declaration
    public ProfilerRecorderHandle GpuMemoryWriteStalledCycles { get; }
    Property Value
    Type Description
    ProfilerRecorderHandle

    Use ProfilerRecorderHandle to access counter data with ProfilerRecorder and Valid to check if counter is supported.

    GpuPixels

    Returns Pixels performance counter handler (Mali counter: MaliGPUPix)

    Declaration
    public ProfilerRecorderHandle GpuPixels { get; }
    Property Value
    Type Description
    ProfilerRecorderHandle

    Use ProfilerRecorderHandle to access counter data with ProfilerRecorder and Valid to check if counter is supported.

    GpuShaderArithmeticCycles

    Returns Shader Arithmetic Cycles performance counter handler (Mali counter: MaliALUIssueCy).

    Declaration
    public ProfilerRecorderHandle GpuShaderArithmeticCycles { get; }
    Property Value
    Type Description
    ProfilerRecorderHandle

    Use ProfilerRecorderHandle to access counter data with ProfilerRecorder and Valid to check if counter is supported.

    Remarks

    Shader core cycles used on arithmetic operations (ALU). High usage indicates compute-bound shaders. Optimize by reducing complex calculations, using precision lowering (mediump/lowp), or moving computations to vertex stage when possible.

    GpuShaderArithmeticUtilization

    Returns Shader Arithmetic Utilization performance counter handler (Mali counter: MaliALUUtil).

    Declaration
    public ProfilerRecorderHandle GpuShaderArithmeticUtilization { get; }
    Property Value
    Type Description
    ProfilerRecorderHandle

    Use ProfilerRecorderHandle to access counter data with ProfilerRecorder and Valid to check if counter is supported.

    Remarks

    Percentage of shader core cycles spent on arithmetic operations. High utilization indicates compute-bound shaders. Low utilization suggests stalls from memory access or texture sampling. Balance workload distribution and optimize shader complexity.

    GpuShaderComputeCycles

    Returns Shader Vertex And Compute Cycles performance counter handler (Mali counter: MaliNonFragActiveCy).

    Declaration
    public ProfilerRecorderHandle GpuShaderComputeCycles { get; }
    Property Value
    Type Description
    ProfilerRecorderHandle

    Use ProfilerRecorderHandle to access counter data with ProfilerRecorder and Valid to check if counter is supported.

    Remarks

    Number of cycles the compute pipeline is active processing vertex shaders, tessellation, geometry shaders, fixed-function tiling, and compute shaders. This counter includes any cycle where compute work runs in the fixed-function front-end or programmable core. High values indicate vertex/compute-bound workload. For vertex/compute-bound content, should be similar to GPU active cycles.

    GpuShaderComputeUtilization

    Returns Shader Vertex And Compute Utilization performance counter handler (Mali counter: MaliNonFragUtil).

    Declaration
    public ProfilerRecorderHandle GpuShaderComputeUtilization { get; }
    Property Value
    Type Description
    ProfilerRecorderHandle

    Use ProfilerRecorderHandle to access counter data with ProfilerRecorder and Valid to check if counter is supported.

    Remarks

    Percentage of time the compute pipeline is active processing vertex and compute workloads. This counter indicates overall utilization of the compute shader pipeline including vertex shaders, tessellation, geometry shaders, fixed-function tiling, and compute shaders. For vertex/compute-bound content, should approach 100%. Low utilization may indicate insufficient vertex/compute work or dependency issues.

    GpuShaderCoreCycles

    Returns Shader Core Cycles performance counter handler (Mali counter: MaliCoreActiveCy)

    Declaration
    public ProfilerRecorderHandle GpuShaderCoreCycles { get; }
    Property Value
    Type Description
    ProfilerRecorderHandle

    Use ProfilerRecorderHandle to access counter data with ProfilerRecorder and Valid to check if counter is supported.

    GpuShaderCoreUtilization

    Returns Shader Core Utilization performance counter handler (Mali counter: MaliCoreUtil).

    Declaration
    public ProfilerRecorderHandle GpuShaderCoreUtilization { get; }
    Property Value
    Type Description
    ProfilerRecorderHandle

    Use ProfilerRecorderHandle to access counter data with ProfilerRecorder and Valid to check if counter is supported.

    Remarks

    Percentage of time any shader core is executing instructions. Lower values indicate GPU utilization bottlenecks - check for CPU serialization, bandwidth limits, texture cache pressure. Higher values suggest compute efficiency.

    GpuShaderFragmentCycles

    Returns Shader Fragment Cycles performance counter handler (Mali counter: MaliFragActiveCy).

    Declaration
    public ProfilerRecorderHandle GpuShaderFragmentCycles { get; }
    Property Value
    Type Description
    ProfilerRecorderHandle

    Use ProfilerRecorderHandle to access counter data with ProfilerRecorder and Valid to check if counter is supported.

    Remarks

    Number of cycles the fragment pipeline is active processing fragment workloads. This counter includes all cycles when at least one fragment task is active anywhere inside the shader core, including the fixed-function fragment frontend, programmable tripipe, or fixed-function fragment backend. For most content, fragments outnumber vertices by orders of magnitude, making this typically the highest processing load.

    GpuShaderFragmentUtilization

    Returns Shader Fragment Utilization performance counter handler (Mali counter: MaliFragUtil).

    Declaration
    public ProfilerRecorderHandle GpuShaderFragmentUtilization { get; }
    Property Value
    Type Description
    ProfilerRecorderHandle

    Use ProfilerRecorderHandle to access counter data with ProfilerRecorder and Valid to check if counter is supported.

    Remarks

    Percentage of time the fragment pipeline is active processing fragment shaders. This counter indicates overall utilization of the fragment pipeline including the fixed-function fragment frontend, programmable tripipe, and fixed-function fragment backend. High utilization indicates fragment-bound performance. For GPU-bound content, the dominant queue should approach 100%. Low utilization may suggest vertex/compute bottleneck.

    GpuShaderLoadStoreCycles

    Returns Shader Load/Store Cycles performance counter handler (Mali counter: MaliLSIssueCy).

    Declaration
    public ProfilerRecorderHandle GpuShaderLoadStoreCycles { get; }
    Property Value
    Type Description
    ProfilerRecorderHandle

    Use ProfilerRecorderHandle to access counter data with ProfilerRecorder and Valid to check if counter is supported.

    Remarks

    Shader core cycles used on memory access (varying/uniform/image/storage buffer operations). High usage suggests memory access bottleneck. Optimize with better data locality, reduced varying count, or cached uniform buffers.

    GpuShaderLoadStoreUtilization

    Returns Shader Load/Store Utilization performance counter handler (Mali counter: MaliLSUtil).

    Declaration
    public ProfilerRecorderHandle GpuShaderLoadStoreUtilization { get; }
    Property Value
    Type Description
    ProfilerRecorderHandle

    Use ProfilerRecorderHandle to access counter data with ProfilerRecorder and Valid to check if counter is supported.

    Remarks

    Percentage of shader core cycles spent on memory load/store operations. High utilization indicates memory access bottleneck. Optimize with reduced varying interpolation, cached uniform buffers, better data locality, or simplified memory access patterns.

    GpuShaderTextureCycles

    Returns Shader Texture Cycles performance counter handler (Mali counter: MaliTexIssueCy).

    Declaration
    public ProfilerRecorderHandle GpuShaderTextureCycles { get; }
    Property Value
    Type Description
    ProfilerRecorderHandle

    Use ProfilerRecorderHandle to access counter data with ProfilerRecorder and Valid to check if counter is supported.

    Remarks

    Shader core cycles used on texture filtering workloads. High usage suggests texture bandwidth bottleneck. Consider reducing texture resolution, using compressed formats, optimizing cache efficiency with texture atlases or tiled rendering.

    GpuShaderTextureUtilization

    Returns Shader Texture Unit Utilization performance counter handler (Mali counter: MaliTexUtil).

    Declaration
    public ProfilerRecorderHandle GpuShaderTextureUtilization { get; }
    Property Value
    Type Description
    ProfilerRecorderHandle

    Use ProfilerRecorderHandle to access counter data with ProfilerRecorder and Valid to check if counter is supported.

    Remarks

    Percentage of shader core cycles spent on texture filtering operations. High utilization indicates texture bandwidth bottleneck. Optimize with compressed texture formats, reduced resolution, better cache locality, or simplified filtering requirements.

    GpuTilerCycles

    Returns Tiler Cycles performance counter handler (Mali counter: MaliTilerActiveCy).

    Declaration
    public ProfilerRecorderHandle GpuTilerCycles { get; }
    Property Value
    Type Description
    ProfilerRecorderHandle

    Use ProfilerRecorderHandle to access counter data with ProfilerRecorder and Valid to check if counter is supported.

    Remarks

    Tiler coordinates geometry processing and provides fixed-function tiling for tile-based rendering. High cycle count doesn't necessarily indicate bottleneck unless non-fragment shader core cycles are comparatively low.

    GpuTilerUtilization

    Returns Tiler Utilization performance counter handler (Mali counter: MaliTilerUtil).

    Declaration
    public ProfilerRecorderHandle GpuTilerUtilization { get; }
    Property Value
    Type Description
    ProfilerRecorderHandle

    Use ProfilerRecorderHandle to access counter data with ProfilerRecorder and Valid to check if counter is supported.

    Remarks

    Tiler utilization as percentage of GPU active time. Measures overall tiler geometry pipeline processing time including aspects of vertex shading and fixed-function tiling. High values may indicate geometry complexity issues.

    GpuTiles

    Returns Tiles performance counter handler (Mali counter: MaliFragTile)

    Declaration
    public ProfilerRecorderHandle GpuTiles { get; }
    Property Value
    Type Description
    ProfilerRecorderHandle

    Use ProfilerRecorderHandle to access counter data with ProfilerRecorder and Valid to check if counter is supported.

    GpuUnchangedEliminatedTiles

    Returns Unchanged Eliminated Tiles performance counter handler (Mali counter: MaliFragTileKill)

    Declaration
    public ProfilerRecorderHandle GpuUnchangedEliminatedTiles { get; }
    Property Value
    Type Description
    ProfilerRecorderHandle

    Use ProfilerRecorderHandle to access counter data with ProfilerRecorder and Valid to check if counter is supported.

    GpuVertexAndComputeCycles

    Returns Non Fragment Queue Cycles performance counter handler (Mali counter: MaliNonFragQueueActiveCy).

    Declaration
    public ProfilerRecorderHandle GpuVertexAndComputeCycles { get; }
    Property Value
    Type Description
    ProfilerRecorderHandle

    Use ProfilerRecorderHandle to access counter data with ProfilerRecorder and Valid to check if counter is supported.

    Remarks

    Indicates vertex/compute workload pressure. Used for vertex shaders, tessellation, geometry shaders, tiling, and compute shaders. For good parallelism, should be similar to GPU active cycles when vertex/compute bound.

    GpuVertexAndComputeUtilization

    Returns Non Fragment Queue Utilization performance counter handler (Mali counter: MaliNonFragQueueUtil).

    Declaration
    public ProfilerRecorderHandle GpuVertexAndComputeUtilization { get; }
    Property Value
    Type Description
    ProfilerRecorderHandle

    Use ProfilerRecorderHandle to access counter data with ProfilerRecorder and Valid to check if counter is supported.

    Remarks

    Non-fragment queue utilization as percentage of GPU active time. For vertex/compute-bound content, should be close to 100%. Low utilization may indicate insufficient vertex/compute work or dependency issues.

    GpuVertexComputeJobs

    Returns Vertex And Compute Jobs performance counter handler (Mali counter: MaliNonFragThread).

    Declaration
    public ProfilerRecorderHandle GpuVertexComputeJobs { get; }
    Property Value
    Type Description
    ProfilerRecorderHandle

    Use ProfilerRecorderHandle to access counter data with ProfilerRecorder and Valid to check if counter is supported.

    Remarks

    Vertex and compute shader tasks executed by GPU. High counts may indicate vertex processing bottleneck. Optimize with reduced vertex complexity, better LOD systems, or moving calculations to fragment stage when appropriate.

    GpuVertexQueueActiveCycles

    Returns Vertex Queue Cycles performance counter handler (Mali counter: MaliVertQueueActiveCy).

    Declaration
    public ProfilerRecorderHandle GpuVertexQueueActiveCycles { get; }
    Property Value
    Type Description
    ProfilerRecorderHandle

    Use ProfilerRecorderHandle to access counter data with ProfilerRecorder and Valid to check if counter is supported.

    Remarks

    Number of cycles the vertex processing queue has any workload present, including vertex shaders, tessellation, and geometry shaders. This provides more granular analysis than the combined non-fragment queue metrics, allowing separation of vertex and compute workloads.

    GpuVertexQueueUtilization

    Returns Vertex Queue Utilization performance counter handler (Mali counter: MaliVertQueueUtil).

    Declaration
    public ProfilerRecorderHandle GpuVertexQueueUtilization { get; }
    Property Value
    Type Description
    ProfilerRecorderHandle

    Use ProfilerRecorderHandle to access counter data with ProfilerRecorder and Valid to check if counter is supported.

    Remarks

    Vertex queue utilization as percentage of GPU active time, measuring vertex processing pressure. This enables analysis of vertex-specific bottlenecks separate from compute shader workloads. High utilization indicates vertex-bound performance.

    GpuVisiblePrimitives

    Returns Visible Primitives performance counter handler (Mali counter: MaliGeomVisiblePrim).

    Declaration
    public ProfilerRecorderHandle GpuVisiblePrimitives { get; }
    Property Value
    Type Description
    ProfilerRecorderHandle

    Use ProfilerRecorderHandle to access counter data with ProfilerRecorder and Valid to check if counter is supported.

    Remarks

    Primitives surviving all culling stages. All fragments might still be occluded by closer primitives. For efficient 3D content, expect ~50% visibility due to back-face culling. Much higher may indicate disabled facing test.

    GpuVisiblePrimitivesPercentage

    Returns % Visible Primitives performance counter handler (Mali counter: MaliGeomVisibleRate).

    Declaration
    public ProfilerRecorderHandle GpuVisiblePrimitivesPercentage { get; }
    Property Value
    Type Description
    ProfilerRecorderHandle

    Use ProfilerRecorderHandle to access counter data with ProfilerRecorder and Valid to check if counter is supported.

    Remarks

    Percentage of primitives visible after culling. Efficient 3D content expects ~50% due to back-face culling. Significantly higher rates may indicate disabled facing test. Lower rates suggest optimization opportunities with better software culling.

    Instance

    Global SystemMetricsMali class instance to access hardware counters.

    Declaration
    public static SystemMetricsMali Instance { get; }
    Property Value
    Type Description
    SystemMetricsMali

    Methods

    GetAvailableCounters(List<ProfilerRecorderHandle>)

    Gets all available Mali performance counters on this device.

    Declaration
    public void GetAvailableCounters(List<ProfilerRecorderHandle> handles)
    Parameters
    Type Name Description
    List<ProfilerRecorderHandle> handles

    The list to be filled with ProfilerRecorderHandle instances representing available Mali hardware counters.

    In This Article
    Back to top
    Copyright © 2025 Unity Technologies — Trademarks and terms of use
    • Legal
    • Privacy Policy
    • Cookie Policy
    • Do Not Sell or Share My Personal Information
    • Your Privacy Choices (Cookie Settings)