summaryrefslogtreecommitdiffstats
path: root/mojo
diff options
context:
space:
mode:
authorviettrungluu@chromium.org <viettrungluu@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2014-06-14 07:24:33 +0000
committerviettrungluu@chromium.org <viettrungluu@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2014-06-14 07:24:33 +0000
commit497d61da31e464586206ae58b969516123e6baea (patch)
tree584f1199688c691e173679aad6b6b2a1bd63ee0f /mojo
parent7931f272162d572de3a2374ba1560ac784343210 (diff)
downloadchromium_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.cc15
-rw-r--r--mojo/environment/default_logger_impl.cc46
-rw-r--r--mojo/environment/default_logger_impl.h19
-rw-r--r--mojo/mojo.gyp3
-rw-r--r--mojo/mojo_public.gypi5
-rw-r--r--mojo/public/c/environment/logger.h32
-rw-r--r--mojo/public/cpp/environment/default_logger.h17
-rw-r--r--mojo/public/cpp/environment/lib/default_logger.cc47
-rw-r--r--mojo/public/cpp/environment/tests/logger_unittest.cc29
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