blob: 5607fc8535b5a7751eb9d603b133d69360cfa4e6 [file] [log] [blame]
* Copyright (c) 2012 The Native Client Authors. All rights reserved.
* Use of this source code is governed by a BSD-style license that can be
* found in the LICENSE file.
#include <windows.h>
#include <sys/timeb.h>
#include "native_client/src/include/portability.h"
#include "native_client/src/include/nacl_base.h"
/* get NaClMutex declaration, since we need size */
#include "native_client/src/shared/platform/nacl_sync.h"
* NaClTimeState definition for Windows
struct NaClTimeState {
* The following are used to set/reset the multimedia timer
* resolution to the highest possible. Only used/modified during
* module initialization/finalization, so can be accessed w/o locks
* during normal operation.
UINT wPeriodMin;
uint64_t time_resolution_ns;
uint32_t allow_low_resolution;
* The following are used to provide millisecond resolution
* gettimeofday, and are protected by the mutex lock.
struct NaClMutex mu;
uint64_t system_time_start_ms;
DWORD ms_counter_start;
uint64_t epoch_start_ms;
* Members in this block should have valid values iff !allow_low_resolution,
* and are undefined o/w, with exception of can_use_qpc
* (can_use_qpc==0 if allow_low_resolution). Actually qpc_frequency,
* qpc_start, and last_qpc are valid iff !allow_low_resolution && can_use_qpc,
* so only can_use_qpc is well defined when !allow_low_resolution.
uint32_t can_use_qpc;
int64_t qpc_frequency;
int64_t qpc_start;
int64_t last_qpc;