| Index: tools/timer/Timer.cpp | 
| diff --git a/tools/timer/Timer.cpp b/tools/timer/Timer.cpp | 
| index 28841cdc846f9a93efd02dbb696c36c17b245169..b59988ca2642f5f3330d05ba849cdde8c4c49e0d 100644 | 
| --- a/tools/timer/Timer.cpp | 
| +++ b/tools/timer/Timer.cpp | 
| @@ -5,6 +5,52 @@ | 
| * found in the LICENSE file. | 
| */ | 
| #include "Timer.h" | 
| + | 
| +Timer::Timer(SkGLContext* gl) | 
| +        : fCpu(-1.0) | 
| +        , fWall(-1.0) | 
| +        , fTruncatedCpu(-1.0) | 
| +        , fTruncatedWall(-1.0) | 
| +        , fGpu(-1.0) | 
| +#if SK_SUPPORT_GPU | 
| +        , fGpuTimer(gl) | 
| +#endif | 
| +        {} | 
| + | 
| +void Timer::start() { | 
| +    fSysTimer.startWall(); | 
| +    fTruncatedSysTimer.startWall(); | 
| +#if SK_SUPPORT_GPU | 
| +    fGpuTimer.start(); | 
| +#endif | 
| +    fSysTimer.startCpu(); | 
| +    fTruncatedSysTimer.startCpu(); | 
| +} | 
| + | 
| +void Timer::end() { | 
| +    fCpu = fSysTimer.endCpu(); | 
| +#if SK_SUPPORT_GPU | 
| +    //It is important to stop the cpu clocks first, | 
| +    //as the following will cpu wait for the gpu to finish. | 
| +    fGpu = fGpuTimer.end(); | 
| +#endif | 
| +    fWall = fSysTimer.endWall(); | 
| +} | 
| + | 
| +void Timer::truncatedEnd() { | 
| +    fTruncatedCpu = fTruncatedSysTimer.endCpu(); | 
| +    fTruncatedWall = fTruncatedSysTimer.endWall(); | 
| +} | 
| + | 
| +WallTimer::WallTimer() : fWall(-1.0) {} | 
| + | 
| +void WallTimer::start() { | 
| +    fSysTimer.startWall(); | 
| +} | 
| + | 
| +void WallTimer::end() { | 
| +    fWall = fSysTimer.endWall(); | 
| +} | 
|  | 
| SkString HumanizeMs(double ms) { | 
| if (ms > 60e+3)  return SkStringPrintf("%.3gm", ms/60e+3); | 
|  |