Home | History | Annotate | Download | only in Main
      1 // Copyright 2016 The SwiftShader Authors. All Rights Reserved.
      2 //
      3 // Licensed under the Apache License, Version 2.0 (the "License");
      4 // you may not use this file except in compliance with the License.
      5 // You may obtain a copy of the License at
      6 //
      7 //    http://www.apache.org/licenses/LICENSE-2.0
      8 //
      9 // Unless required by applicable law or agreed to in writing, software
     10 // distributed under the License is distributed on an "AS IS" BASIS,
     11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     12 // See the License for the specific language governing permissions and
     13 // limitations under the License.
     14 
     15 #include "Config.hpp"
     16 
     17 #include "Common/Thread.hpp"
     18 #include "Common/Timer.hpp"
     19 
     20 namespace sw
     21 {
     22 	Profiler profiler;
     23 
     24 	Profiler::Profiler()
     25 	{
     26 		reset();
     27 	}
     28 
     29 	void Profiler::reset()
     30 	{
     31 		framesSec = 0;
     32 		framesTotal = 0;
     33 		FPS = 0;
     34 
     35 		#if PERF_PROFILE
     36 			for(int i = 0; i < PERF_TIMERS; i++)
     37 			{
     38 				cycles[i] = 0;
     39 			}
     40 
     41 			ropOperations = 0;
     42 			ropOperationsTotal = 0;
     43 			ropOperationsFrame = 0;
     44 
     45 			texOperations = 0;
     46 			texOperationsTotal = 0;
     47 			texOperationsFrame = 0;
     48 
     49 			compressedTex = 0;
     50 			compressedTexTotal = 0;
     51 			compressedTexFrame = 0;
     52 		#endif
     53 	};
     54 
     55 	void Profiler::nextFrame()
     56 	{
     57 		#if PERF_PROFILE
     58 			ropOperationsFrame = sw::atomicExchange(&ropOperations, 0);
     59 			texOperationsFrame = sw::atomicExchange(&texOperations, 0);
     60 			compressedTexFrame = sw::atomicExchange(&compressedTex, 0);
     61 
     62 			ropOperationsTotal += ropOperationsFrame;
     63 			texOperationsTotal += texOperationsFrame;
     64 			compressedTexTotal += compressedTexFrame;
     65 		#endif
     66 
     67 		static double fpsTime = sw::Timer::seconds();
     68 
     69 		double time = sw::Timer::seconds();
     70 		double delta = time - fpsTime;
     71 		framesSec++;
     72 
     73 		if(delta > 1.0)
     74 		{
     75 			FPS = framesSec / delta;
     76 
     77 			fpsTime = time;
     78 			framesTotal += framesSec;
     79 			framesSec = 0;
     80 		}
     81 	}
     82 }