Chromium Code Reviews| Index: blimp/common/logging.cc |
| diff --git a/blimp/common/logging.cc b/blimp/common/logging.cc |
| index 174c2b4554a1111de459d0fd429f0a662d1d9f7d..b7c861cc565ce93df481ffff04aab2922666428d 100644 |
| --- a/blimp/common/logging.cc |
| +++ b/blimp/common/logging.cc |
| @@ -21,8 +21,7 @@ |
| namespace blimp { |
| namespace { |
| -static base::LazyInstance<BlimpMessageLogger> g_logger = |
| - LAZY_INSTANCE_INITIALIZER; |
| +typedef std::vector<std::pair<std::string, std::string>> LogFields; |
| // The AddField() suite of functions are used to convert KV pairs with |
| // arbitrarily typed values into string/string KV pairs for logging. |
| @@ -69,18 +68,18 @@ void AddField(const std::string& key, const T& value, LogFields* output) { |
| // fields from BlimpMessages. |
| // Logs fields from COMPOSITOR messages. |
| -class CompositorLogExtractor : public LogExtractor { |
| - void ExtractFields(const BlimpMessage& message, |
| - LogFields* output) const override { |
| +class CompositorLogExtractor { |
| + public: |
| + static void ExtractFields(const BlimpMessage& message, LogFields* output) { |
|
Wez
2016/06/01 21:35:15
Looks like this, and the other static member metho
Kevin M
2016/06/02 18:05:00
Done.
|
| AddField("render_widget_id", message.compositor().render_widget_id(), |
| output); |
| } |
| }; |
| // Logs fields from INPUT messages. |
| -class InputLogExtractor : public LogExtractor { |
| - void ExtractFields(const BlimpMessage& message, |
| - LogFields* output) const override { |
| +class InputLogExtractor { |
| + public: |
| + static void ExtractFields(const BlimpMessage& message, LogFields* output) { |
| AddField("render_widget_id", message.input().render_widget_id(), output); |
| AddField("timestamp_seconds", message.input().timestamp_seconds(), output); |
| switch (message.input().type()) { |
| @@ -121,9 +120,9 @@ class InputLogExtractor : public LogExtractor { |
| }; |
| // Logs fields from NAVIGATION messages. |
| -class NavigationLogExtractor : public LogExtractor { |
| - void ExtractFields(const BlimpMessage& message, |
| - LogFields* output) const override { |
| +class NavigationLogExtractor { |
| + public: |
| + static void ExtractFields(const BlimpMessage& message, LogFields* output) { |
| switch (message.navigation().type()) { |
| case NavigationMessage::NAVIGATION_STATE_CHANGED: |
| AddField("subtype", "NAVIGATION_STATE_CHANGED", output); |
| @@ -168,9 +167,9 @@ class NavigationLogExtractor : public LogExtractor { |
| }; |
| // Logs fields from PROTOCOL_CONTROL messages. |
| -class ProtocolControlLogExtractor : public LogExtractor { |
| - void ExtractFields(const BlimpMessage& message, |
| - LogFields* output) const override { |
| +class ProtocolControlLogExtractor { |
| + public: |
| + static void ExtractFields(const BlimpMessage& message, LogFields* output) { |
| switch (message.protocol_control().connection_message_case()) { |
| case ProtocolControlMessage::kStartConnection: |
| AddField("subtype", "START_CONNECTION", output); |
| @@ -195,9 +194,9 @@ class ProtocolControlLogExtractor : public LogExtractor { |
| }; |
| // Logs fields from RENDER_WIDGET messages. |
| -class RenderWidgetLogExtractor : public LogExtractor { |
| - void ExtractFields(const BlimpMessage& message, |
| - LogFields* output) const override { |
| +class RenderWidgetLogExtractor { |
| + public: |
| + static void ExtractFields(const BlimpMessage& message, LogFields* output) { |
| switch (message.render_widget().type()) { |
| case RenderWidgetMessage::INITIALIZE: |
| AddField("subtype", "INITIALIZE", output); |
| @@ -215,9 +214,9 @@ class RenderWidgetLogExtractor : public LogExtractor { |
| }; |
| // Logs fields from SETTINGS messages. |
| -class SettingsLogExtractor : public LogExtractor { |
| - void ExtractFields(const BlimpMessage& message, |
| - LogFields* output) const override { |
| +class SettingsLogExtractor { |
| + public: |
| + static void ExtractFields(const BlimpMessage& message, LogFields* output) { |
| if (message.settings().has_engine_settings()) { |
| const EngineSettingsMessage& engine_settings = |
| message.settings().engine_settings(); |
| @@ -230,9 +229,9 @@ class SettingsLogExtractor : public LogExtractor { |
| }; |
| // Logs fields from TAB_CONTROL messages. |
| -class TabControlLogExtractor : public LogExtractor { |
| - void ExtractFields(const BlimpMessage& message, |
| - LogFields* output) const override { |
| +class TabControlLogExtractor { |
| + public: |
| + static void ExtractFields(const BlimpMessage& message, LogFields* output) { |
| switch (message.tab_control().tab_control_case()) { |
| case TabControlMessage::kCreateTab: |
| AddField("subtype", "CREATE_TAB", output); |
| @@ -251,9 +250,9 @@ class TabControlLogExtractor : public LogExtractor { |
| }; |
| // Logs fields from BLOB_CHANNEL messages. |
| -class BlobChannelLogExtractor : public LogExtractor { |
| - void ExtractFields(const BlimpMessage& message, |
| - LogFields* output) const override { |
| +class BlobChannelLogExtractor { |
| + public: |
| + static void ExtractFields(const BlimpMessage& message, LogFields* output) { |
| switch (message.blob_channel().type_case()) { |
| case BlobChannelMessage::TypeCase::kTransferBlob: |
| AddField("subtype", "TRANSFER_BLOB", output); |
| @@ -272,57 +271,48 @@ class BlobChannelLogExtractor : public LogExtractor { |
| } |
| }; |
| -// No fields are extracted from |message|. |
| -class NullLogExtractor : public LogExtractor { |
| - void ExtractFields(const BlimpMessage& message, |
| - LogFields* output) const override {} |
| -}; |
| - |
| -} // namespace |
| - |
| -BlimpMessageLogger::BlimpMessageLogger() { |
| - AddHandler("COMPOSITOR", BlimpMessage::kCompositor, |
| - base::WrapUnique(new CompositorLogExtractor)); |
| - AddHandler("INPUT", BlimpMessage::kInput, |
| - base::WrapUnique(new InputLogExtractor)); |
| - AddHandler("NAVIGATION", BlimpMessage::kNavigation, |
| - base::WrapUnique(new NavigationLogExtractor)); |
| - AddHandler("PROTOCOL_CONTROL", BlimpMessage::kProtocolControl, |
| - base::WrapUnique(new ProtocolControlLogExtractor)); |
| - AddHandler("RENDER_WIDGET", BlimpMessage::kRenderWidget, |
| - base::WrapUnique(new RenderWidgetLogExtractor)); |
| - AddHandler("SETTINGS", BlimpMessage::kSettings, |
| - base::WrapUnique(new SettingsLogExtractor)); |
| - AddHandler("TAB_CONTROL", BlimpMessage::kTabControl, |
| - base::WrapUnique(new TabControlLogExtractor)); |
| - AddHandler("BLOB_CHANNEL", BlimpMessage::kBlobChannel, |
| - base::WrapUnique(new BlobChannelLogExtractor)); |
| -} |
| - |
| -BlimpMessageLogger::~BlimpMessageLogger() {} |
| - |
| -void BlimpMessageLogger::AddHandler(const std::string& feature_name, |
| - BlimpMessage::FeatureCase feature_case, |
| - std::unique_ptr<LogExtractor> extractor) { |
| - DCHECK(extractors_.find(feature_case) == extractors_.end()); |
| - DCHECK(!feature_name.empty()); |
| - extractors_[feature_case] = make_pair(feature_name, std::move(extractor)); |
| -} |
| - |
| -void BlimpMessageLogger::LogMessageToStream(const BlimpMessage& message, |
| - std::ostream* out) const { |
| +void LogMessageToStream(const BlimpMessage& message, std::ostream* out) { |
| LogFields fields; |
| - auto extractor = extractors_.find(message.feature_case()); |
| - if (extractor != extractors_.end()) { |
| - // An extractor is registered for |message|. |
| - // Add the human-readable name of |message.type|. |
| - fields.push_back(make_pair("type", extractor->second.first)); |
| - extractor->second.second->ExtractFields(message, &fields); |
| - } else { |
| - // Don't know the human-readable name of |message.type|. |
| - // Just represent it using its numeric form instead. |
| - AddField("type", message.feature_case(), &fields); |
| + switch (message.feature_case()) { |
| + case BlimpMessage::kCompositor: |
| + fields.push_back(std::make_pair("type", "COMPOSITOR")); |
| + CompositorLogExtractor::ExtractFields(message, &fields); |
| + break; |
| + case BlimpMessage::kInput: |
| + fields.push_back(std::make_pair("type", "INPUT")); |
| + InputLogExtractor::ExtractFields(message, &fields); |
| + break; |
| + case BlimpMessage::kNavigation: |
| + fields.push_back(std::make_pair("type", "NAVIGATION")); |
| + NavigationLogExtractor::ExtractFields(message, &fields); |
| + break; |
| + case BlimpMessage::kProtocolControl: |
| + fields.push_back(std::make_pair("type", "PROTOCOL_CONTROL")); |
| + ProtocolControlLogExtractor::ExtractFields(message, &fields); |
| + break; |
| + case BlimpMessage::kRenderWidget: |
| + fields.push_back(std::make_pair("type", "RENDER_WIDGET")); |
| + RenderWidgetLogExtractor::ExtractFields(message, &fields); |
| + break; |
| + case BlimpMessage::kSettings: |
| + fields.push_back(std::make_pair("type", "SETTINGS")); |
| + SettingsLogExtractor::ExtractFields(message, &fields); |
| + break; |
| + case BlimpMessage::kTabControl: |
| + fields.push_back(std::make_pair("type", "TAB_CONTROL")); |
| + TabControlLogExtractor::ExtractFields(message, &fields); |
| + break; |
| + case BlimpMessage::kBlobChannel: |
| + fields.push_back(std::make_pair("type", "BLOB_CHANNEL")); |
| + BlobChannelLogExtractor::ExtractFields(message, &fields); |
| + break; |
| + case BlimpMessage::kIme: |
| + fields.push_back(std::make_pair("type", "IME")); |
| + break; |
| + case BlimpMessage::FEATURE_NOT_SET: |
| + fields.push_back(std::make_pair("type", "<UNKNOWN>")); |
| + break; |
| } |
| // Append "target_tab_id" (if present) and "byte_size" to the field set. |
| @@ -341,8 +331,10 @@ void BlimpMessageLogger::LogMessageToStream(const BlimpMessage& message, |
| *out << ">"; |
| } |
| +} // namespace |
| + |
| std::ostream& operator<<(std::ostream& out, const BlimpMessage& message) { |
| - g_logger.Get().LogMessageToStream(message, &out); |
| + LogMessageToStream(message, &out); |
| return out; |
| } |