/* * Copyright 2006 The Android Open Source Project * * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. */ #ifndef SkTime_DEFINED #define SkTime_DEFINED #include "../private/SkMacros.h" #include "SkTypes.h" class SkString; /** \class SkTime Platform-implemented utilities to return time of day, and millisecond counter. */ class SK_API SkTime { public: struct DateTime { int16_t fTimeZoneMinutes; // The number of minutes that GetDateTime() // is ahead of or behind UTC. uint16_t fYear; //!< e.g. 2005 uint8_t fMonth; //!< 1..12 uint8_t fDayOfWeek; //!< 0..6, 0==Sunday uint8_t fDay; //!< 1..31 uint8_t fHour; //!< 0..23 uint8_t fMinute; //!< 0..59 uint8_t fSecond; //!< 0..59 void toISO8601(SkString* dst) const; }; static void GetDateTime(DateTime*); static double GetSecs() { return GetNSecs() * 1e-9; } static double GetMSecs() { return GetNSecs() * 1e-6; } static double GetNSecs(); }; /////////////////////////////////////////////////////////////////////////////// class SkAutoTime { public: // The label is not deep-copied, so its address must remain valid for the // lifetime of this object SkAutoTime(const char* label = nullptr) : fLabel(label) , fNow(SkTime::GetMSecs()) {} ~SkAutoTime() { uint64_t dur = static_cast(SkTime::GetMSecs() - fNow); SkDebugf("%s %ld\n", fLabel ? fLabel : "", dur); } private: const char* fLabel; double fNow; }; #define SkAutoTime(...) SK_REQUIRE_LOCAL_VAR(SkAutoTime) #endif