OLD | NEW |
1 // Copyright 2016 The Chromium Authors. All rights reserved. | 1 // Copyright 2016 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 "blimp/common/logging.h" | 5 #include "blimp/common/logging.h" |
6 | 6 |
7 #include <iostream> | 7 #include <iostream> |
8 #include <string> | 8 #include <string> |
9 #include <vector> | 9 #include <vector> |
10 | 10 |
(...skipping 151 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
162 default: | 162 default: |
163 break; | 163 break; |
164 } | 164 } |
165 } | 165 } |
166 }; | 166 }; |
167 | 167 |
168 // Logs fields from PROTOCOL_CONTROL messages. | 168 // Logs fields from PROTOCOL_CONTROL messages. |
169 class ProtocolControlLogExtractor : public LogExtractor { | 169 class ProtocolControlLogExtractor : public LogExtractor { |
170 void ExtractFields(const BlimpMessage& message, | 170 void ExtractFields(const BlimpMessage& message, |
171 LogFields* output) const override { | 171 LogFields* output) const override { |
172 switch (message.protocol_control().type()) { | 172 switch (message.protocol_control().connection_message_case()) { |
173 case ProtocolControlMessage::START_CONNECTION: | 173 case ProtocolControlMessage::kStartConnection: |
174 AddField("subtype", "START_CONNECTION", output); | 174 AddField("subtype", "START_CONNECTION", output); |
175 AddField("client_token", | 175 AddField("client_token", |
176 message.protocol_control().start_connection().client_token(), | 176 message.protocol_control().start_connection().client_token(), |
177 output); | 177 output); |
178 AddField( | 178 AddField( |
179 "protocol_version", | 179 "protocol_version", |
180 message.protocol_control().start_connection().protocol_version(), | 180 message.protocol_control().start_connection().protocol_version(), |
181 output); | 181 output); |
182 break; | 182 break; |
183 case ProtocolControlMessage::CHECKPOINT_ACK: | 183 case ProtocolControlMessage::kCheckpointAck: |
184 AddField("subtype", "CHECKPOINT_ACK", output); | 184 AddField("subtype", "CHECKPOINT_ACK", output); |
185 AddField("checkpoint_id", | 185 AddField("checkpoint_id", |
186 message.protocol_control().checkpoint_ack().checkpoint_id(), | 186 message.protocol_control().checkpoint_ack().checkpoint_id(), |
187 output); | 187 output); |
188 break; | 188 break; |
189 default: | 189 default: |
190 break; | 190 break; |
191 } | 191 } |
192 } | 192 } |
193 }; | 193 }; |
(...skipping 30 matching lines...) Expand all Loading... |
224 output); | 224 output); |
225 AddField("client_os_info", engine_settings.client_os_info(), output); | 225 AddField("client_os_info", engine_settings.client_os_info(), output); |
226 } | 226 } |
227 } | 227 } |
228 }; | 228 }; |
229 | 229 |
230 // Logs fields from TAB_CONTROL messages. | 230 // Logs fields from TAB_CONTROL messages. |
231 class TabControlLogExtractor : public LogExtractor { | 231 class TabControlLogExtractor : public LogExtractor { |
232 void ExtractFields(const BlimpMessage& message, | 232 void ExtractFields(const BlimpMessage& message, |
233 LogFields* output) const override { | 233 LogFields* output) const override { |
234 switch (message.tab_control().type()) { | 234 switch (message.tab_control().tab_control_case()) { |
235 case TabControlMessage::CREATE_TAB: | 235 case TabControlMessage::kCreateTab: |
236 AddField("subtype", "CREATE_TAB", output); | 236 AddField("subtype", "CREATE_TAB", output); |
237 break; | 237 break; |
238 case TabControlMessage::CLOSE_TAB: | 238 case TabControlMessage::kCloseTab: |
239 AddField("subtype", "CLOSE_TAB", output); | 239 AddField("subtype", "CLOSE_TAB", output); |
240 break; | 240 break; |
241 case TabControlMessage::SIZE: | 241 case TabControlMessage::kSize: |
242 AddField("subtype", "SIZE", output); | 242 AddField("subtype", "SIZE", output); |
243 AddField("size", message.tab_control().size(), output); | 243 AddField("size", message.tab_control().size(), output); |
244 break; | 244 break; |
245 default: // unknown | 245 default: // unknown |
246 break; | 246 break; |
247 } | 247 } |
248 } | 248 } |
249 }; | 249 }; |
250 | 250 |
251 // No fields are extracted from |message|. | 251 // No fields are extracted from |message|. |
252 class NullLogExtractor : public LogExtractor { | 252 class NullLogExtractor : public LogExtractor { |
253 void ExtractFields(const BlimpMessage& message, | 253 void ExtractFields(const BlimpMessage& message, |
254 LogFields* output) const override {} | 254 LogFields* output) const override {} |
255 }; | 255 }; |
256 | 256 |
257 } // namespace | 257 } // namespace |
258 | 258 |
259 BlimpMessageLogger::BlimpMessageLogger() { | 259 BlimpMessageLogger::BlimpMessageLogger() { |
260 AddHandler("COMPOSITOR", BlimpMessage::COMPOSITOR, | 260 AddHandler("COMPOSITOR", BlimpMessage::kCompositor, |
261 base::WrapUnique(new CompositorLogExtractor)); | 261 base::WrapUnique(new CompositorLogExtractor)); |
262 AddHandler("INPUT", BlimpMessage::INPUT, | 262 AddHandler("INPUT", BlimpMessage::kInput, |
263 base::WrapUnique(new InputLogExtractor)); | 263 base::WrapUnique(new InputLogExtractor)); |
264 AddHandler("NAVIGATION", BlimpMessage::NAVIGATION, | 264 AddHandler("NAVIGATION", BlimpMessage::kNavigation, |
265 base::WrapUnique(new NavigationLogExtractor)); | 265 base::WrapUnique(new NavigationLogExtractor)); |
266 AddHandler("PROTOCOL_CONTROL", BlimpMessage::PROTOCOL_CONTROL, | 266 AddHandler("PROTOCOL_CONTROL", BlimpMessage::kProtocolControl, |
267 base::WrapUnique(new ProtocolControlLogExtractor)); | 267 base::WrapUnique(new ProtocolControlLogExtractor)); |
268 AddHandler("RENDER_WIDGET", BlimpMessage::RENDER_WIDGET, | 268 AddHandler("RENDER_WIDGET", BlimpMessage::kRenderWidget, |
269 base::WrapUnique(new RenderWidgetLogExtractor)); | 269 base::WrapUnique(new RenderWidgetLogExtractor)); |
270 AddHandler("SETTINGS", BlimpMessage::SETTINGS, | 270 AddHandler("SETTINGS", BlimpMessage::kSettings, |
271 base::WrapUnique(new SettingsLogExtractor)); | 271 base::WrapUnique(new SettingsLogExtractor)); |
272 AddHandler("TAB_CONTROL", BlimpMessage::TAB_CONTROL, | 272 AddHandler("TAB_CONTROL", BlimpMessage::kTabControl, |
273 base::WrapUnique(new TabControlLogExtractor)); | 273 base::WrapUnique(new TabControlLogExtractor)); |
274 } | 274 } |
275 | 275 |
276 BlimpMessageLogger::~BlimpMessageLogger() {} | 276 BlimpMessageLogger::~BlimpMessageLogger() {} |
277 | 277 |
278 void BlimpMessageLogger::AddHandler(const std::string& type_name, | 278 void BlimpMessageLogger::AddHandler(const std::string& feature_name, |
279 BlimpMessage::Type type, | 279 BlimpMessage::FeatureCase feature_case, |
280 std::unique_ptr<LogExtractor> extractor) { | 280 std::unique_ptr<LogExtractor> extractor) { |
281 DCHECK(extractors_.find(type) == extractors_.end()); | 281 DCHECK(extractors_.find(feature_case) == extractors_.end()); |
282 DCHECK(!type_name.empty()); | 282 DCHECK(!feature_name.empty()); |
283 extractors_[type] = make_pair(type_name, std::move(extractor)); | 283 extractors_[feature_case] = make_pair(feature_name, std::move(extractor)); |
284 } | 284 } |
285 | 285 |
286 void BlimpMessageLogger::LogMessageToStream(const BlimpMessage& message, | 286 void BlimpMessageLogger::LogMessageToStream(const BlimpMessage& message, |
287 std::ostream* out) const { | 287 std::ostream* out) const { |
288 LogFields fields; | 288 LogFields fields; |
289 | 289 |
290 auto extractor = extractors_.find(message.type()); | 290 auto extractor = extractors_.find(message.feature_case()); |
291 if (extractor != extractors_.end()) { | 291 if (extractor != extractors_.end()) { |
292 // An extractor is registered for |message|. | 292 // An extractor is registered for |message|. |
293 // Add the human-readable name of |message.type|. | 293 // Add the human-readable name of |message.type|. |
294 fields.push_back(make_pair("type", extractor->second.first)); | 294 fields.push_back(make_pair("type", extractor->second.first)); |
295 extractor->second.second->ExtractFields(message, &fields); | 295 extractor->second.second->ExtractFields(message, &fields); |
296 } else { | 296 } else { |
297 // Don't know the human-readable name of |message.type|. | 297 // Don't know the human-readable name of |message.type|. |
298 // Just represent it using its numeric form instead. | 298 // Just represent it using its numeric form instead. |
299 AddField("type", message.type(), &fields); | 299 AddField("type", message.feature_case(), &fields); |
300 } | 300 } |
301 | 301 |
302 // Append "target_tab_id" (if present) and "byte_size" to the field set. | 302 // Append "target_tab_id" (if present) and "byte_size" to the field set. |
303 if (message.has_target_tab_id()) { | 303 if (message.has_target_tab_id()) { |
304 AddField("target_tab_id", message.target_tab_id(), &fields); | 304 AddField("target_tab_id", message.target_tab_id(), &fields); |
305 } | 305 } |
306 AddField("byte_size", message.ByteSize(), &fields); | 306 AddField("byte_size", message.ByteSize(), &fields); |
307 | 307 |
308 // Format message using the syntax: | 308 // Format message using the syntax: |
309 // <BlimpMessage field1=value1 field2="value 2"> | 309 // <BlimpMessage field1=value1 field2="value 2"> |
310 *out << "<BlimpMessage "; | 310 *out << "<BlimpMessage "; |
311 for (size_t i = 0; i < fields.size(); ++i) { | 311 for (size_t i = 0; i < fields.size(); ++i) { |
312 *out << fields[i].first << "=" << fields[i].second | 312 *out << fields[i].first << "=" << fields[i].second |
313 << (i != fields.size() - 1 ? " " : ""); | 313 << (i != fields.size() - 1 ? " " : ""); |
314 } | 314 } |
315 *out << ">"; | 315 *out << ">"; |
316 } | 316 } |
317 | 317 |
318 std::ostream& operator<<(std::ostream& out, const BlimpMessage& message) { | 318 std::ostream& operator<<(std::ostream& out, const BlimpMessage& message) { |
319 g_logger.Get().LogMessageToStream(message, &out); | 319 g_logger.Get().LogMessageToStream(message, &out); |
320 return out; | 320 return out; |
321 } | 321 } |
322 | 322 |
323 } // namespace blimp | 323 } // namespace blimp |
OLD | NEW |