Index: ui/ozone/platform/drm/gpu/proxy_helpers.h |
diff --git a/ui/ozone/platform/drm/gpu/proxy_helpers.h b/ui/ozone/platform/drm/gpu/proxy_helpers.h |
index 0cd73b785ea9f97b65ee60e5367586c309ad196d..086709c9a01b36fbb9347a88424983064e7e2130 100644 |
--- a/ui/ozone/platform/drm/gpu/proxy_helpers.h |
+++ b/ui/ozone/platform/drm/gpu/proxy_helpers.h |
@@ -22,6 +22,15 @@ void PostAsyncTask( |
task_runner->PostTask(FROM_HERE, base::Bind(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 |
@@ -40,6 +49,17 @@ base::Callback<void(Args...)> CreateSafeCallback( |
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_ |