Index: tools/battor_agent/battor_agent_bin.cc |
diff --git a/tools/battor_agent/battor_agent_bin.cc b/tools/battor_agent/battor_agent_bin.cc |
index 5980403dbb8dd93321bf0fb2b8ae10e671aed9e4..5dcc0725c9639398782d80fa7336521fd0c5fc5b 100644 |
--- a/tools/battor_agent/battor_agent_bin.cc |
+++ b/tools/battor_agent/battor_agent_bin.cc |
@@ -4,6 +4,9 @@ |
Zhen Wang
2015/10/29 19:40:22
Can you also add some comments here to explain why
charliea (OOO until 10-5)
2015/10/29 21:12:11
Done.
|
#include <iostream> |
+#include "base/bind.h" |
+#include "base/memory/scoped_ptr.h" |
+#include "base/synchronization/waitable_event.h" |
#include "tools/battor_agent/battor_agent.h" |
using std::cout; |
@@ -12,6 +15,13 @@ using std::string; |
namespace { |
+// An event used to signal that the BattOr Agent has finished executing its |
+// command. |
+base::WaitableEvent g_stop_tracing_complete_event(false, false); |
+ |
+// A string that contains the trace that the BattOr has finished recording. |
+scoped_ptr<std::string> g_trace_output; |
Zhen Wang
2015/10/29 19:40:22
Is this only for the purpose of printing it out fo
nednguyen
2015/10/29 19:57:32
Yeah, I am not a big fan of global. Can your StopT
charliea (OOO until 10-5)
2015/10/29 21:12:11
Done. We wouldn't have needed the global variable
|
+ |
void PrintUsage() { |
cout << "Usage: battor_agent <command> <arguments>" << endl << endl |
<< "Commands:" << endl << endl |
@@ -36,6 +46,11 @@ bool GetArg(int argnum, int argc, char* argv[], string* value) { |
return true; |
} |
+void OnStopTracingComplete(scoped_ptr<std::string> trace_output) { |
+ g_trace_output = trace_output.Pass(); |
+ g_stop_tracing_complete_event.Signal(); |
+} |
+ |
} // namespace |
int main(int argc, char* argv[]) { |
@@ -55,10 +70,10 @@ int main(int argc, char* argv[]) { |
if (!GetArg(2, argc, argv, &path)) |
return 1; |
- string out_trace; |
cout << "Calling StopTracing()" << endl; |
- battor::BattOrAgent(path).StopTracing(&out_trace); |
- cout << out_trace << endl; |
+ battor::BattOrAgent(path).StopTracing(base::Bind(&OnStopTracingComplete)); |
+ g_stop_tracing_complete_event.Wait(); |
Zhen Wang
2015/10/29 19:40:22
I am fine with treating this as a blocking call ri
nednguyen
2015/10/29 19:57:32
Sorry, but I feel like this is an unnecessary opti
charliea (OOO until 10-5)
2015/10/29 21:12:11
(I think we covered this in the meeting - we'll st
|
+ cout << *g_trace_output.get() << endl; |
} else if (cmd == "SupportsExplicitClockSync") { |
cout << "Calling SupportsExplicitClockSync" << endl; |
cout << battor::BattOrAgent::SupportsExplicitClockSync() << endl; |