// Copyright 2019 The Fuchsia Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#include "loop.h"

#include <lib/async-loop/loop.h>

#include "task_observers.h"

namespace flutter {

namespace {

static void LoopEpilogue(async_loop_t*, void*) {
  ExecuteAfterTaskObservers();
}

constexpr async_loop_config_t kAttachedLoopConfig = {
  .make_default_for_current_thread = true,
  .epilogue = &LoopEpilogue,
};

constexpr async_loop_config_t kDetachedLoopConfig = {
  .make_default_for_current_thread = false,
  .epilogue = &LoopEpilogue,
};

}  // namespace

async::Loop* MakeObservableLoop(bool attachToThread) {
  return new async::Loop(&(attachToThread ? kAttachedLoopConfig :
                                            kDetachedLoopConfig));
}

}  // namespace flutter
