IEnumerator Begin()
    {
        yield return(new WaitForSeconds(1));

        factory      = FindObjectOfType <SampleFactory>();
        bottleneckUI = FindObjectOfType <BottleneckUI>();

        factory.RunTest = false;
        timer           = waitTimeBeforeSwitch;
        ap = Holder.Instance;

        if (ap == null || !ap.Active)
        {
            state = "Adaptive Performance not active";
            Debug.Log("[AP Bottleneck] Adaptive Performance not active");
            FinishTest();
        }
        else
        {
            timeOuttimer = timeOut;
            watch.Start();
            factory.prefab  = cpuLoader;
            factory.RunTest = true;
            state           = "Ramping up CPU load";
            StartCoroutine(ObserveBottleneck());
            markers.Add(new Marker {
                label = state, time = watch.ElapsedMilliseconds, objectCount = factory.internalObjs
            });
            Debug.Log("[AP Bottleneck] Starting Test");
        }
        bottleneckStatus.text = state;
    }
    void Start()
    {
        factory      = FindObjectOfType <SampleFactory>();
        bottleneckUI = FindObjectOfType <BottleneckUI>();

        factory.RunTest = false;
        ap = Holder.Instance;

        if (ap == null || !ap.Active)
        {
            state = "Adaptive Performance not active";
            Debug.Log("[AP Boost] Adaptive Performance not active");
            return;
        }
        else
        {
            watch.Start();
            state            = "Waiting on Load";
            targetBottleneck = PerformanceBottleneck.TargetFrameRate;
            Debug.LogFormat("[AP Boost] Starting Test Timestamp : {0} s , Label : {1} , Objects : {2} \n", watch.ElapsedMilliseconds / 1000f, state, factory.internalObjs);
        }
        bottleneckStatus.text = state;
        ap.PerformanceStatus.PerformanceBoostChangeEvent += OnBoostModeEvent;
    }