Index: runtime/vm/os_thread_fuchsia.cc |
diff --git a/runtime/vm/os_thread_linux.cc b/runtime/vm/os_thread_fuchsia.cc |
similarity index 88% |
copy from runtime/vm/os_thread_linux.cc |
copy to runtime/vm/os_thread_fuchsia.cc |
index 969504270e97e5a773c9bb6fddae4363a139b86c..c3e8d25173152579227bde779fa1c3fc798b53ec 100644 |
--- a/runtime/vm/os_thread_linux.cc |
+++ b/runtime/vm/os_thread_fuchsia.cc |
@@ -1,30 +1,24 @@ |
-// 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" // NOLINT |
- |
-#if defined(TARGET_OS_LINUX) |
+#if defined(TARGET_OS_FUCHSIA) |
#include "vm/os_thread.h" |
+#include "vm/os_thread_fuchsia.h" |
#include <errno.h> // NOLINT |
-#include <sys/resource.h> // NOLINT |
-#include <sys/syscall.h> // NOLINT |
-#include <sys/time.h> // NOLINT |
+#include <magenta/syscalls.h> |
+#include <magenta/types.h> |
#include "platform/assert.h" |
-#include "platform/signal_blocker.h" |
-#include "platform/utils.h" |
namespace dart { |
#define VALIDATE_PTHREAD_RESULT(result) \ |
if (result != 0) { \ |
- const int kBufferSize = 1024; \ |
- char error_buf[kBufferSize]; \ |
- FATAL2("pthread error: %d (%s)", result, \ |
- Utils::StrError(result, error_buf, kBufferSize)); \ |
+ FATAL1("pthread error: %d", result); \ |
} |
@@ -41,9 +35,8 @@ namespace dart { |
if (result != 0) { \ |
const int kBufferSize = 1024; \ |
char error_buf[kBufferSize]; \ |
- fprintf(stderr, "%s:%d: pthread error: %d (%s)\n", \ |
- __FILE__, __LINE__, result, \ |
- Utils::StrError(result, error_buf, kBufferSize)); \ |
+ fprintf(stderr, "%s:%d: pthread error: %d\n", \ |
+ __FILE__, __LINE__, result); \ |
return result; \ |
} |
#else |
@@ -53,11 +46,12 @@ namespace dart { |
static void ComputeTimeSpecMicros(struct timespec* ts, int64_t micros) { |
- int64_t secs = micros / kMicrosecondsPerSecond; |
- int64_t nanos = |
- (micros - (secs * kMicrosecondsPerSecond)) * kNanosecondsPerMicrosecond; |
- int result = clock_gettime(CLOCK_MONOTONIC, ts); |
- ASSERT(result == 0); |
+ // time in nanoseconds. |
+ mx_time_t now = _magenta_current_time(); |
+ mx_time_t target = now + (micros * kNanosecondsPerMicrosecond); |
+ int64_t secs = target / kNanosecondsPerSecond; |
+ int64_t nanos = target - (secs * kNanosecondsPerSecond); |
+ |
ts->tv_sec += secs; |
ts->tv_nsec += nanos; |
if (ts->tv_nsec >= kNanosecondsPerSecond) { |
@@ -87,21 +81,6 @@ class ThreadStartData { |
}; |
-// Spawned threads inherit their spawner's signal mask. We sometimes spawn |
-// threads for running Dart code from a thread that is blocking SIGPROF. |
-// This function explicitly unblocks SIGPROF so the profiler continues to |
-// sample this thread. |
-static void UnblockSIGPROF() { |
- sigset_t set; |
- sigemptyset(&set); |
- sigaddset(&set, SIGPROF); |
- int r = pthread_sigmask(SIG_UNBLOCK, &set, NULL); |
- USE(r); |
- ASSERT(r == 0); |
- ASSERT(!CHECK_IS_BLOCKING(SIGPROF)); |
-} |
- |
- |
// Dispatch to the thread start function provided by the caller. This trampoline |
// is used to ensure that the thread is properly destroyed if the thread just |
// exits. |
@@ -118,7 +97,6 @@ static void* ThreadStart(void* data_ptr) { |
if (thread != NULL) { |
OSThread::SetCurrent(thread); |
thread->set_name(name); |
- UnblockSIGPROF(); |
// Call the supplied thread start function handing it its parameters. |
function(parameter); |
} |
@@ -189,9 +167,12 @@ ThreadId OSThread::GetCurrentThreadId() { |
} |
+#ifndef PRODUCT |
ThreadId OSThread::GetCurrentThreadTraceId() { |
- return syscall(__NR_gettid); |
+ UNIMPLEMENTED(); |
+ return 0; |
} |
+#endif // PRODUCT |
ThreadJoinId OSThread::GetCurrentThreadJoinId(OSThread* thread) { |
@@ -452,4 +433,4 @@ void Monitor::NotifyAll() { |
} // namespace dart |
-#endif // defined(TARGET_OS_LINUX) |
+#endif // defined(TARGET_OS_FUCHSIA) |