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

Side by Side Diff: tools/battor_agent/battor_agent_bin.cc

Issue 1407033008: Makes the BattOrAgent asynchronous (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Code review Created 5 years, 1 month 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 4
5 // This file provides a thin binary wrapper around the BattOr Agent
6 // library. This binary wrapper provides a means for non-C++ tracing
7 // controllers, such as Telemetry and Android Systrace, to issue high-level
8 // tracing commands to the BattOr..
9
5 #include <iostream> 10 #include <iostream>
6 11
12 #include "base/bind.h"
13 #include "base/memory/scoped_ptr.h"
14 #include "base/synchronization/waitable_event.h"
7 #include "tools/battor_agent/battor_agent.h" 15 #include "tools/battor_agent/battor_agent.h"
8 16
9 using std::cout; 17 using std::cout;
10 using std::endl; 18 using std::endl;
11 using std::string; 19 using std::string;
12 20
13 namespace { 21 namespace {
14 22
23 // An event used to signal that the BattOr Agent has finished executing its
24 // command.
25 base::WaitableEvent g_stop_tracing_complete_event(false, false);
26
27 // A string that contains the trace that the BattOr has finished recording.
28 scoped_ptr<std::string> g_trace_output;
Zhen Wang 2015/10/30 16:46:44 Remove this?
charliea (OOO until 10-5) 2015/10/30 17:37:42 Ack. Sorry about that - not sure how that slipped
29
15 void PrintUsage() { 30 void PrintUsage() {
16 cout << "Usage: battor_agent <command> <arguments>" << endl << endl 31 cout << "Usage: battor_agent <command> <arguments>" << endl << endl
17 << "Commands:" << endl << endl 32 << "Commands:" << endl << endl
18 << " StartTracing <path>" << endl 33 << " StartTracing <path>" << endl
19 << " StopTracing <path>" << endl 34 << " StopTracing <path>" << endl
20 << " SupportsExplicitClockSync <path>" << endl 35 << " SupportsExplicitClockSync" << endl
21 << " RecordClockSyncMarker <path> <marker>" << endl 36 << " RecordClockSyncMarker <path> <marker>" << endl
22 << " IssueClockSyncMarker <path>" << endl 37 << " IssueClockSyncMarker <path>" << endl
23 << " Help" << endl; 38 << " Help" << endl;
24 } 39 }
25 40
26 // Retrieves argument argnum from the argument list and stores it into value, 41 // Retrieves argument argnum from the argument list and stores it into value,
27 // returning whether the operation was successful and printing the usage 42 // returning whether the operation was successful and printing the usage
28 // guidelines if it wasn't. 43 // guidelines if it wasn't.
29 bool GetArg(int argnum, int argc, char* argv[], string* value) { 44 bool GetArg(int argnum, int argc, char* argv[], string* value) {
30 if (argnum >= argc) { 45 if (argnum >= argc) {
31 PrintUsage(); 46 PrintUsage();
32 return false; 47 return false;
33 } 48 }
34 49
35 *value = argv[argnum]; 50 *value = argv[argnum];
36 return true; 51 return true;
37 } 52 }
38 53
54 void OnCommandComplete() {
55 g_stop_tracing_complete_event.Signal();
56 }
57
39 } // namespace 58 } // namespace
40 59
41 int main(int argc, char* argv[]) { 60 int main(int argc, char* argv[]) {
42 string cmd; 61 string cmd;
43 if (!GetArg(1, argc, argv, &cmd)) 62 if (!GetArg(1, argc, argv, &cmd))
44 return 1; 63 return 1;
45 64
46 if (cmd == "StartTracing") { 65 if (cmd == "StartTracing") {
47 string path; 66 string path;
48 if (!GetArg(2, argc, argv, &path)) 67 if (!GetArg(2, argc, argv, &path))
49 return 1; 68 return 1;
50 69
51 cout << "Calling StartTracing()" << endl; 70 cout << "Calling StartTracing()" << endl;
52 battor::BattOrAgent(path).StartTracing(); 71 battor::BattOrAgent(path).StartTracing();
53 } else if (cmd == "StopTracing") { 72 } else if (cmd == "StopTracing") {
54 string path; 73 string path;
55 if (!GetArg(2, argc, argv, &path)) 74 if (!GetArg(2, argc, argv, &path))
56 return 1; 75 return 1;
57 76
58 string out_trace;
59 cout << "Calling StopTracing()" << endl; 77 cout << "Calling StopTracing()" << endl;
60 battor::BattOrAgent(path).StopTracing(&out_trace); 78 std::string trace_output;
61 cout << out_trace << endl; 79 battor::BattOrAgent(path)
80 .StopTracing(&trace_output, base::Bind(&OnCommandComplete));
81 g_stop_tracing_complete_event.Wait();
82 cout << trace_output << endl;
62 } else if (cmd == "SupportsExplicitClockSync") { 83 } else if (cmd == "SupportsExplicitClockSync") {
63 cout << "Calling SupportsExplicitClockSync" << endl; 84 cout << "Calling SupportsExplicitClockSync" << endl;
64 cout << battor::BattOrAgent::SupportsExplicitClockSync() << endl; 85 cout << battor::BattOrAgent::SupportsExplicitClockSync() << endl;
65 } else if (cmd == "RecordClockSyncMarker") { 86 } else if (cmd == "RecordClockSyncMarker") {
66 string path, marker; 87 string path, marker;
67 if (!GetArg(2, argc, argv, &path) || !GetArg(3, argc, argv, &marker)) 88 if (!GetArg(2, argc, argv, &path) || !GetArg(3, argc, argv, &marker))
68 return 1; 89 return 1;
69 90
70 cout << "Marker: " << marker << endl; 91 cout << "Marker: " << marker << endl;
71 cout << "Calling RecordClockSyncMarker()" << endl; 92 cout << "Calling RecordClockSyncMarker()" << endl;
72 battor::BattOrAgent(path).RecordClockSyncMarker(marker); 93 // TODO: Write the time to STDOUT
94 battor::BattOrAgent(path)
95 .RecordClockSyncMarker(marker, base::Bind(&OnCommandComplete));
96 g_stop_tracing_complete_event.Wait();
97 // TODO: Write the time to STDOUT
73 } else if (cmd == "IssueClockSyncMarker") { 98 } else if (cmd == "IssueClockSyncMarker") {
74 string path; 99 string path;
75 if (!GetArg(2, argc, argv, &path)) 100 if (!GetArg(2, argc, argv, &path))
76 return 1; 101 return 1;
77 102
78 cout << "Calling IssueClockSyncMarker" << endl; 103 cout << "Calling IssueClockSyncMarker" << endl;
79 battor::BattOrAgent(path).IssueClockSyncMarker(); 104 battor::BattOrAgent(path).IssueClockSyncMarker();
80 } else { 105 } else {
81 PrintUsage(); 106 PrintUsage();
82 return 1; 107 return 1;
83 } 108 }
84 109
85 return 0; 110 return 0;
86 } 111 }
OLDNEW
« tools/battor_agent/battor_agent.cc ('K') | « tools/battor_agent/battor_agent.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698