Edit

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

Branch :

  • Show log

    Commit

  • Author : Corentin Wallez
    Date : 2015-08-12 12:37:48
    Hash : 86f8dd7c
    Message : Implement a minimal EGL -> CGL backend This succesfully renders HelloTriangle and some samples but fails on a lot of tests. In particular it doesn't handle resizing the window and doesn't have depth or stencil buffers. BUG=angleproject:891 Change-Id: I16356471b470f764acb38e8dd3589e9c0129829d Reviewed-on: https://chromium-review.googlesource.com/290770 Tested-by: Corentin Wallez <cwallez@chromium.org> Reviewed-by: Kenneth Russell <kbr@chromium.org> Reviewed-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>
    
    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 in a fraction.
        static mach_timebase_info_data_t timebaseInfo;
        static double secondCoeff;
    
        if ( timebaseInfo.denom == 0 )
        {
            mach_timebase_info(&timebaseInfo);
            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();
    }