MCPcopy Create free account
hub / github.com/WasmEdge/WasmEdge / clock

Method clock

lib/host/wasi/inode-win.cpp:2194–2233  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

2192}
2193
2194void Poller::clock(__wasi_clockid_t Clock, __wasi_timestamp_t Timeout,
2195 __wasi_timestamp_t Precision, __wasi_subclockflags_t Flags,
2196 __wasi_userdata_t UserData) noexcept {
2197 assuming(Events.size() < WasiEvents.size());
2198 auto &Event = Events.emplace_back();
2199 Event.Valid = false;
2200 Event.userdata = UserData;
2201 Event.type = __WASI_EVENTTYPE_CLOCK;
2202
2203 if (Flags & __WASI_SUBCLOCKFLAGS_SUBSCRIPTION_CLOCK_ABSTIME) {
2204 __wasi_timestamp_t Now;
2205 if (auto Res = Clock::clockTimeGet(Clock, Precision, Now); unlikely(!Res)) {
2206 Event.Valid = true;
2207 Event.error = Res.error();
2208 return;
2209 }
2210 if (Timeout < Now) {
2211 // already expired
2212 Event.Valid = true;
2213 Event.error = __WASI_ERRNO_SUCCESS;
2214 return;
2215 }
2216 Timeout -= Now;
2217 }
2218 const auto Micros = std::chrono::duration_cast<std::chrono::microseconds>(
2219 std::chrono::nanoseconds(Timeout));
2220 const auto Secs = std::chrono::duration_cast<std::chrono::seconds>(Micros);
2221
2222 TIMEVAL_ SysTimeout;
2223 SysTimeout.tv_sec = static_cast<long>(Secs.count());
2224 SysTimeout.tv_usec =
2225 static_cast<long>(std::chrono::microseconds(Micros - Secs).count());
2226
2227 if (TimeoutEvent == nullptr || MinimumTimeout.tv_sec > SysTimeout.tv_sec ||
2228 (MinimumTimeout.tv_sec == SysTimeout.tv_sec &&
2229 MinimumTimeout.tv_usec > SysTimeout.tv_usec)) {
2230 TimeoutEvent = &Event;
2231 MinimumTimeout = SysTimeout;
2232 }
2233}
2234
2235void Poller::close(const INode &) noexcept {}
2236

Callers 1

bodyMethod · 0.45

Calls 3

unlikelyFunction · 0.85
countMethod · 0.80
sizeMethod · 0.45

Tested by

no test coverage detected