Dynamic Resolution on Mobile: FrameTiming.gpuFrameTime always 0

Hi, I’m trying to implement Dynamic Resolution on mobile. I’m building with Unity 2018.3.13f and Testing on a Xiaomi Mi A2. Here is my code:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

public class DynamicResolutionManager : MonoBehaviour
{

    [SerializeField] float _minHorizontalScale = 0.5f;

    [SerializeField] float _minVerticalScale = 0.5f;

    [SerializeField] float _horizontalScaleStep = 0.1f;

    [SerializeField] float _verticalScaleStep = 0.1f;

    [SerializeField] float _minFPS = 30f;

    [SerializeField] float _maxFPS = 60f;

    [SerializeField] float _upscaleInterval = 1f;

    [SerializeField] bool _showDebugInfo = true;

    [SerializeField] GameObject _canvas = null;

    [SerializeField] Text _text = null;

    float _verticalScale = 1f;

    float _horizontalScale = 1f;

    float _lastScale = 0f;

    int _frameCount = 0;

    void Start()
    {
        _text.text = "";
        _canvas.SetActive(_showDebugInfo);

    }

    void Update ()
    {
        FrameTimingManager.CaptureFrameTimings();
        if (++_frameCount < 50) return;
        _frameCount = 0;
        if (Time.deltaTime < 1f / _minFPS && Time.deltaTime > 1f / _maxFPS) return;

        FrameTiming[] frameTimings = new FrameTiming[3];
        uint timingsRetrieved = FrameTimingManager.GetLatestTimings(3, frameTimings);
        if (timingsRetrieved <= 0) return;

        if (frameTimings[0].gpuFrameTime > 1f / _minFPS)
        {
            long presentCalled = (long)frameTimings[0].cpuTimePresentCalled;
            long frameComplete = (long)frameTimings[0].cpuTimeFrameComplete;
            long frequency = (long)FrameTimingManager.GetCpuTimerFrequency();
            if (frequency == 0) return;
            float latency = 1000f * (frameComplete - presentCalled) / frequency;
            float latencyFrames = latency / (float)frameTimings[0].gpuFrameTime;
            if (latencyFrames <= 0.5f) return;
            float horizontalScale = _horizontalScale;
            float verticalScale = _verticalScale;
            if (horizontalScale > _minHorizontalScale)
            {
                horizontalScale -= _horizontalScaleStep;
            }
            else if (verticalScale > _minVerticalScale)
            {
                verticalScale -= _verticalScaleStep;
            }
            if (horizontalScale != _horizontalScale || verticalScale != _verticalScale)
            {
                Scale(horizontalScale, verticalScale);
            }
        }
        else if (Time.realtimeSinceStartup - _lastScale > _upscaleInterval && frameTimings[0].gpuFrameTime < 1f / _maxFPS)
        {
            float horizontalScale = _horizontalScale;
            float verticalScale = _verticalScale;
            if (verticalScale < 1f)
            {
                verticalScale += _verticalScaleStep;
            }
            else if (horizontalScale < 1f)
            {
                horizontalScale += _horizontalScaleStep;
            }
            if (horizontalScale != _horizontalScale || verticalScale != _verticalScale)
            {
                Scale(horizontalScale, verticalScale);
            }
        }
    }

    //=============================================================================

    void Scale(float horizontalScale, float verticalScale)
    {
        _horizontalScale = horizontalScale;
        _verticalScale = verticalScale;
        ScalableBufferManager.ResizeBuffers(horizontalScale, verticalScale);
        _lastScale = Time.realtimeSinceStartup;
        if (_showDebugInfo)
        {
            _text.text = string.Format("{0} x {1}", Screen.currentResolution.width * _horizontalScale, Screen.currentResolution.height * _verticalScale);
        }
    }

}

It sometimes retrieves 0 frameTimings and sometimes 1, but gpuFrameTime is always 0. Is it something I’m missing?

Cheers,
Aitor

I am experiencing the same problem on the UWP and Standalone platforms.
please help me

By the way, the official manual says it supports UWP and Standalone (DX12).