Esempio n. 1
0
        public void CheckTime_Repaint(apEditor.LOW_CPU_STATUS lowCPUStatus)
        {
            //if(apVersion.I.IsDemoViolation)
            //{
            //	//재생할 수 없다.
            //	return;
            //}

            //Repaint 상에서의 경과 시간을 리턴한다.
            _stopWatch[REPAINT].Stop();

            long deltaTime_Repaint = _stopWatch[REPAINT].ElapsedMilliseconds;

            //SubTimer 갱신
            _subTimer[REPAINT].UpdateTime(deltaTime_Repaint);

            _deltaTimeCount[REPAINT] = deltaTime_Repaint;
            _prevDeltaTime[REPAINT]  = (_deltaTimeCount[REPAINT] / 1000.0f);

            if (lowCPUStatus == apEditor.LOW_CPU_STATUS.LowCPU_Low || lowCPUStatus == apEditor.LOW_CPU_STATUS.LowCPU_Mid)
            {
                //Low CPU에서는 Repaint가 아주 낮은 단위로 호출되는데,
                //이때 중간중간에 2프레임간 연속으로 실행되면서 FPS가 높은걸로 나타난다.
                //따라서 일정값의 FPS보다 높다면 (=시간 간격이 짧다면)
                //그 프레임은 무시해야한다.
                if (_prevDeltaTime[REPAINT] > 0.01f)
                {
                    _fps = (int)(1.0f / (_prevDeltaTime[REPAINT] * _subTimer[REPAINT].TimeMultiply));
                }
            }
            else
            {
                if (_prevDeltaTime[REPAINT] > 0.0f)
                {
                    _fps = (int)(1.0f / (_prevDeltaTime[REPAINT] * _subTimer[REPAINT].TimeMultiply));
                }
            }


            _stopWatch[REPAINT].Reset();
            _stopWatch[REPAINT].Start();

            if (lowCPUStatus == apEditor.LOW_CPU_STATUS.LowCPU_Low || lowCPUStatus == apEditor.LOW_CPU_STATUS.LowCPU_Mid)
            {
                //LowCPU 모드일때는
                //Repaint직후에 불필요한 Update를 막고자 Update용 StopWatch를 리셋한다
                _stopWatch[UPDATE].Reset();
                _stopWatch[UPDATE].Start();
            }
        }
Esempio n. 2
0
        // Functions
        //----------------------------------------
        public bool CheckTime_Update(apEditor.LOW_CPU_STATUS lowCPUStatus)
        {
            //if(apVersion.I.IsDemoViolation)
            //{
            //	//재생할 수 없다.
            //	//UnityEngine.Debug.LogError("Timer DemoViolation");
            //	return false;
            //}
            _isValidFrame = false;

            _stopWatch[UPDATE].Stop();
            _stopWatch[UPDATE_ALL_FRAME].Stop();

            long deltaTime_Update         = _stopWatch[UPDATE].ElapsedMilliseconds;
            long deltaTime_UpdateAllFrame = _stopWatch[UPDATE_ALL_FRAME].ElapsedMilliseconds;

            //Sub Time도 계산
            _subTimer[UPDATE].UpdateTime(deltaTime_Update);
            _subTimer[UPDATE_ALL_FRAME].UpdateTime(deltaTime_UpdateAllFrame);


            _deltaTimeCount[UPDATE]           += deltaTime_Update;
            _deltaTimeCount[UPDATE_ALL_FRAME] += deltaTime_UpdateAllFrame;

            //Update는 60FPS보다 높으면 프레임 스킵을 해야한다.

            if (lowCPUStatus == apEditor.LOW_CPU_STATUS.LowCPU_Low)
            {
                //약 2FPS
                if (_deltaTimeCount[UPDATE] > MIN_UPDATE_DELTA_TIME_LOWCPU_LOW)
                {
                    _prevDeltaTime[UPDATE]  = (_deltaTimeCount[UPDATE] / 1000.0);
                    _deltaTimeCount[UPDATE] = 0;
                    _isValidFrame           = true;
                }
            }
            else if (lowCPUStatus == apEditor.LOW_CPU_STATUS.LowCPU_Mid)
            {
                //약 10FPS
                if (_deltaTimeCount[UPDATE] > MIN_UPDATE_DELTA_TIME_LOWCPU_MID)
                {
                    _prevDeltaTime[UPDATE]  = (_deltaTimeCount[UPDATE] / 1000.0);
                    _deltaTimeCount[UPDATE] = 0;
                    _isValidFrame           = true;
                }
            }
            else
            {
                //정상적인 FPS
                if (_deltaTimeCount[UPDATE] > MIN_UPDATE_DELTA_TIME)
                {
                    _prevDeltaTime[UPDATE]  = (_deltaTimeCount[UPDATE] / 1000.0);
                    _deltaTimeCount[UPDATE] = 0;
                    _isValidFrame           = true;
                }
            }



            //Update All Frame은 프레임 스킵 없이 매번 경과 시간을 리턴한다.
            _prevDeltaTime[UPDATE_ALL_FRAME]  = (_deltaTimeCount[UPDATE_ALL_FRAME] / 1000.0);
            _deltaTimeCount[UPDATE_ALL_FRAME] = 0;


            _stopWatch[UPDATE].Reset();
            _stopWatch[UPDATE].Start();

            _stopWatch[UPDATE_ALL_FRAME].Reset();
            _stopWatch[UPDATE_ALL_FRAME].Start();

            return(_isValidFrame);
        }