Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(357)

Side by Side Diff: mojo/public/cpp/environment/lib/environment.cc

Issue 1997473005: Remove requirement that mojo::Environment be instantiated. (Closed) Base URL: https://github.com/domokit/mojo.git@work797_no_utility_tls
Patch Set: SetDefaultAsyncWaiter Created 4 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "mojo/public/cpp/environment/environment.h" 5 #include "mojo/public/cpp/environment/environment.h"
6 6
7 #include <assert.h> 7 #include <assert.h>
8 8
9 #include "mojo/public/c/environment/logger.h" 9 #include "mojo/public/c/environment/logger.h"
10 #include "mojo/public/cpp/environment/lib/default_async_waiter.h" 10 #include "mojo/public/cpp/environment/lib/default_async_waiter.h"
11 #include "mojo/public/cpp/environment/lib/default_logger.h" 11 #include "mojo/public/cpp/environment/lib/default_logger.h"
12 #include "mojo/public/cpp/utility/run_loop.h" 12 #include "mojo/public/cpp/utility/run_loop.h"
13 13
14 namespace mojo { 14 namespace mojo {
15 15
16 namespace { 16 const MojoAsyncWaiter* g_default_async_waiter = &internal::kDefaultAsyncWaiter;
17 17 const MojoLogger* g_default_logger = &internal::kDefaultLogger;
18 const MojoAsyncWaiter* g_default_async_waiter = nullptr;
19 const MojoLogger* g_default_logger = nullptr;
20
21 void Init(const MojoAsyncWaiter* default_async_waiter,
22 const MojoLogger* default_logger) {
23 g_default_async_waiter = default_async_waiter
24 ? default_async_waiter
25 : &internal::kDefaultAsyncWaiter;
26 g_default_logger =
27 default_logger ? default_logger : &internal::kDefaultLogger;
28 }
29
30 } // namespace
31
32 Environment::Environment() {
33 Init(nullptr, nullptr);
34 }
35
36 Environment::Environment(const MojoAsyncWaiter* default_async_waiter,
37 const MojoLogger* default_logger) {
38 Init(default_async_waiter, default_logger);
39 }
40
41 Environment::~Environment() {
42 // TODO(vtl): Maybe we should allow nesting, and restore previous default
43 // async waiters and loggers?
44 g_default_async_waiter = nullptr;
45 g_default_logger = nullptr;
46 }
47 18
48 // static 19 // static
49 const MojoAsyncWaiter* Environment::GetDefaultAsyncWaiter() { 20 const MojoAsyncWaiter* Environment::GetDefaultAsyncWaiter() {
50 assert(g_default_async_waiter); // Fails if not "inside" |Environment|.
51 return g_default_async_waiter; 21 return g_default_async_waiter;
52 } 22 }
53 23
54 // static 24 // static
25 void Environment::SetDefaultAsyncWaiter(const MojoAsyncWaiter* async_waiter) {
26 g_default_async_waiter =
27 async_waiter ? async_waiter : &internal::kDefaultAsyncWaiter;
28 }
29
30 // static
55 const MojoLogger* Environment::GetDefaultLogger() { 31 const MojoLogger* Environment::GetDefaultLogger() {
56 assert(g_default_logger); // Fails if not "inside" |Environment|.
57 return g_default_logger; 32 return g_default_logger;
58 } 33 }
59 34
60 // static 35 // static
61 void Environment::SetDefaultLogger(const MojoLogger* logger) { 36 void Environment::SetDefaultLogger(const MojoLogger* logger) {
62 assert(g_default_logger); // Fails if not "inside" |Environment|.
63 g_default_logger = logger ? logger : &internal::kDefaultLogger; 37 g_default_logger = logger ? logger : &internal::kDefaultLogger;
64 } 38 }
65 39
66 // static 40 // static
67 void Environment::InstantiateDefaultRunLoop() { 41 void Environment::InstantiateDefaultRunLoop() {
68 assert(!RunLoop::current()); 42 assert(!RunLoop::current());
69 // Not leaked: accessible from |RunLoop::current()|. 43 // Not leaked: accessible from |RunLoop::current()|.
70 RunLoop* run_loop = new RunLoop(); 44 RunLoop* run_loop = new RunLoop();
71 MOJO_ALLOW_UNUSED_LOCAL(run_loop); 45 MOJO_ALLOW_UNUSED_LOCAL(run_loop);
72 assert(run_loop == RunLoop::current()); 46 assert(run_loop == RunLoop::current());
73 } 47 }
74 48
75 // static 49 // static
76 void Environment::DestroyDefaultRunLoop() { 50 void Environment::DestroyDefaultRunLoop() {
77 assert(RunLoop::current()); 51 assert(RunLoop::current());
78 delete RunLoop::current(); 52 delete RunLoop::current();
79 assert(!RunLoop::current()); 53 assert(!RunLoop::current());
80 } 54 }
81 55
82 } // namespace mojo 56 } // namespace mojo
OLDNEW
« no previous file with comments | « mojo/public/cpp/environment/environment.h ('k') | mojo/public/cpp/environment/lib/logging_only_environment.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698