diff options
author | viettrungluu@chromium.org <viettrungluu@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2014-06-14 07:24:33 +0000 |
---|---|---|
committer | viettrungluu@chromium.org <viettrungluu@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2014-06-14 07:24:33 +0000 |
commit | 497d61da31e464586206ae58b969516123e6baea (patch) | |
tree | 584f1199688c691e173679aad6b6b2a1bd63ee0f /mojo | |
parent | 7931f272162d572de3a2374ba1560ac784343210 (diff) | |
download | chromium_src-497d61da31e464586206ae58b969516123e6baea.zip chromium_src-497d61da31e464586206ae58b969516123e6baea.tar.gz chromium_src-497d61da31e464586206ae58b969516123e6baea.tar.bz2 |
Mojo: Add basic logging facilities to environment.
I'll add nicer logging macros separately.
Also to do: We should also build mojo_public_environment_unittests
against mojo_environment_chromium (to test the "chromium"
implementation). I tried this manually (on a shared library build), and
the LoggerTests pass but the AsyncWaiterTests blow up.
R=darin@chromium.org
Review URL: https://codereview.chromium.org/330933004
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@277189 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'mojo')
-rw-r--r-- | mojo/environment/default_logger.cc | 15 | ||||
-rw-r--r-- | mojo/environment/default_logger_impl.cc | 46 | ||||
-rw-r--r-- | mojo/environment/default_logger_impl.h | 19 | ||||
-rw-r--r-- | mojo/mojo.gyp | 3 | ||||
-rw-r--r-- | mojo/mojo_public.gypi | 5 | ||||
-rw-r--r-- | mojo/public/c/environment/logger.h | 32 | ||||
-rw-r--r-- | mojo/public/cpp/environment/default_logger.h | 17 | ||||
-rw-r--r-- | mojo/public/cpp/environment/lib/default_logger.cc | 47 | ||||
-rw-r--r-- | mojo/public/cpp/environment/tests/logger_unittest.cc | 29 |
9 files changed, 213 insertions, 0 deletions
diff --git a/mojo/environment/default_logger.cc b/mojo/environment/default_logger.cc new file mode 100644 index 0000000..150dfa2 --- /dev/null +++ b/mojo/environment/default_logger.cc @@ -0,0 +1,15 @@ +// 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. + +#include "mojo/public/cpp/environment/default_logger.h" + +#include "mojo/environment/default_logger_impl.h" + +namespace mojo { + +const MojoLogger* GetDefaultLogger() { + return internal::GetDefaultLoggerImpl(); +} + +} // namespace mojo diff --git a/mojo/environment/default_logger_impl.cc b/mojo/environment/default_logger_impl.cc new file mode 100644 index 0000000..a2b06198 --- /dev/null +++ b/mojo/environment/default_logger_impl.cc @@ -0,0 +1,46 @@ +// 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. + +#include "mojo/environment/default_logger_impl.h" + +#include "base/logging.h" +#include "base/macros.h" + +namespace mojo { +namespace internal { +namespace { + +int GetChromiumLogLevel(MojoLogLevel log_level) { + // Our log levels correspond, except for "fatal": + COMPILE_ASSERT(logging::LOG_VERBOSE == MOJO_LOG_LEVEL_VERBOSE, + verbose_log_level_value_mismatch); + COMPILE_ASSERT(logging::LOG_INFO == MOJO_LOG_LEVEL_INFO, + info_log_level_value_mismatch); + COMPILE_ASSERT(logging::LOG_WARNING == MOJO_LOG_LEVEL_WARNING, + warning_log_level_value_mismatch); + COMPILE_ASSERT(logging::LOG_ERROR == MOJO_LOG_LEVEL_ERROR, + error_log_level_value_mismatch); + + return (log_level >= MOJO_LOG_LEVEL_FATAL) ? logging::LOG_FATAL : log_level; +} + +void LogMessage(MojoLogLevel log_level, const char* message) { + // TODO(vtl): Possibly, we should try to pull out the file and line number + // from |message|. + logging::LogMessage(__FILE__, __LINE__, + GetChromiumLogLevel(log_level)).stream() << message; +} + +const MojoLogger kDefaultLogger = { + LogMessage +}; + +} // namespace + +const MojoLogger* GetDefaultLoggerImpl() { + return &kDefaultLogger; +} + +} // namespace internal +} // namespace mojo diff --git a/mojo/environment/default_logger_impl.h b/mojo/environment/default_logger_impl.h new file mode 100644 index 0000000..c87a727 --- /dev/null +++ b/mojo/environment/default_logger_impl.h @@ -0,0 +1,19 @@ +// 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_ENVIRONMENT_DEFAULT_LOGGER_IMPL_H_ +#define MOJO_ENVIRONMENT_DEFAULT_LOGGER_IMPL_H_ + +#include "mojo/environment/mojo_environment_impl_export.h" +#include "mojo/public/c/environment/logger.h" + +namespace mojo { +namespace internal { + +MOJO_ENVIRONMENT_IMPL_EXPORT const MojoLogger* GetDefaultLoggerImpl(); + +} // namespace internal +} // namespace mojo + +#endif // MOJO_ENVIRONMENT_DEFAULT_LOGGER_IMPL_H_ diff --git a/mojo/mojo.gyp b/mojo/mojo.gyp index 33d8628..aee37a4 100644 --- a/mojo/mojo.gyp +++ b/mojo/mojo.gyp @@ -397,6 +397,7 @@ ], 'sources': [ 'environment/default_async_waiter.cc', + 'environment/default_logger.cc', 'environment/environment.cc', ], 'include_dirs': [ @@ -421,6 +422,8 @@ 'sources': [ 'environment/default_async_waiter_impl.cc', 'environment/default_async_waiter_impl.h', + 'environment/default_logger_impl.cc', + 'environment/default_logger_impl.h', ], 'include_dirs': [ '..', diff --git a/mojo/mojo_public.gypi b/mojo/mojo_public.gypi index 760a849..516f6f6 100644 --- a/mojo/mojo_public.gypi +++ b/mojo/mojo_public.gypi @@ -161,6 +161,7 @@ ], 'sources': [ 'public/cpp/environment/tests/async_waiter_unittest.cc', + 'public/cpp/environment/tests/logger_unittest.cc', ], }, { @@ -316,9 +317,13 @@ 'target_name': 'mojo_environment_standalone', 'type': 'static_library', 'sources': [ + 'public/c/environment/async_waiter.h', + 'public/c/environment/logger.h', 'public/cpp/environment/default_async_waiter.h', + 'public/cpp/environment/default_logger.h', 'public/cpp/environment/environment.h', 'public/cpp/environment/lib/default_async_waiter.cc', + 'public/cpp/environment/lib/default_logger.cc', 'public/cpp/environment/lib/environment.cc', ], 'include_dirs': [ diff --git a/mojo/public/c/environment/logger.h b/mojo/public/c/environment/logger.h new file mode 100644 index 0000000..fd9a88f --- /dev/null +++ b/mojo/public/c/environment/logger.h @@ -0,0 +1,32 @@ +// 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_C_ENVIRONMENT_LOGGER_H_ +#define MOJO_PUBLIC_C_ENVIRONMENT_LOGGER_H_ + +#include <stdint.h> + +// |MojoLogLevel|: Used to specify the type of log message. Values are ordered +// by severity (i.e., higher numerical values are more severe). + +typedef int32_t MojoLogLevel; + +#ifdef __cplusplus +const MojoLogLevel MOJO_LOG_LEVEL_VERBOSE = -1; +const MojoLogLevel MOJO_LOG_LEVEL_INFO = 0; +const MojoLogLevel MOJO_LOG_LEVEL_WARNING = 1; +const MojoLogLevel MOJO_LOG_LEVEL_ERROR = 2; +const MojoLogLevel MOJO_LOG_LEVEL_FATAL = 3; +#else +#define MOJO_LOG_LEVEL_INFO ((MojoLogLevel) 0) +#define MOJO_LOG_LEVEL_WARNING ((MojoLogLevel) 1) +#define MOJO_LOG_LEVEL_ERROR ((MojoLogLevel) 2) +#define MOJO_LOG_LEVEL_FATAL ((MojoLogLevel) 3) +#endif + +struct MojoLogger { + void (*LogMessage)(MojoLogLevel log_level, const char* message); +}; + +#endif // MOJO_PUBLIC_C_ENVIRONMENT_LOGGER_H_ diff --git a/mojo/public/cpp/environment/default_logger.h b/mojo/public/cpp/environment/default_logger.h new file mode 100644 index 0000000..b022393 --- /dev/null +++ b/mojo/public/cpp/environment/default_logger.h @@ -0,0 +1,17 @@ +// 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_DEFAULT_LOGGER_H_ +#define MOJO_PUBLIC_CPP_ENVIRONMENT_DEFAULT_LOGGER_H_ + +#include "mojo/public/c/environment/logger.h" + +namespace mojo { + +// Returns a default implementation of |MojoLogger|. +const MojoLogger* GetDefaultLogger(); + +} // namespace mojo + +#endif // MOJO_PUBLIC_CPP_ENVIRONMENT_DEFAULT_LOGGER_H_ diff --git a/mojo/public/cpp/environment/lib/default_logger.cc b/mojo/public/cpp/environment/lib/default_logger.cc new file mode 100644 index 0000000..100b0d1 --- /dev/null +++ b/mojo/public/cpp/environment/lib/default_logger.cc @@ -0,0 +1,47 @@ +// 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. + +#include "mojo/public/cpp/environment/default_logger.h" + +#include <stdio.h> +#include <stdlib.h> // For |abort()|. + +namespace mojo { +namespace { + +const char* GetLogLevelString(MojoLogLevel log_level) { + if (log_level < MOJO_LOG_LEVEL_VERBOSE) + return "VERBOSE"; + switch (log_level) { + case MOJO_LOG_LEVEL_VERBOSE: + return "VERBOSE"; + case MOJO_LOG_LEVEL_INFO: + return "INFO"; + case MOJO_LOG_LEVEL_WARNING: + return "WARNING"; + case MOJO_LOG_LEVEL_ERROR: + return "ERROR"; + } + // Consider everything higher to be fatal. + return "FATAL"; +} + +void LogMessage(MojoLogLevel log_level, const char* message) { + // TODO(vtl): Add timestamp also? + fprintf(stderr, "%s:%s\n", GetLogLevelString(log_level), message); + if (log_level >= MOJO_LOG_LEVEL_FATAL) + abort(); +} + +const MojoLogger kDefaultLogger = { + LogMessage +}; + +} // namespace + +const MojoLogger* GetDefaultLogger() { + return &kDefaultLogger; +} + +} // namespace mojo diff --git a/mojo/public/cpp/environment/tests/logger_unittest.cc b/mojo/public/cpp/environment/tests/logger_unittest.cc new file mode 100644 index 0000000..305d0c4 --- /dev/null +++ b/mojo/public/cpp/environment/tests/logger_unittest.cc @@ -0,0 +1,29 @@ +// 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. + +#include "mojo/public/cpp/environment/default_logger.h" +#include "mojo/public/cpp/environment/environment.h" +#include "testing/gtest/include/gtest/gtest.h" + +namespace mojo { +namespace { + +TEST(LoggerTest, Basic) { + Environment environment; + const MojoLogger* const logger = GetDefaultLogger(); + + logger->LogMessage(MOJO_LOG_LEVEL_VERBOSE-1, "Logged at VERBOSE-1 level"); + logger->LogMessage(MOJO_LOG_LEVEL_VERBOSE, "Logged at VERBOSE level"); + logger->LogMessage(MOJO_LOG_LEVEL_INFO, "Logged at INFO level"); + logger->LogMessage(MOJO_LOG_LEVEL_WARNING, "Logged at WARNING level"); + logger->LogMessage(MOJO_LOG_LEVEL_ERROR, "Logged at ERROR level"); + + // This should kill us: + EXPECT_DEATH({ + logger->LogMessage(MOJO_LOG_LEVEL_FATAL, "Logged at FATAL level"); + }, ""); +} + +} // namespace +} // namespace mojo |