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

Side by Side Diff: content/browser/tracing/etw_tracing_agent_win.cc

Issue 2911033002: Remove raw base::DictionaryValue::Set (Closed)
Patch Set: Proper Windows Fix Created 3 years, 6 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
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 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 "content/browser/tracing/etw_tracing_agent_win.h" 5 #include "content/browser/tracing/etw_tracing_agent_win.h"
6 6
7 #include <stdint.h> 7 #include <stdint.h>
8 8
9 #include <utility> 9 #include <utility>
10 10
(...skipping 150 matching lines...) Expand 10 before | Expand all | Expand 10 after
161 // Sync the clocks. 161 // Sync the clocks.
162 base::Time walltime = base::Time::NowFromSystemTime(); 162 base::Time walltime = base::Time::NowFromSystemTime();
163 base::TimeTicks now = base::TimeTicks::Now(); 163 base::TimeTicks now = base::TimeTicks::Now();
164 164
165 LARGE_INTEGER walltime_in_us; 165 LARGE_INTEGER walltime_in_us;
166 walltime_in_us.QuadPart = walltime.ToInternalValue(); 166 walltime_in_us.QuadPart = walltime.ToInternalValue();
167 LARGE_INTEGER now_in_us; 167 LARGE_INTEGER now_in_us;
168 now_in_us.QuadPart = now.ToInternalValue(); 168 now_in_us.QuadPart = now.ToInternalValue();
169 169
170 // Add fields to the event. 170 // Add fields to the event.
171 std::unique_ptr<base::DictionaryValue> value(new base::DictionaryValue()); 171 auto value = base::MakeUnique<base::DictionaryValue>();
172 value->Set("guid", new base::Value("ClockSync")); 172 value->SetString("guid", "ClockSync");
173 value->Set("walltime", 173 value->SetString("walltime",
174 new base::Value(base::StringPrintf( 174 base::StringPrintf("%08X%08X", walltime_in_us.HighPart,
175 "%08X%08X", walltime_in_us.HighPart, walltime_in_us.LowPart))); 175 walltime_in_us.LowPart));
176 value->Set("tick", new base::Value(base::StringPrintf( 176 value->SetString("tick", base::StringPrintf("%08X%08X", now_in_us.HighPart,
177 "%08X%08X", now_in_us.HighPart, now_in_us.LowPart))); 177 now_in_us.LowPart));
178 178
179 // Append it to the events buffer. 179 // Append it to the events buffer.
180 events_->Append(std::move(value)); 180 events_->Append(std::move(value));
181 } 181 }
182 182
183 void EtwTracingAgent::AppendEventToBuffer(EVENT_TRACE* event) { 183 void EtwTracingAgent::AppendEventToBuffer(EVENT_TRACE* event) {
184 using base::Value; 184 auto value = base::MakeUnique<base::DictionaryValue>();
185
186 std::unique_ptr<base::DictionaryValue> value(new base::DictionaryValue());
187 185
188 // Add header fields to the event. 186 // Add header fields to the event.
189 LARGE_INTEGER ts_us; 187 LARGE_INTEGER ts_us;
190 ts_us.QuadPart = event->Header.TimeStamp.QuadPart / 10; 188 ts_us.QuadPart = event->Header.TimeStamp.QuadPart / 10;
191 value->Set("ts", new base::Value(base::StringPrintf( 189 value->SetString(
192 "%08X%08X", ts_us.HighPart, ts_us.LowPart))); 190 "ts", base::StringPrintf("%08X%08X", ts_us.HighPart, ts_us.LowPart));
193 191
194 value->Set("guid", new base::Value(GuidToString(event->Header.Guid))); 192 value->SetString("guid", GuidToString(event->Header.Guid));
195 193
196 value->Set("op", new Value(event->Header.Class.Type)); 194 value->SetInteger("op", event->Header.Class.Type);
197 value->Set("ver", new Value(event->Header.Class.Version)); 195 value->SetInteger("ver", event->Header.Class.Version);
198 value->Set("pid", new Value(static_cast<int>(event->Header.ProcessId))); 196 value->SetInteger("pid", static_cast<int>(event->Header.ProcessId));
199 value->Set("tid", new Value(static_cast<int>(event->Header.ThreadId))); 197 value->SetInteger("tid", static_cast<int>(event->Header.ThreadId));
200 value->Set("cpu", new Value(event->BufferContext.ProcessorNumber)); 198 value->SetInteger("cpu", event->BufferContext.ProcessorNumber);
201 199
202 // Base64 encode the payload bytes. 200 // Base64 encode the payload bytes.
203 base::StringPiece buffer(static_cast<const char*>(event->MofData), 201 base::StringPiece buffer(static_cast<const char*>(event->MofData),
204 event->MofLength); 202 event->MofLength);
205 std::string payload; 203 std::string payload;
206 base::Base64Encode(buffer, &payload); 204 base::Base64Encode(buffer, &payload);
207 value->Set("payload", new base::Value(payload)); 205 value->SetString("payload", payload);
208 206
209 // Append it to the events buffer. 207 // Append it to the events buffer.
210 events_->Append(std::move(value)); 208 events_->Append(std::move(value));
211 } 209 }
212 210
213 void EtwTracingAgent::TraceAndConsumeOnThread() { 211 void EtwTracingAgent::TraceAndConsumeOnThread() {
214 // Create the events buffer. 212 // Create the events buffer.
215 events_.reset(new base::ListValue()); 213 events_.reset(new base::ListValue());
216 214
217 // Output a clock sync event. 215 // Output a clock sync event.
218 AddSyncEventToBuffer(); 216 AddSyncEventToBuffer();
219 217
220 HRESULT hr = OpenRealtimeSession(KERNEL_LOGGER_NAME); 218 HRESULT hr = OpenRealtimeSession(KERNEL_LOGGER_NAME);
221 if (FAILED(hr)) 219 if (FAILED(hr))
222 return; 220 return;
223 Consume(); 221 Consume();
224 Close(); 222 Close();
225 } 223 }
226 224
227 void EtwTracingAgent::FlushOnThread( 225 void EtwTracingAgent::FlushOnThread(
228 const StopAgentTracingCallback& callback) { 226 const StopAgentTracingCallback& callback) {
229 // Add the header information to the stream. 227 // Add the header information to the stream.
230 std::unique_ptr<base::DictionaryValue> header(new base::DictionaryValue()); 228 auto header = base::MakeUnique<base::DictionaryValue>();
231 header->Set("name", new base::Value("ETW")); 229 header->SetString("name", "ETW");
232 230
233 // Release and pass the events buffer. 231 // Release and pass the events buffer.
234 header->Set("content", std::move(events_)); 232 header->Set("content", std::move(events_));
235 233
236 // Serialize the results as a JSon string. 234 // Serialize the results as a JSon string.
237 std::string output; 235 std::string output;
238 JSONStringValueSerializer serializer(&output); 236 JSONStringValueSerializer serializer(&output);
239 serializer.Serialize(*header.get()); 237 serializer.Serialize(*header.get());
240 238
241 // Pass the result to the UI Thread. 239 // Pass the result to the UI Thread.
242 scoped_refptr<base::RefCountedString> result = 240 scoped_refptr<base::RefCountedString> result =
243 base::RefCountedString::TakeString(&output); 241 base::RefCountedString::TakeString(&output);
244 BrowserThread::PostTask( 242 BrowserThread::PostTask(
245 BrowserThread::UI, FROM_HERE, 243 BrowserThread::UI, FROM_HERE,
246 base::Bind(&EtwTracingAgent::OnStopSystemTracingDone, 244 base::Bind(&EtwTracingAgent::OnStopSystemTracingDone,
247 base::Unretained(this), 245 base::Unretained(this),
248 callback, 246 callback,
249 result)); 247 result));
250 } 248 }
251 249
252 } // namespace content 250 } // namespace content
OLDNEW
« no previous file with comments | « content/browser/accessibility/accessibility_tree_formatter_win.cc ('k') | dbus/values_util_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698