blob: e993fd5e5f0cad227f5f464202771ccf50b4b1f0 [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.
// This file "provides" abstractions for "task runners" and posting tasks to
// them. The embedder is required to actually declare/define them in
// platform_task_runner_impl.h. See below for details.
#ifndef MOJO_EDK_EMBEDDER_PLATFORM_TASK_RUNNER_H_
#define MOJO_EDK_EMBEDDER_PLATFORM_TASK_RUNNER_H_
// The embedder is required to provide the following:
//
// |mojo::embedder::PlatformTaskRunner|: An opaque class or type in the
// |mojo::embedder| namespace to a "reference counted" object (see below).
//
// |mojo::embedder::PlatformTaskRunnerRefPtr|: A class or type alias in the
// |mojo::embedder| namespace that is:
// * default constructible;
// * copy and move constructible and assignable;
// * constructible and assignable from |nullptr|;
// * testable (with the obvious semantics; testing must also be |const| and
// thread-safe); and
// * comparable with suitable |operator==|, |operator!=| and |operator<|
// (satisifying obvious properties).
// It must also have a const |get()| method that returns a
// |PlatformTaskRunner*|. (The various operations must coincide with the
// corresponding operations on pointers returned by |get()|.)
//
// A |PlatformTaskRunnerRefPtr| refers ("points") to something that can
// (sequentially) execute tasks on a single-thread (so it's really more like a
// pointer to Chromium's |base::SingleThreadTaskRunner| than to a
// |base::TaskRunner|).
//
// |mojo::embedder::PlatformPostTask()|: A function in the |mojo::embedder|
// namespace with the signature:
// void PlatformPostTask(PlatformTaskRunner* task_runner,
// const base::Closure& closure);
// where |task_runner| must be non-null. This function has the following
// requirements:
// * It must be thread-safe.
// * It will execute |closure| exactly once, on the thread referred to by the
// task runner.
// * Given two calls |PlatformPostTask(task_runner1, closure1)| and
// |PlatformPostTask(task_runner2, closure2)| with |task_runner1 ==
// task_runner2|, and the first call occurring before the second call in
// some well-defined way (e.g., they occur on the same thread, or on
// different threads with synchronization to ensure ordering), then
// |closure1| will be executed before |closure2|.
//
// TODO(vtl): Remove the |base::Closure| dependency.
// The embedder should define the above in the following file.
#include "mojo/edk/embedder/platform_task_runner_impl.h"
#endif // MOJO_EDK_EMBEDDER_PLATFORM_TASK_RUNNER_H_