/*
 * Copyright 2011 Google Inc.
 *
 * Use of this source code is governed by a BSD-style license that can be
 * found in the LICENSE file.
 */
#ifndef Timer_DEFINED
#define Timer_DEFINED

#include "SkTypes.h"
#include "SkString.h"

#if defined(SK_BUILD_FOR_WIN32)
    #include "SysTimer_windows.h"
#elif defined(SK_BUILD_FOR_MAC) || defined(SK_BUILD_FOR_IOS)
    #include "SysTimer_mach.h"
#elif defined(SK_BUILD_FOR_UNIX) || defined(SK_BUILD_FOR_ANDROID)
    #include "SysTimer_posix.h"
#endif

#if SK_SUPPORT_GPU
    #include "GpuTimer.h"
#endif

class SkGLContext;

/**
 * SysTimers and GpuTimers are implemented orthogonally.
 * This class combines 2 SysTimers and a GpuTimer into one single,
 * platform specific Timer with a simple interface. The truncated
 * timer doesn't include the time required for the GPU to finish
 * its rendering. It should always be <= the un-truncated system
 * times and (for GPU configurations) can be used to roughly (very
 * roughly) gauge the GPU load/backlog.
 */
class Timer {
public:
    explicit Timer(SkGLContext* gl = nullptr);

    void start();
    void truncatedEnd();
    void end();

    // All times in milliseconds.
    double fCpu;
    double fWall;
    double fTruncatedCpu;
    double fTruncatedWall;
    double fGpu;

private:
    SysTimer fSysTimer;
    SysTimer fTruncatedSysTimer;
#if SK_SUPPORT_GPU
    GpuTimer fGpuTimer;
#endif
};

// Same as Timer above, supporting only fWall but with much lower overhead.
// (Typically, ~30ns instead of Timer's ~1us.)
class WallTimer {
public:
    WallTimer();

    void start();
    void end();

    double fWall;  // Milliseconds.

private:
    SysTimer fSysTimer;
};

SkString HumanizeMs(double);

#endif
