1/* 2 * Copyright 2011 Google Inc. 3 * 4 * Use of this source code is governed by a BSD-style license that can be 5 * found in the LICENSE file. 6 */ 7#include "Timer.h" 8 9Timer::Timer(SkGLContext* gl) 10 : fCpu(-1.0) 11 , fWall(-1.0) 12 , fTruncatedCpu(-1.0) 13 , fTruncatedWall(-1.0) 14 , fGpu(-1.0) 15#if SK_SUPPORT_GPU 16 , fGpuTimer(gl) 17#endif 18 {} 19 20void Timer::start() { 21 fSysTimer.startWall(); 22 fTruncatedSysTimer.startWall(); 23#if SK_SUPPORT_GPU 24 fGpuTimer.start(); 25#endif 26 fSysTimer.startCpu(); 27 fTruncatedSysTimer.startCpu(); 28} 29 30void Timer::end() { 31 fCpu = fSysTimer.endCpu(); 32#if SK_SUPPORT_GPU 33 //It is important to stop the cpu clocks first, 34 //as the following will cpu wait for the gpu to finish. 35 fGpu = fGpuTimer.end(); 36#endif 37 fWall = fSysTimer.endWall(); 38} 39 40void Timer::truncatedEnd() { 41 fTruncatedCpu = fTruncatedSysTimer.endCpu(); 42 fTruncatedWall = fTruncatedSysTimer.endWall(); 43} 44 45WallTimer::WallTimer() : fWall(-1.0) {} 46 47void WallTimer::start() { 48 fSysTimer.startWall(); 49} 50 51void WallTimer::end() { 52 fWall = fSysTimer.endWall(); 53} 54 55SkString HumanizeMs(double ms) { 56 if (ms > 60e+3) return SkStringPrintf("%.3gm", ms/60e+3); 57 if (ms > 1e+3) return SkStringPrintf("%.3gs", ms/1e+3); 58 if (ms < 1e-3) return SkStringPrintf("%.3gns", ms*1e+6); 59#ifdef SK_BUILD_FOR_WIN 60 if (ms < 1) return SkStringPrintf("%.3gus", ms*1e+3); 61#else 62 if (ms < 1) return SkStringPrintf("%.3gµs", ms*1e+3); 63#endif 64 return SkStringPrintf("%.3gms", ms); 65} 66