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

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

Issue 1181213002: Slow Reports - Embed Metadata in Traces (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Comments addressed. Created 5 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 2015 The Chromium Authors. All rights reserved. 1 // Copyright 2015 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 #include "content/browser/tracing/tracing_controller_impl.h" 4 #include "content/browser/tracing/tracing_controller_impl.h"
5 5
6 #include "base/bind.h" 6 #include "base/bind.h"
7 #include "base/files/file_util.h" 7 #include "base/files/file_util.h"
8 #include "content/public/browser/browser_thread.h" 8 #include "content/public/browser/browser_thread.h"
9 #include "third_party/zlib/zlib.h" 9 #include "third_party/zlib/zlib.h"
10 10
(...skipping 110 matching lines...) Expand 10 before | Expand all | Expand 10 after
121 void AddTraceChunkAndPassToEndpoint(const std::string& chunk) { 121 void AddTraceChunkAndPassToEndpoint(const std::string& chunk) {
122 trace_ += chunk; 122 trace_ += chunk;
123 123
124 endpoint_->ReceiveTraceChunk(chunk); 124 endpoint_->ReceiveTraceChunk(chunk);
125 } 125 }
126 126
127 void SetSystemTrace(const std::string& data) override { 127 void SetSystemTrace(const std::string& data) override {
128 system_trace_ = data; 128 system_trace_ = data;
129 } 129 }
130 130
131 void SetMetadata(const std::string& data) override {
132 metadata_ = data;
133 }
134
131 void Close() override { 135 void Close() override {
132 AddTraceChunkAndPassToEndpoint("]"); 136 AddTraceChunkAndPassToEndpoint("]");
133 if (!system_trace_.empty()) 137 if (!system_trace_.empty())
134 AddTraceChunkAndPassToEndpoint(",\"systemTraceEvents\": " + 138 AddTraceChunkAndPassToEndpoint(",\"systemTraceEvents\": " +
135 system_trace_); 139 system_trace_);
140 if (!metadata_.empty())
141 AddTraceChunkAndPassToEndpoint(",\"metadata\": " + metadata_);
dsinclair 2015/06/12 19:38:51 Does this produce a valid file? This works above f
shatch 2015/06/12 20:53:48 It's actually a dict, so the contents the results
136 AddTraceChunkAndPassToEndpoint("}"); 142 AddTraceChunkAndPassToEndpoint("}");
137 143
138 endpoint_->ReceiveTraceFinalContents(trace_); 144 endpoint_->ReceiveTraceFinalContents(trace_);
139 } 145 }
140 146
141 private: 147 private:
142 ~StringTraceDataSink() override {} 148 ~StringTraceDataSink() override {}
143 149
144 scoped_refptr<TracingController::TraceDataEndpoint> endpoint_; 150 scoped_refptr<TracingController::TraceDataEndpoint> endpoint_;
145 std::string trace_; 151 std::string trace_;
146 std::string system_trace_; 152 std::string system_trace_;
153 std::string metadata_;
147 154
148 DISALLOW_COPY_AND_ASSIGN(StringTraceDataSink); 155 DISALLOW_COPY_AND_ASSIGN(StringTraceDataSink);
149 }; 156 };
150 157
151 class CompressedStringTraceDataSink : public TracingController::TraceDataSink { 158 class CompressedStringTraceDataSink : public TracingController::TraceDataSink {
152 public: 159 public:
153 explicit CompressedStringTraceDataSink( 160 explicit CompressedStringTraceDataSink(
154 scoped_refptr<TracingController::TraceDataEndpoint> endpoint) 161 scoped_refptr<TracingController::TraceDataEndpoint> endpoint)
155 : endpoint_(endpoint), already_tried_open_(false) {} 162 : endpoint_(endpoint), already_tried_open_(false) {}
156 163
157 void AddTraceChunk(const std::string& chunk) override { 164 void AddTraceChunk(const std::string& chunk) override {
158 std::string tmp = chunk; 165 std::string tmp = chunk;
159 scoped_refptr<base::RefCountedString> chunk_ptr = 166 scoped_refptr<base::RefCountedString> chunk_ptr =
160 base::RefCountedString::TakeString(&tmp); 167 base::RefCountedString::TakeString(&tmp);
161 BrowserThread::PostTask( 168 BrowserThread::PostTask(
162 BrowserThread::FILE, FROM_HERE, 169 BrowserThread::FILE, FROM_HERE,
163 base::Bind(&CompressedStringTraceDataSink::AddTraceChunkOnFileThread, 170 base::Bind(&CompressedStringTraceDataSink::AddTraceChunkOnFileThread,
164 this, chunk_ptr)); 171 this, chunk_ptr));
165 } 172 }
166 173
167 void SetSystemTrace(const std::string& data) override { 174 void SetSystemTrace(const std::string& data) override {
168 system_trace_ = data; 175 system_trace_ = data;
169 } 176 }
170 177
178 void SetMetadata(const std::string& data) override {
179 metadata_ = data;
180 }
181
171 void Close() override { 182 void Close() override {
172 BrowserThread::PostTask( 183 BrowserThread::PostTask(
173 BrowserThread::FILE, FROM_HERE, 184 BrowserThread::FILE, FROM_HERE,
174 base::Bind(&CompressedStringTraceDataSink::CloseOnFileThread, this)); 185 base::Bind(&CompressedStringTraceDataSink::CloseOnFileThread, this));
175 } 186 }
176 187
177 private: 188 private:
178 ~CompressedStringTraceDataSink() override {} 189 ~CompressedStringTraceDataSink() override {}
179 190
180 bool OpenZStreamOnFileThread() { 191 bool OpenZStreamOnFileThread() {
(...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after
248 return; 259 return;
249 260
250 if (compressed_trace_data_.empty()) 261 if (compressed_trace_data_.empty())
251 AddTraceChunkAndCompressOnFileThread("{\"traceEvents\":[", false); 262 AddTraceChunkAndCompressOnFileThread("{\"traceEvents\":[", false);
252 263
253 AddTraceChunkAndCompressOnFileThread("]", false); 264 AddTraceChunkAndCompressOnFileThread("]", false);
254 if (!system_trace_.empty()) { 265 if (!system_trace_.empty()) {
255 AddTraceChunkAndCompressOnFileThread( 266 AddTraceChunkAndCompressOnFileThread(
256 ",\"systemTraceEvents\": " + system_trace_, false); 267 ",\"systemTraceEvents\": " + system_trace_, false);
257 } 268 }
269 if (!metadata_.empty())
oystein (OOO til 10th of July) 2015/06/12 19:29:16 nit: braces
shatch 2015/06/12 20:53:48 Done.
270 AddTraceChunkAndCompressOnFileThread(",\"metadata\": " + metadata_,
271 false);
258 AddTraceChunkAndCompressOnFileThread("}", true); 272 AddTraceChunkAndCompressOnFileThread("}", true);
259 273
260 deflateEnd(stream_.get()); 274 deflateEnd(stream_.get());
261 stream_.reset(); 275 stream_.reset();
262 276
263 endpoint_->ReceiveTraceFinalContents(compressed_trace_data_); 277 endpoint_->ReceiveTraceFinalContents(compressed_trace_data_);
264 } 278 }
265 279
266 scoped_refptr<TracingController::TraceDataEndpoint> endpoint_; 280 scoped_refptr<TracingController::TraceDataEndpoint> endpoint_;
267 scoped_ptr<z_stream> stream_; 281 scoped_ptr<z_stream> stream_;
268 bool already_tried_open_; 282 bool already_tried_open_;
269 std::string compressed_trace_data_; 283 std::string compressed_trace_data_;
270 std::string system_trace_; 284 std::string system_trace_;
285 std::string metadata_;
271 286
272 DISALLOW_COPY_AND_ASSIGN(CompressedStringTraceDataSink); 287 DISALLOW_COPY_AND_ASSIGN(CompressedStringTraceDataSink);
273 }; 288 };
274 289
275 } // namespace 290 } // namespace
276 291
277 scoped_refptr<TracingController::TraceDataSink> 292 scoped_refptr<TracingController::TraceDataSink>
278 TracingController::CreateStringSink( 293 TracingController::CreateStringSink(
279 const base::Callback<void(base::RefCountedString*)>& callback) { 294 const base::Callback<void(base::RefCountedString*)>& callback) {
280 return new StringTraceDataSink(new StringTraceDataEndpoint(callback)); 295 return new StringTraceDataSink(new StringTraceDataEndpoint(callback));
(...skipping 12 matching lines...) Expand all
293 CreateFileEndpoint(file_path, callback)); 308 CreateFileEndpoint(file_path, callback));
294 } 309 }
295 310
296 scoped_refptr<TracingController::TraceDataEndpoint> 311 scoped_refptr<TracingController::TraceDataEndpoint>
297 TracingController::CreateFileEndpoint(const base::FilePath& file_path, 312 TracingController::CreateFileEndpoint(const base::FilePath& file_path,
298 const base::Closure& callback) { 313 const base::Closure& callback) {
299 return new FileTraceDataEndpoint(file_path, callback); 314 return new FileTraceDataEndpoint(file_path, callback);
300 } 315 }
301 316
302 } // namespace content 317 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698