Edit

kc3-lang/angle/util/osx/OSXTimer.cpp

Branch :

  • Show log

    Commit

  • Author : Corentin Wallez
    Date : 2015-06-19 15:42:09
    Hash : 87bef77c
    Message : Compile end2end tests on MacOS This includes an implementation of OSX timer and path_utils. BUG=angleproject:891 Change-Id: Id5440a8321bcfd4a61f3fe35b4a3fc0c651f564f Reviewed-on: https://chromium-review.googlesource.com/278211 Reviewed-by: Jamie Madill <jmadill@chromium.org> Tested-by: Corentin Wallez <cwallez@chromium.org>

  • util/osx/OSXTimer.cpp
  • //
    // Copyright (c) 2015 The ANGLE Project Authors. All rights reserved.
    // Use of this source code is governed by a BSD-style license that can be
    // found in the LICENSE file.
    //
    
    // OSXTimer.cpp: Implementation of a high precision timer class on OSX
    
    #include "osx/OSXTimer.h"
    
    #include <CoreServices/CoreServices.h>
    #include <mach/mach.h>
    #include <mach/mach_time.h>
    #include <iostream>
    
    OSXTimer::OSXTimer()
        : mRunning(false)
    {
    }
    
    void OSXTimer::start()
    {
        mStartTime = mach_absolute_time();
        mRunning = true;
    }
    
    void OSXTimer::stop()
    {
        mStopTime = mach_absolute_time();
        mRunning = false;
    }
    
    double OSXTimer::getElapsedTime() const
    {
        // If this is the first time we've run, get the timebase.
        // We can use denom == 0 to indicate that sTimebaseInfo is
        // uninitialised because it makes no sense to have a zero
        // denominator is a fraction.
        static mach_timebase_info_data_t timebaseInfo;
    
        if ( timebaseInfo.denom == 0 )
        {
            mach_timebase_info(&timebaseInfo);
        }
    
        double secondCoeff = timebaseInfo.numer * (1.0 / 1000000000) / timebaseInfo.denom;
    
        if (mRunning)
        {
            return secondCoeff * (mach_absolute_time() - mStartTime);
        }
        else
        {
            return secondCoeff * (mStopTime - mStartTime);
        }
    }
    
    Timer *CreateTimer()
    {
        return new OSXTimer();
    }