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 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 SkMSec GetMSecs() { return (SkMSec)(GetNSecs() * 1e-6); }
     38     static double GetNSecs();
     39 };
     40 
     41 #define SK_TIME_FACTOR      1
     42 
     43 ///////////////////////////////////////////////////////////////////////////////
     44 
     45 class SkAutoTime {
     46 public:
     47     // The label is not deep-copied, so its address must remain valid for the
     48     // lifetime of this object
     49     SkAutoTime(const char* label = NULL, SkMSec minToDump = 0) : fLabel(label)
     50     {
     51         fNow = SkTime::GetMSecs();
     52         fMinToDump = minToDump;
     53     }
     54     ~SkAutoTime()
     55     {
     56         SkMSec dur = SkTime::GetMSecs() - fNow;
     57         if (dur >= fMinToDump) {
     58             SkDebugf("%s %d\n", fLabel ? fLabel : "", dur);
     59         }
     60     }
     61 private:
     62     const char* fLabel;
     63     SkMSec      fNow;
     64     SkMSec      fMinToDump;
     65 };
     66 #define SkAutoTime(...) SK_REQUIRE_LOCAL_VAR(SkAutoTime)
     67 
     68 #endif
     69