1baa3858d3f5d128a5c8466b700098109edcad5f2repo sync/*
2baa3858d3f5d128a5c8466b700098109edcad5f2repo sync * Copyright 2006 The Android Open Source Project
3baa3858d3f5d128a5c8466b700098109edcad5f2repo sync *
4baa3858d3f5d128a5c8466b700098109edcad5f2repo sync * Use of this source code is governed by a BSD-style license that can be
5baa3858d3f5d128a5c8466b700098109edcad5f2repo sync * found in the LICENSE file.
6baa3858d3f5d128a5c8466b700098109edcad5f2repo sync */
7baa3858d3f5d128a5c8466b700098109edcad5f2repo sync
8baa3858d3f5d128a5c8466b700098109edcad5f2repo sync#include "SkTime.h"
9baa3858d3f5d128a5c8466b700098109edcad5f2repo sync
10baa3858d3f5d128a5c8466b700098109edcad5f2repo sync#ifdef SK_BUILD_FOR_WIN
11baa3858d3f5d128a5c8466b700098109edcad5f2repo sync
12baa3858d3f5d128a5c8466b700098109edcad5f2repo sync#ifdef SK_DEBUG
13baa3858d3f5d128a5c8466b700098109edcad5f2repo syncSkMSec gForceTickCount = (SkMSec) -1;
14baa3858d3f5d128a5c8466b700098109edcad5f2repo sync#endif
15baa3858d3f5d128a5c8466b700098109edcad5f2repo sync
16baa3858d3f5d128a5c8466b700098109edcad5f2repo syncvoid SkTime::GetDateTime(DateTime* t) {
17baa3858d3f5d128a5c8466b700098109edcad5f2repo sync    if (t) {
18baa3858d3f5d128a5c8466b700098109edcad5f2repo sync        SYSTEMTIME  syst;
19baa3858d3f5d128a5c8466b700098109edcad5f2repo sync
20baa3858d3f5d128a5c8466b700098109edcad5f2repo sync        ::GetLocalTime(&syst);
21baa3858d3f5d128a5c8466b700098109edcad5f2repo sync        t->fYear        = SkToU16(syst.wYear);
22baa3858d3f5d128a5c8466b700098109edcad5f2repo sync        t->fMonth       = SkToU8(syst.wMonth);
23baa3858d3f5d128a5c8466b700098109edcad5f2repo sync        t->fDayOfWeek   = SkToU8(syst.wDayOfWeek);
24baa3858d3f5d128a5c8466b700098109edcad5f2repo sync        t->fDay         = SkToU8(syst.wDay);
25baa3858d3f5d128a5c8466b700098109edcad5f2repo sync        t->fHour        = SkToU8(syst.wHour);
26baa3858d3f5d128a5c8466b700098109edcad5f2repo sync        t->fMinute      = SkToU8(syst.wMinute);
27baa3858d3f5d128a5c8466b700098109edcad5f2repo sync        t->fSecond      = SkToU8(syst.wSecond);
28baa3858d3f5d128a5c8466b700098109edcad5f2repo sync    }
29baa3858d3f5d128a5c8466b700098109edcad5f2repo sync}
30baa3858d3f5d128a5c8466b700098109edcad5f2repo sync
31baa3858d3f5d128a5c8466b700098109edcad5f2repo syncSkMSec SkTime::GetMSecs() {
32baa3858d3f5d128a5c8466b700098109edcad5f2repo sync#ifdef SK_DEBUG
33baa3858d3f5d128a5c8466b700098109edcad5f2repo sync    if (gForceTickCount != (SkMSec) -1) {
34baa3858d3f5d128a5c8466b700098109edcad5f2repo sync        return gForceTickCount;
35baa3858d3f5d128a5c8466b700098109edcad5f2repo sync    }
36baa3858d3f5d128a5c8466b700098109edcad5f2repo sync#endif
37baa3858d3f5d128a5c8466b700098109edcad5f2repo sync    return ::GetTickCount();
38baa3858d3f5d128a5c8466b700098109edcad5f2repo sync}
39baa3858d3f5d128a5c8466b700098109edcad5f2repo sync
40baa3858d3f5d128a5c8466b700098109edcad5f2repo sync#elif defined(xSK_BUILD_FOR_MAC)
41baa3858d3f5d128a5c8466b700098109edcad5f2repo sync
42baa3858d3f5d128a5c8466b700098109edcad5f2repo sync#include <time.h>
43baa3858d3f5d128a5c8466b700098109edcad5f2repo sync
44baa3858d3f5d128a5c8466b700098109edcad5f2repo syncvoid SkTime::GetDateTime(DateTime* t) {
45baa3858d3f5d128a5c8466b700098109edcad5f2repo sync    if (t) {
46baa3858d3f5d128a5c8466b700098109edcad5f2repo sync        tm      syst;
47baa3858d3f5d128a5c8466b700098109edcad5f2repo sync        time_t  tm;
48baa3858d3f5d128a5c8466b700098109edcad5f2repo sync
49baa3858d3f5d128a5c8466b700098109edcad5f2repo sync        time(&tm);
50baa3858d3f5d128a5c8466b700098109edcad5f2repo sync        localtime_r(&tm, &syst);
51baa3858d3f5d128a5c8466b700098109edcad5f2repo sync        t->fYear        = SkToU16(syst.tm_year);
52baa3858d3f5d128a5c8466b700098109edcad5f2repo sync        t->fMonth       = SkToU8(syst.tm_mon + 1);
53baa3858d3f5d128a5c8466b700098109edcad5f2repo sync        t->fDayOfWeek   = SkToU8(syst.tm_wday);
54baa3858d3f5d128a5c8466b700098109edcad5f2repo sync        t->fDay         = SkToU8(syst.tm_mday);
55baa3858d3f5d128a5c8466b700098109edcad5f2repo sync        t->fHour        = SkToU8(syst.tm_hour);
56baa3858d3f5d128a5c8466b700098109edcad5f2repo sync        t->fMinute      = SkToU8(syst.tm_min);
57baa3858d3f5d128a5c8466b700098109edcad5f2repo sync        t->fSecond      = SkToU8(syst.tm_sec);
58baa3858d3f5d128a5c8466b700098109edcad5f2repo sync    }
59baa3858d3f5d128a5c8466b700098109edcad5f2repo sync}
60baa3858d3f5d128a5c8466b700098109edcad5f2repo sync
61baa3858d3f5d128a5c8466b700098109edcad5f2repo syncSkMSec SkTime::GetMSecs() {
62baa3858d3f5d128a5c8466b700098109edcad5f2repo sync    UnsignedWide    wide;
63baa3858d3f5d128a5c8466b700098109edcad5f2repo sync    ::Microseconds(&wide);
64baa3858d3f5d128a5c8466b700098109edcad5f2repo sync
65baa3858d3f5d128a5c8466b700098109edcad5f2repo sync    int64_t s = ((int64_t)wide.hi << 32) | wide.lo;
66baa3858d3f5d128a5c8466b700098109edcad5f2repo sync    s = (s + 500) / 1000;   // rounded divide
67baa3858d3f5d128a5c8466b700098109edcad5f2repo sync    return (SkMSec)s;
68baa3858d3f5d128a5c8466b700098109edcad5f2repo sync}
69baa3858d3f5d128a5c8466b700098109edcad5f2repo sync
70baa3858d3f5d128a5c8466b700098109edcad5f2repo sync#endif
71baa3858d3f5d128a5c8466b700098109edcad5f2repo sync