Index: runtime/bin/utils_fuchsia.cc |
diff --git a/runtime/bin/utils_linux.cc b/runtime/bin/utils_fuchsia.cc |
similarity index 61% |
copy from runtime/bin/utils_linux.cc |
copy to runtime/bin/utils_fuchsia.cc |
index 2029071abebae223b5e3d1cb21f85d6b1d06d9f7..1df2aba4e45547cfa9228ce9da418a97114a0263 100644 |
--- a/runtime/bin/utils_linux.cc |
+++ b/runtime/bin/utils_fuchsia.cc |
@@ -1,14 +1,13 @@ |
-// Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file |
+// Copyright (c) 2016, the Dart project authors. Please see the AUTHORS file |
// for details. All rights reserved. Use of this source code is governed by a |
// BSD-style license that can be found in the LICENSE file. |
#include "platform/globals.h" |
-#if defined(TARGET_OS_LINUX) |
+#if defined(TARGET_OS_FUCHSIA) |
-#include <errno.h> // NOLINT |
-#include <netdb.h> // NOLINT |
-#include <sys/time.h> // NOLINT |
-#include <time.h> // NOLINT |
+#include <errno.h> |
+#include <magenta/syscalls.h> |
+#include <magenta/types.h> |
#include "bin/utils.h" |
#include "platform/assert.h" |
@@ -34,7 +33,7 @@ void OSError::SetCodeAndMessage(SubSystem sub_system, int code) { |
char error_buf[kBufferSize]; |
SetMessage(Utils::StrError(code, error_buf, kBufferSize)); |
} else if (sub_system == kGetAddressInfo) { |
- SetMessage(gai_strerror(code)); |
+ UNIMPLEMENTED(); |
} else { |
UNREACHABLE(); |
} |
@@ -84,41 +83,17 @@ int64_t TimerUtils::GetCurrentMonotonicMillis() { |
int64_t TimerUtils::GetCurrentMonotonicMicros() { |
- struct timespec ts; |
- if (clock_gettime(CLOCK_MONOTONIC, &ts) != 0) { |
- UNREACHABLE(); |
- return 0; |
- } |
- // Convert to microseconds. |
- int64_t result = ts.tv_sec; |
- result *= kMicrosecondsPerSecond; |
- result += (ts.tv_nsec / kNanosecondsPerMicrosecond); |
- return result; |
+ int64_t ticks = mx_current_time(); |
+ return ticks / kNanosecondsPerMicrosecond; |
} |
void TimerUtils::Sleep(int64_t millis) { |
- struct timespec req; // requested. |
- struct timespec rem; // remainder. |
- int64_t micros = millis * kMicrosecondsPerMillisecond; |
- int64_t seconds = micros / kMicrosecondsPerSecond; |
- micros = micros - seconds * kMicrosecondsPerSecond; |
- int64_t nanos = micros * kNanosecondsPerMicrosecond; |
- req.tv_sec = seconds; |
- req.tv_nsec = nanos; |
- while (true) { |
- int r = nanosleep(&req, &rem); |
- if (r == 0) { |
- break; |
- } |
- // We should only ever see an interrupt error. |
- ASSERT(errno == EINTR); |
- // Copy remainder into requested and repeat. |
- req = rem; |
- } |
+ mx_nanosleep( |
+ millis * kMicrosecondsPerMillisecond * kNanosecondsPerMicrosecond); |
} |
} // namespace bin |
} // namespace dart |
-#endif // defined(TARGET_OS_LINUX) |
+#endif // defined(TARGET_OS_FUCHSIA) |