Home | History | Annotate | Download | only in core
      1 
      2 /*
      3  * Copyright 2006 The Android Open Source Project
      4  *
      5  * Use of this source code is governed by a BSD-style license that can be
      6  * found in the LICENSE file.
      7  */
      8 
      9 
     10 #ifndef SkTime_DEFINED
     11 #define SkTime_DEFINED
     12 
     13 #include "SkTypes.h"
     14 
     15 class SkString;
     16 
     17 /** \class SkTime
     18     Platform-implemented utilities to return time of day, and millisecond counter.
     19 */
     20 class SK_API SkTime {
     21 public:
     22     struct DateTime {
     23         int16_t  fTimeZoneMinutes;  // The number of minutes that GetDateTime()
     24                                     // is ahead of or behind UTC.
     25         uint16_t fYear;          //!< e.g. 2005
     26         uint8_t  fMonth;         //!< 1..12
     27         uint8_t  fDayOfWeek;     //!< 0..6, 0==Sunday
     28         uint8_t  fDay;           //!< 1..31
     29         uint8_t  fHour;          //!< 0..23
     30         uint8_t  fMinute;        //!< 0..59
     31         uint8_t  fSecond;        //!< 0..59
     32 
     33         void toISO8601(SkString* dst) const;
     34     };
     35     static void GetDateTime(DateTime*);
     36 
     37     static double GetSecs() { return GetNSecs() * 1e-9; }
     38     static double GetMSecs() { return GetNSecs() * 1e-6; }
     39     static double GetNSecs();
     40 };
     41 
     42 ///////////////////////////////////////////////////////////////////////////////
     43 
     44 class SkAutoTime {
     45 public:
     46     // The label is not deep-copied, so its address must remain valid for the
     47     // lifetime of this object
     48     SkAutoTime(const char* label = nullptr)
     49         : fLabel(label)
     50         , fNow(SkTime::GetMSecs()) {}
     51     ~SkAutoTime() {
     52         uint64_t dur = static_cast<uint64_t>(SkTime::GetMSecs() - fNow);
     53         SkDebugf("%s %ld\n", fLabel ? fLabel : "", dur);
     54     }
     55 private:
     56     const char* fLabel;
     57     double      fNow;
     58 };
     59 #define SkAutoTime(...) SK_REQUIRE_LOCAL_VAR(SkAutoTime)
     60 
     61 #endif
     62