Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(46)

Side by Side Diff: blimp/common/logging.cc

Issue 1912983002: Add pretty-printing for SETTINGS messages. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « no previous file | blimp/common/logging_unittest.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 48 matching lines...) Expand 10 before | Expand all | Expand 10 after
59 // Conversion function for all other types. 59 // Conversion function for all other types.
60 // Uses std::to_string() to serialize |value|. 60 // Uses std::to_string() to serialize |value|.
61 template <typename T> 61 template <typename T>
62 void AddField(const std::string& key, const T& value, LogFields* output) { 62 void AddField(const std::string& key, const T& value, LogFields* output) {
63 output->push_back(std::make_pair(key, std::to_string(value))); 63 output->push_back(std::make_pair(key, std::to_string(value)));
64 } 64 }
65 65
66 // The following LogExtractor subclasses contain logic for extracting loggable 66 // The following LogExtractor subclasses contain logic for extracting loggable
67 // fields from BlimpMessages. 67 // fields from BlimpMessages.
68 68
69 // Logs fields from TAB_CONTROL messages. 69 // Logs fields from COMPOSITOR messages.
70 class TabControlLogExtractor : public LogExtractor { 70 class CompositorLogExtractor : public LogExtractor {
71 void ExtractFields(const BlimpMessage& message, 71 void ExtractFields(const BlimpMessage& message,
72 LogFields* output) const override { 72 LogFields* output) const override {
73 switch (message.tab_control().type()) { 73 AddField("render_widget_id", message.compositor().render_widget_id(),
74 case TabControlMessage::CREATE_TAB: 74 output);
75 AddField("subtype", "CREATE_TAB", output); 75 }
76 };
77
78 // Logs fields from INPUT messages.
79 class InputLogExtractor : public LogExtractor {
80 void ExtractFields(const BlimpMessage& message,
81 LogFields* output) const override {
82 AddField("render_widget_id", message.input().render_widget_id(), output);
83 AddField("timestamp_seconds", message.input().timestamp_seconds(), output);
84 switch (message.input().type()) {
85 case InputMessage::Type_GestureScrollBegin:
86 AddField("subtype", "GestureScrollBegin", output);
76 break; 87 break;
77 case TabControlMessage::CLOSE_TAB: 88 case InputMessage::Type_GestureScrollEnd:
78 AddField("subtype", "CLOSE_TAB", output); 89 AddField("subtype", "GestureScrollEnd", output);
79 break; 90 break;
80 case TabControlMessage::SIZE: 91 case InputMessage::Type_GestureScrollUpdate:
81 AddField("subtype", "SIZE", output); 92 AddField("subtype", "GestureScrollUpdate", output);
82 AddField("size", message.tab_control().size(), output); 93 break;
94 case InputMessage::Type_GestureFlingStart:
95 AddField("subtype", "GestureFlingStart", output);
96 break;
97 case InputMessage::Type_GestureFlingCancel:
98 AddField("subtype", "GestureFlingCancel", output);
99 AddField("prevent_boosting",
100 message.input().gesture_fling_cancel().prevent_boosting(),
101 output);
102 break;
103 case InputMessage::Type_GestureTap:
104 AddField("subtype", "GestureTap", output);
105 break;
106 case InputMessage::Type_GesturePinchBegin:
107 AddField("subtype", "GesturePinchBegin", output);
108 break;
109 case InputMessage::Type_GesturePinchEnd:
110 AddField("subtype", "GesturePinchEnd", output);
111 break;
112 case InputMessage::Type_GesturePinchUpdate:
113 AddField("subtype", "GesturePinchUpdate", output);
83 break; 114 break;
84 default: // unknown 115 default: // unknown
85 break; 116 break;
86 } 117 }
87 } 118 }
88 }; 119 };
89 120
90 // Logs fields from NAVIGATION messages. 121 // Logs fields from NAVIGATION messages.
91 class NavigationLogExtractor : public LogExtractor { 122 class NavigationLogExtractor : public LogExtractor {
92 void ExtractFields(const BlimpMessage& message, 123 void ExtractFields(const BlimpMessage& message,
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
127 break; 158 break;
128 case NavigationMessage::RELOAD: 159 case NavigationMessage::RELOAD:
129 AddField("subtype", "RELOAD", output); 160 AddField("subtype", "RELOAD", output);
130 break; 161 break;
131 default: 162 default:
132 break; 163 break;
133 } 164 }
134 } 165 }
135 }; 166 };
136 167
137 // Logs fields from COMPOSITOR messages. 168 // Logs fields from PROTOCOL_CONTROL messages.
138 class CompositorLogExtractor : public LogExtractor { 169 class ProtocolControlLogExtractor : public LogExtractor {
139 void ExtractFields(const BlimpMessage& message, 170 void ExtractFields(const BlimpMessage& message,
140 LogFields* output) const override { 171 LogFields* output) const override {
141 AddField("render_widget_id", message.compositor().render_widget_id(), 172 switch (message.protocol_control().type()) {
142 output); 173 case ProtocolControlMessage::START_CONNECTION:
143 } 174 AddField("subtype", "START_CONNECTION", output);
144 }; 175 AddField("client_token",
145 176 message.protocol_control().start_connection().client_token(),
146 // Logs fields from INPUT messages. 177 output);
147 class InputLogExtractor : public LogExtractor { 178 AddField(
148 void ExtractFields(const BlimpMessage& message, 179 "protocol_version",
149 LogFields* output) const override { 180 message.protocol_control().start_connection().protocol_version(),
150 AddField("render_widget_id", message.input().render_widget_id(), output); 181 output);
151 AddField("timestamp_seconds", message.input().timestamp_seconds(), output);
152 switch (message.input().type()) {
153 case InputMessage::Type_GestureScrollBegin:
154 AddField("subtype", "GestureScrollBegin", output);
155 break; 182 break;
156 case InputMessage::Type_GestureScrollEnd: 183 case ProtocolControlMessage::CHECKPOINT_ACK:
157 AddField("subtype", "GestureScrollEnd", output); 184 AddField("subtype", "CHECKPOINT_ACK", output);
158 break; 185 AddField("checkpoint_id",
159 case InputMessage::Type_GestureScrollUpdate: 186 message.protocol_control().checkpoint_ack().checkpoint_id(),
160 AddField("subtype", "GestureScrollUpdate", output);
161 break;
162 case InputMessage::Type_GestureFlingStart:
163 AddField("subtype", "GestureFlingStart", output);
164 break;
165 case InputMessage::Type_GestureFlingCancel:
166 AddField("subtype", "GestureFlingCancel", output);
167 AddField("prevent_boosting",
168 message.input().gesture_fling_cancel().prevent_boosting(),
169 output); 187 output);
170 break; 188 break;
171 case InputMessage::Type_GestureTap: 189 default:
172 AddField("subtype", "GestureTap", output);
173 break;
174 case InputMessage::Type_GesturePinchBegin:
175 AddField("subtype", "GesturePinchBegin", output);
176 break;
177 case InputMessage::Type_GesturePinchEnd:
178 AddField("subtype", "GesturePinchEnd", output);
179 break;
180 case InputMessage::Type_GesturePinchUpdate:
181 AddField("subtype", "GesturePinchUpdate", output);
182 break;
183 default: // unknown
184 break; 190 break;
185 } 191 }
186 } 192 }
187 }; 193 };
188 194
189 // Logs fields from RENDER_WIDGET messages. 195 // Logs fields from RENDER_WIDGET messages.
190 class RenderWidgetLogExtractor : public LogExtractor { 196 class RenderWidgetLogExtractor : public LogExtractor {
191 void ExtractFields(const BlimpMessage& message, 197 void ExtractFields(const BlimpMessage& message,
192 LogFields* output) const override { 198 LogFields* output) const override {
193 switch (message.render_widget().type()) { 199 switch (message.render_widget().type()) {
194 case RenderWidgetMessage::INITIALIZE: 200 case RenderWidgetMessage::INITIALIZE:
195 AddField("subtype", "INITIALIZE", output); 201 AddField("subtype", "INITIALIZE", output);
196 break; 202 break;
197 case RenderWidgetMessage::CREATED: 203 case RenderWidgetMessage::CREATED:
198 AddField("subtype", "CREATED", output); 204 AddField("subtype", "CREATED", output);
199 break; 205 break;
200 case RenderWidgetMessage::DELETED: 206 case RenderWidgetMessage::DELETED:
201 AddField("subtype", "DELETED", output); 207 AddField("subtype", "DELETED", output);
202 break; 208 break;
203 } 209 }
204 AddField("render_widget_id", message.render_widget().render_widget_id(), 210 AddField("render_widget_id", message.render_widget().render_widget_id(),
205 output); 211 output);
206 } 212 }
207 }; 213 };
208 214
209 // Logs fields from PROTOCOL_CONTROL messages. 215 // Logs fields from SETTINGS messages.
210 class ProtocolControlLogExtractor : public LogExtractor { 216 class SettingsLogExtractor : public LogExtractor {
211 void ExtractFields(const BlimpMessage& message, 217 void ExtractFields(const BlimpMessage& message,
212 LogFields* output) const override { 218 LogFields* output) const override {
213 switch (message.protocol_control().type()) { 219 if (message.settings().has_engine_settings()) {
214 case ProtocolControlMessage::START_CONNECTION: 220 const EngineSettingsMessage& engine_settings =
215 AddField("subtype", "START_CONNECTION", output); 221 message.settings().engine_settings();
216 AddField("client_token", 222 AddField("subtype", "ENGINE_SETTINGS", output);
217 message.protocol_control().start_connection().client_token(), 223 AddField("record_whole_document", engine_settings.record_whole_document(),
218 output); 224 output);
219 AddField( 225 AddField("client_os_info", engine_settings.client_os_info(), output);
220 "protocol_version", 226 }
221 message.protocol_control().start_connection().protocol_version(), 227 }
222 output); 228 };
229
230 // Logs fields from TAB_CONTROL messages.
231 class TabControlLogExtractor : public LogExtractor {
232 void ExtractFields(const BlimpMessage& message,
233 LogFields* output) const override {
234 switch (message.tab_control().type()) {
235 case TabControlMessage::CREATE_TAB:
236 AddField("subtype", "CREATE_TAB", output);
223 break; 237 break;
224 case ProtocolControlMessage::CHECKPOINT_ACK: 238 case TabControlMessage::CLOSE_TAB:
225 AddField("subtype", "CHECKPOINT_ACK", output); 239 AddField("subtype", "CLOSE_TAB", output);
226 AddField("checkpoint_id",
227 message.protocol_control().checkpoint_ack().checkpoint_id(),
228 output);
229 break; 240 break;
230 default: 241 case TabControlMessage::SIZE:
242 AddField("subtype", "SIZE", output);
243 AddField("size", message.tab_control().size(), output);
244 break;
245 default: // unknown
231 break; 246 break;
232 } 247 }
233 } 248 }
234 }; 249 };
235 250
236 // No fields are extracted from |message|. 251 // No fields are extracted from |message|.
237 class NullLogExtractor : public LogExtractor { 252 class NullLogExtractor : public LogExtractor {
238 void ExtractFields(const BlimpMessage& message, 253 void ExtractFields(const BlimpMessage& message,
239 LogFields* output) const override {} 254 LogFields* output) const override {}
240 }; 255 };
241 256
242 } // namespace 257 } // namespace
243 258
244 BlimpMessageLogger::BlimpMessageLogger() { 259 BlimpMessageLogger::BlimpMessageLogger() {
245 AddHandler("COMPOSITOR", BlimpMessage::COMPOSITOR, 260 AddHandler("COMPOSITOR", BlimpMessage::COMPOSITOR,
246 base::WrapUnique(new CompositorLogExtractor)); 261 base::WrapUnique(new CompositorLogExtractor));
247 AddHandler("INPUT", BlimpMessage::INPUT, 262 AddHandler("INPUT", BlimpMessage::INPUT,
248 base::WrapUnique(new InputLogExtractor)); 263 base::WrapUnique(new InputLogExtractor));
249 AddHandler("NAVIGATION", BlimpMessage::NAVIGATION, 264 AddHandler("NAVIGATION", BlimpMessage::NAVIGATION,
250 base::WrapUnique(new NavigationLogExtractor)); 265 base::WrapUnique(new NavigationLogExtractor));
251 AddHandler("PROTOCOL_CONTROL", BlimpMessage::PROTOCOL_CONTROL, 266 AddHandler("PROTOCOL_CONTROL", BlimpMessage::PROTOCOL_CONTROL,
252 base::WrapUnique(new ProtocolControlLogExtractor)); 267 base::WrapUnique(new ProtocolControlLogExtractor));
253 AddHandler("RENDER_WIDGET", BlimpMessage::RENDER_WIDGET, 268 AddHandler("RENDER_WIDGET", BlimpMessage::RENDER_WIDGET,
254 base::WrapUnique(new RenderWidgetLogExtractor)); 269 base::WrapUnique(new RenderWidgetLogExtractor));
270 AddHandler("SETTINGS", BlimpMessage::SETTINGS,
271 base::WrapUnique(new SettingsLogExtractor));
255 AddHandler("TAB_CONTROL", BlimpMessage::TAB_CONTROL, 272 AddHandler("TAB_CONTROL", BlimpMessage::TAB_CONTROL,
256 base::WrapUnique(new TabControlLogExtractor)); 273 base::WrapUnique(new TabControlLogExtractor));
257 } 274 }
258 275
259 BlimpMessageLogger::~BlimpMessageLogger() {} 276 BlimpMessageLogger::~BlimpMessageLogger() {}
260 277
261 void BlimpMessageLogger::AddHandler(const std::string& type_name, 278 void BlimpMessageLogger::AddHandler(const std::string& type_name,
262 BlimpMessage::Type type, 279 BlimpMessage::Type type,
263 std::unique_ptr<LogExtractor> extractor) { 280 std::unique_ptr<LogExtractor> extractor) {
264 DCHECK(extractors_.find(type) == extractors_.end()); 281 DCHECK(extractors_.find(type) == extractors_.end());
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
297 } 314 }
298 *out << ">"; 315 *out << ">";
299 } 316 }
300 317
301 std::ostream& operator<<(std::ostream& out, const BlimpMessage& message) { 318 std::ostream& operator<<(std::ostream& out, const BlimpMessage& message) {
302 g_logger.Get().LogMessageToStream(message, &out); 319 g_logger.Get().LogMessageToStream(message, &out);
303 return out; 320 return out;
304 } 321 }
305 322
306 } // namespace blimp 323 } // namespace blimp
OLDNEW
« no previous file with comments | « no previous file | blimp/common/logging_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698