| 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)
 | 
| 
 |