| Index: content/browser/tracing/trace_subscriber_stdio.cc
|
| diff --git a/content/browser/tracing/trace_subscriber_stdio.cc b/content/browser/tracing/trace_subscriber_stdio.cc
|
| deleted file mode 100644
|
| index da816609391b34dd76c659b9e49fc15571216634..0000000000000000000000000000000000000000
|
| --- a/content/browser/tracing/trace_subscriber_stdio.cc
|
| +++ /dev/null
|
| @@ -1,201 +0,0 @@
|
| -// Copyright (c) 2012 The Chromium Authors. All rights reserved.
|
| -// Use of this source code is governed by a BSD-style license that can be
|
| -// found in the LICENSE file.
|
| -
|
| -#include "content/browser/tracing/trace_subscriber_stdio.h"
|
| -
|
| -#include "base/bind.h"
|
| -#include "base/debug/trace_event.h"
|
| -#include "base/file_util.h"
|
| -#include "base/logging.h"
|
| -#include "base/threading/sequenced_worker_pool.h"
|
| -#include "content/public/browser/browser_thread.h"
|
| -
|
| -namespace content {
|
| -
|
| -// All method calls on this class are done on a SequencedWorkerPool thread.
|
| -class TraceSubscriberStdio::TraceSubscriberStdioWorker
|
| - : public base::RefCountedThreadSafe<TraceSubscriberStdioWorker> {
|
| - public:
|
| - TraceSubscriberStdioWorker(const base::FilePath& path,
|
| - FileType file_type,
|
| - bool has_system_trace)
|
| - : path_(path),
|
| - file_type_(file_type),
|
| - has_system_trace_(has_system_trace),
|
| - file_(0),
|
| - needs_comma_(false),
|
| - wrote_trace_(false),
|
| - has_pending_system_trace_(false),
|
| - wrote_system_trace_(false) {}
|
| -
|
| - void OnTraceStart() {
|
| - DCHECK(!file_);
|
| - file_ = file_util::OpenFile(path_, "w+");
|
| - if (!IsValid()) {
|
| - LOG(ERROR) << "Failed to open performance trace file: " << path_.value();
|
| - return;
|
| - }
|
| -
|
| - VLOG(0) << "Logging performance trace to file: " << path_.value();
|
| - if (file_type_ == FILE_TYPE_PROPERTY_LIST)
|
| - WriteString("{\"traceEvents\":");
|
| - WriteString("[");
|
| - }
|
| -
|
| - void OnTraceData(const scoped_refptr<base::RefCountedString>& data_ptr) {
|
| - if (!IsValid())
|
| - return;
|
| - DCHECK(!data_ptr->data().empty());
|
| - if (needs_comma_)
|
| - WriteString(",");
|
| - WriteString(data_ptr->data());
|
| - needs_comma_ = true;
|
| - }
|
| -
|
| - void OnSystemTraceData(
|
| - const scoped_refptr<base::RefCountedString>& data_ptr) {
|
| - if (wrote_trace_) {
|
| - WriteSystemTrace(data_ptr);
|
| - End();
|
| - } else {
|
| - pending_system_trace_ = data_ptr;
|
| - has_pending_system_trace_ = true;
|
| - }
|
| - }
|
| -
|
| - void OnTraceEnd() {
|
| - if (!IsValid())
|
| - return;
|
| - WriteString("]");
|
| -
|
| - wrote_trace_ = true;
|
| -
|
| - if (!has_system_trace_ || wrote_system_trace_) {
|
| - End();
|
| - return;
|
| - }
|
| -
|
| - WriteString(",");
|
| - if (has_pending_system_trace_) {
|
| - WriteSystemTrace(pending_system_trace_);
|
| - End();
|
| - }
|
| - }
|
| -
|
| - private:
|
| - friend class base::RefCountedThreadSafe<TraceSubscriberStdioWorker>;
|
| -
|
| - ~TraceSubscriberStdioWorker() {
|
| - CloseFile();
|
| - }
|
| -
|
| - bool IsValid() const {
|
| - return file_ && (0 == ferror(file_));
|
| - }
|
| -
|
| - void CloseFile() {
|
| - if (file_) {
|
| - fclose(file_);
|
| - file_ = 0;
|
| -
|
| - }
|
| - }
|
| -
|
| - void End() {
|
| - if (file_type_ == FILE_TYPE_PROPERTY_LIST)
|
| - WriteString("}");
|
| - CloseFile();
|
| - }
|
| -
|
| - void WriteSystemTrace(const scoped_refptr<base::RefCountedString>& data_ptr) {
|
| - // Newlines need to be replaced with the string "\n" to be parsed correctly.
|
| - // Double quotes need to be replaced with the string "\"".
|
| - // System logs are ASCII.
|
| - const std::string& data = data_ptr->data();
|
| - const char* chars = data.c_str();
|
| - WriteString("\"systemTraceEvents\":\"");
|
| - size_t old_index = 0;
|
| - for (size_t new_index = data.find_first_of("\n\"");
|
| - std::string::npos != new_index;
|
| - old_index = new_index + 1,
|
| - new_index = data.find_first_of("\n\"", old_index)) {
|
| - WriteChars(chars + old_index, new_index - old_index);
|
| - if (chars[new_index] == '\n')
|
| - WriteChars("\\n", 2);
|
| - else
|
| - WriteChars("\\\"", 2);
|
| - }
|
| - WriteChars(chars + old_index, data.size() - old_index);
|
| - WriteString("\"");
|
| - wrote_system_trace_ = true;
|
| - }
|
| -
|
| - void WriteChars(const char* output_chars, size_t size) {
|
| - if (size == 0)
|
| - return;
|
| -
|
| - if (IsValid()) {
|
| - size_t written = fwrite(output_chars, 1, size, file_);
|
| - if (written != size) {
|
| - LOG(ERROR) << "Error " << ferror(file_) << " in fwrite() to trace file";
|
| - CloseFile();
|
| - }
|
| - }
|
| - }
|
| -
|
| - void WriteString(const std::string& output_str) {
|
| - WriteChars(output_str.data(), output_str.size());
|
| - }
|
| -
|
| - base::FilePath path_;
|
| - const FileType file_type_;
|
| - const bool has_system_trace_;
|
| - FILE* file_;
|
| - bool needs_comma_;
|
| - bool wrote_trace_;
|
| - bool has_pending_system_trace_;
|
| - bool wrote_system_trace_;
|
| - scoped_refptr<base::RefCountedString> pending_system_trace_;
|
| - DISALLOW_COPY_AND_ASSIGN(TraceSubscriberStdioWorker);
|
| -};
|
| -
|
| -TraceSubscriberStdio::TraceSubscriberStdio(const base::FilePath& path,
|
| - FileType file_type,
|
| - bool has_system_trace)
|
| - : worker_(new TraceSubscriberStdioWorker(path,
|
| - file_type,
|
| - has_system_trace)) {
|
| - if (has_system_trace)
|
| - CHECK_EQ(FILE_TYPE_PROPERTY_LIST, file_type);
|
| - BrowserThread::PostBlockingPoolSequencedTask(
|
| - __FILE__, FROM_HERE,
|
| - base::Bind(&TraceSubscriberStdioWorker::OnTraceStart, worker_));
|
| -}
|
| -
|
| -TraceSubscriberStdio::~TraceSubscriberStdio() {
|
| -}
|
| -
|
| -void TraceSubscriberStdio::OnEndTracingComplete() {
|
| - BrowserThread::PostBlockingPoolSequencedTask(
|
| - __FILE__, FROM_HERE,
|
| - base::Bind(&TraceSubscriberStdioWorker::OnTraceEnd, worker_));
|
| -}
|
| -
|
| -void TraceSubscriberStdio::OnTraceDataCollected(
|
| - const scoped_refptr<base::RefCountedString>& data_ptr) {
|
| - BrowserThread::PostBlockingPoolSequencedTask(
|
| - __FILE__, FROM_HERE,
|
| - base::Bind(&TraceSubscriberStdioWorker::OnTraceData, worker_, data_ptr));
|
| -}
|
| -
|
| -void TraceSubscriberStdio::OnEndSystemTracing(
|
| - const scoped_refptr<base::RefCountedString>& events_str_ptr) {
|
| - BrowserThread::PostBlockingPoolSequencedTask(
|
| - __FILE__, FROM_HERE,
|
| - base::Bind(&TraceSubscriberStdioWorker::OnSystemTraceData,
|
| - worker_,
|
| - events_str_ptr));
|
| -}
|
| -
|
| -} // namespace content
|
|
|