blob: a4bc4d1404f740ea2bc0f40638b6f12877393c7a [file] [log] [blame]
// Copyright 2018 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 "task_observers.h"
#include <map>
#include "topaz/lib/deprecated_loop/message_loop.h"
namespace flutter {
thread_local std::map<intptr_t, fit::closure> tTaskObservers;
static void ExecuteAfterTaskObservers() {
for (const auto& callback : tTaskObservers) {
callback.second();
}
}
void CurrentMessageLoopAddAfterTaskObserver(intptr_t key,
fit::closure observer) {
if (!observer) {
return;
}
if (tTaskObservers.size() == 0) {
deprecated_loop::MessageLoop::GetCurrent()->SetAfterTaskCallback(
std::bind(&ExecuteAfterTaskObservers));
}
tTaskObservers[key] = std::move(observer);
}
void CurrentMessageLoopRemoveAfterTaskObserver(intptr_t key) {
tTaskObservers.erase(key);
if (tTaskObservers.size() == 0) {
deprecated_loop::MessageLoop::GetCurrent()->ClearAfterTaskCallback();
}
}
} // namespace flutter