message: Create a worker thread to perform tracing within.
  This allows controlling more of the environment that the trace happens within
  without impacting other parts of the system. This enables the host_tracer_test
  to pass on Windows.
diff: @@ -107,9 +107,20 @@ TEST(HostTracerTest, CollectsTraceMeEventsAsRunMetadata) {
  }
  TEST(HostTracerTest, CollectsTraceMeEventsAsXSpace) {
  - int32 thread_id = Env::Default()->GetCurrentThreadId();
  - string thread_name;
  + int32 thread_id;
  + string thread_name = "MyThreadName";
  + XSpace space;
  +
  + // We start a thread with a known and controled name. As of the time of
  + // writing, not all platforms (example: Windows) allow reading through the
  + // system to the current thread name/description. By starting a thread with a
  + // name, we control this behavior entirely within the TensorFlow subsystems.
  + std::unique_ptr<Thread> traced_thread(
  + Env::Default()->StartThread(ThreadOptions(), thread_name, [&] {
  + // Some implementations add additional information to the thread name.
  + // Recapture this information.
  ASSERT_TRUE(Env::Default()->GetCurrentThreadName(&thread_name));
  + thread_id = Env::Default()->GetCurrentThreadId();
  auto tracer = CreateHostTracer(ProfilerOptions());
  @@ -122,8 +133,10 @@ TEST(HostTracerTest, CollectsTraceMeEventsAsXSpace) {
  { TraceMe traceme("incomplete#key1=value1,key2#"); }
  TF_ASSERT_OK(tracer->Stop());
  - XSpace space;
  TF_ASSERT_OK(tracer->CollectData(&space));
  + }));
  + traced_thread.reset(); // Join thread, waiting for completion.
  + ASSERT_NO_FATAL_FAILURE(); // Test for failure in child thread.
  ASSERT_EQ(space.planes_size(), 1);
  const auto& plane = space.planes(0);
  