summaryrefslogtreecommitdiffstats
path: root/mojo/public/cpp/environment/environment.h
blob: 3a544286de354a3678c4a767dd8be69460f17e5f (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
// Copyright 2014 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 MOJO_PUBLIC_CPP_ENVIRONMENT_ENVIRONMENT_H_
#define MOJO_PUBLIC_CPP_ENVIRONMENT_ENVIRONMENT_H_

#include "mojo/public/cpp/system/macros.h"

struct MojoAsyncWaiter;
struct MojoLogger;

namespace mojo {

struct TaskTracker;

// Other parts of the Mojo C++ APIs use the *static* methods of this class.
//
// The "standalone" implementation of this class requires that this class (in
// the lib/ subdirectory) be instantiated (and remain so) while using the Mojo
// C++ APIs. I.e., the static methods depend on things set up by the constructor
// and torn down by the destructor.
//
// Other implementations may not have this requirement.
class Environment {
 public:
  Environment();
  // This constructor allows the standard implementations to be overridden (set
  // a parameter to null to get the standard implementation).
  Environment(const MojoAsyncWaiter* default_async_waiter,
              const MojoLogger* default_logger,
              const TaskTracker* default_task_tracker);
  ~Environment();

  static const MojoAsyncWaiter* GetDefaultAsyncWaiter();
  static const MojoLogger* GetDefaultLogger();
  static const TaskTracker* GetDefaultTaskTracker();

  // These instantiate and destroy an environment-specific run loop for the
  // current thread, allowing |GetDefaultAsyncWaiter()| to be used. (The run
  // loop itself should be accessible via thread-local storage, using methods
  // specific to the run loop implementation.) Creating and destroying nested
  // run loops is not supported.
  static void InstantiateDefaultRunLoop();
  static void DestroyDefaultRunLoop();

 private:
  MOJO_DISALLOW_COPY_AND_ASSIGN(Environment);
};

}  // namespace mojo

#endif  // MOJO_PUBLIC_CPP_ENVIRONMENT_ENVIRONMENT_H_