blob: 8f7c3260525e942a5320f832b1edc2513cba2fce [file] [log] [blame]
// Copyright 2015 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef UI_OZONE_PLATFORM_DRM_GPU_PROXY_HELPERS_H_
#define UI_OZONE_PLATFORM_DRM_GPU_PROXY_HELPERS_H_
#include "base/bind.h"
#include "base/location.h"
#include "base/memory/ref_counted.h"
#include "base/threading/thread_task_runner_handle.h"
namespace ui {
namespace internal {
template <typename... Args>
void PostAsyncTask(
const scoped_refptr<base::SingleThreadTaskRunner>& task_runner,
const base::Callback<void(Args...)>& callback,
Args... args) {
task_runner->PostTask(FROM_HERE, base::BindOnce(callback, args...));
}
template <typename... Args>
void PostAsyncTaskOnce(
const scoped_refptr<base::SingleThreadTaskRunner>& task_runner,
base::OnceCallback<void(Args...)> callback,
Args... args) {
auto closure = base::BindOnce(std::move(callback), std::move(args)...);
task_runner->PostTask(FROM_HERE, std::move(closure));
}
} // namespace internal
// Posts a task to a different thread and blocks waiting for the task to finish
// executing.
void PostSyncTask(
const scoped_refptr<base::SingleThreadTaskRunner>& task_runner,
base::OnceClosure callback);
// Creates a callback that will run |callback| on the calling thread. Useful
// when posting a task on a different thread and expecting a callback when the
// task finished (and the callback needs to run on the original thread).
template <typename... Args>
base::Callback<void(Args...)> CreateSafeCallback(
const base::Callback<void(Args...)>& callback) {
return base::Bind(&internal::PostAsyncTask<Args...>,
base::ThreadTaskRunnerHandle::Get(), callback);
}
// Creates a OnceCallback that will run |callback| on the calling thread. Useful
// when posting a task on a different thread and expecting a callback when the
// task finished (and the callback needs to run on the original thread).
template <typename... Args>
base::OnceCallback<void(Args...)> CreateSafeOnceCallback(
base::OnceCallback<void(Args...)> callback) {
return base::BindOnce(&internal::PostAsyncTaskOnce<Args...>,
base::ThreadTaskRunnerHandle::Get(),
std::move(callback));
}
} // namespace ui
#endif // UI_OZONE_PLATFORM_DRM_GPU_PROXY_HELPERS_H_