Index: sky/tools/debugger/prompt/prompt.cc |
diff --git a/sky/tools/debugger/prompt/prompt.cc b/sky/tools/debugger/prompt/prompt.cc |
index e31233646fc425d13dc37ae15af43e14869b2a3a..28c5297e841c4d72fd8816ebf06d0cebf79e1976 100644 |
--- a/sky/tools/debugger/prompt/prompt.cc |
+++ b/sky/tools/debugger/prompt/prompt.cc |
@@ -2,7 +2,10 @@ |
// Use of this source code is governed by a BSD-style license that can be |
// found in the LICENSE file. |
+#include <algorithm> |
+ |
#include "base/bind.h" |
+#include "base/files/file_path.h" |
#include "base/memory/weak_ptr.h" |
#include "base/strings/string_number_conversions.h" |
#include "base/strings/stringprintf.h" |
@@ -16,11 +19,17 @@ |
#include "net/socket/tcp_server_socket.h" |
#include "services/tracing/tracing.mojom.h" |
#include "sky/tools/debugger/debugger.mojom.h" |
+#include "sky/tools/debugger/prompt/trace_collector.h" |
namespace sky { |
namespace debugger { |
+namespace { |
+ |
+const size_t kMinSendBufferSize = 1024 * 1024; |
+} |
-class Prompt : public mojo::ApplicationDelegate, public net::HttpServer::Delegate { |
+class Prompt : public mojo::ApplicationDelegate, |
+ public net::HttpServer::Delegate { |
public: |
Prompt() |
: is_tracing_(false), |
@@ -98,6 +107,8 @@ class Prompt : public mojo::ApplicationDelegate, public net::HttpServer::Delegat |
} |
void Respond(int connection_id, std::string response) { |
+ web_server_->SetSendBufferSize( |
eseidel
2015/01/16 00:07:25
You should expain why you're donig this in a comme
abarth-chromium
2015/01/16 00:31:53
Done.
|
+ connection_id, std::max(kMinSendBufferSize, response.length())); |
web_server_->Send200(connection_id, response, "text/plain"); |
} |
@@ -138,16 +149,25 @@ class Prompt : public mojo::ApplicationDelegate, public net::HttpServer::Delegat |
} |
void ToggleTracing(int connection_id) { |
- std::string response; |
- if (is_tracing_) { |
- response = "Stopping trace (writing to sky_viewer.trace)\n"; |
+ bool was_tracing = is_tracing_; |
+ is_tracing_ = !is_tracing_; |
+ |
+ if (was_tracing) { |
tracing_->StopAndFlush(); |
- } else { |
- response = "Starting trace (type 'trace' to stop tracing)\n"; |
- tracing_->Start(mojo::String("sky_viewer"), mojo::String("*")); |
+ trace_collector_->GetTrace(base::Bind( |
+ &Prompt::OnTraceAvailable, base::Unretained(this), connection_id)); |
+ return; |
} |
- is_tracing_ = !is_tracing_; |
- Respond(connection_id, response); |
+ |
+ mojo::DataPipe pipe; |
+ tracing_->Start(pipe.producer_handle.Pass(), mojo::String("*")); |
+ trace_collector_.reset(new TraceCollector(pipe.consumer_handle.Pass())); |
+ Respond(connection_id, "Starting trace (type 'trace' to stop tracing)\n"); |
+ } |
+ |
+ void OnTraceAvailable(int connection_id, std::string trace) { |
+ trace_collector_.reset(); |
+ Respond(connection_id, trace); |
} |
bool is_tracing_; |
@@ -158,6 +178,8 @@ class Prompt : public mojo::ApplicationDelegate, public net::HttpServer::Delegat |
scoped_ptr<net::HttpServer> web_server_; |
uint32_t command_port_; |
+ scoped_ptr<TraceCollector> trace_collector_; |
+ |
DISALLOW_COPY_AND_ASSIGN(Prompt); |
}; |