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 3// found in the LICENSE file. 4 5#include "mojo/public/cpp/environment/environment.h" 6 7#include <assert.h> 8#include <stddef.h> 9 10#include "mojo/public/c/environment/logger.h" 11#include "mojo/public/cpp/environment/lib/default_async_waiter.h" 12#include "mojo/public/cpp/environment/lib/default_logger.h" 13#include "mojo/public/cpp/utility/run_loop.h" 14 15namespace mojo { 16 17namespace { 18 19const MojoAsyncWaiter* g_default_async_waiter = NULL; 20const MojoLogger* g_default_logger = NULL; 21 22void Init(const MojoAsyncWaiter* default_async_waiter, 23 const MojoLogger* default_logger) { 24 g_default_async_waiter = 25 default_async_waiter ? default_async_waiter : 26 &internal::kDefaultAsyncWaiter; 27 g_default_logger = default_logger ? default_logger : 28 &internal::kDefaultLogger; 29 30 RunLoop::SetUp(); 31} 32 33} // namespace 34 35Environment::Environment() { 36 Init(NULL, NULL); 37} 38 39Environment::Environment(const MojoAsyncWaiter* default_async_waiter, 40 const MojoLogger* default_logger) { 41 Init(default_async_waiter, default_logger); 42} 43 44Environment::~Environment() { 45 RunLoop::TearDown(); 46 47 // TODO(vtl): Maybe we should allow nesting, and restore previous default 48 // async waiters and loggers? 49 g_default_async_waiter = NULL; 50 g_default_logger = NULL; 51} 52 53// static 54const MojoAsyncWaiter* Environment::GetDefaultAsyncWaiter() { 55 assert(g_default_async_waiter); // Fails if not "inside" |Environment|. 56 return g_default_async_waiter; 57} 58 59// static 60const MojoLogger* Environment::GetDefaultLogger() { 61 assert(g_default_logger); // Fails if not "inside" |Environment|. 62 return g_default_logger; 63} 64 65} // namespace mojo 66