xref: /aosp_15_r20/external/perfetto/src/trace_config_utils/main.cc (revision 6dbdd20afdafa5e3ca9b8809fa73465d530080dc)
1*6dbdd20aSAndroid Build Coastguard Worker /*
2*6dbdd20aSAndroid Build Coastguard Worker  * Copyright (C) 2024 The Android Open Source Project
3*6dbdd20aSAndroid Build Coastguard Worker  *
4*6dbdd20aSAndroid Build Coastguard Worker  * Licensed under the Apache License, Version 2.0 (the "License");
5*6dbdd20aSAndroid Build Coastguard Worker  * you may not use this file except in compliance with the License.
6*6dbdd20aSAndroid Build Coastguard Worker  * You may obtain a copy of the License at
7*6dbdd20aSAndroid Build Coastguard Worker  *
8*6dbdd20aSAndroid Build Coastguard Worker  *      http://www.apache.org/licenses/LICENSE-2.0
9*6dbdd20aSAndroid Build Coastguard Worker  *
10*6dbdd20aSAndroid Build Coastguard Worker  * Unless required by applicable law or agreed to in writing, software
11*6dbdd20aSAndroid Build Coastguard Worker  * distributed under the License is distributed on an "AS IS" BASIS,
12*6dbdd20aSAndroid Build Coastguard Worker  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13*6dbdd20aSAndroid Build Coastguard Worker  * See the License for the specific language governing permissions and
14*6dbdd20aSAndroid Build Coastguard Worker  * limitations under the License.
15*6dbdd20aSAndroid Build Coastguard Worker  */
16*6dbdd20aSAndroid Build Coastguard Worker 
17*6dbdd20aSAndroid Build Coastguard Worker #include <stdio.h>
18*6dbdd20aSAndroid Build Coastguard Worker #include <string.h>
19*6dbdd20aSAndroid Build Coastguard Worker 
20*6dbdd20aSAndroid Build Coastguard Worker #include "perfetto/ext/base/file_utils.h"
21*6dbdd20aSAndroid Build Coastguard Worker #include "src/trace_config_utils/pb_to_txt.h"
22*6dbdd20aSAndroid Build Coastguard Worker #include "src/trace_config_utils/txt_to_pb.h"
23*6dbdd20aSAndroid Build Coastguard Worker 
24*6dbdd20aSAndroid Build Coastguard Worker namespace {
PrintUsage(const char * argv0)25*6dbdd20aSAndroid Build Coastguard Worker void PrintUsage(const char* argv0) {
26*6dbdd20aSAndroid Build Coastguard Worker   printf(R"(
27*6dbdd20aSAndroid Build Coastguard Worker Converts a TraceConfig from pbtxt to proto-encoded bytes and viceversa
28*6dbdd20aSAndroid Build Coastguard Worker 
29*6dbdd20aSAndroid Build Coastguard Worker Usage: %s  txt_to_pb | pb_to_txt < in > out
30*6dbdd20aSAndroid Build Coastguard Worker )",
31*6dbdd20aSAndroid Build Coastguard Worker          argv0);
32*6dbdd20aSAndroid Build Coastguard Worker }
33*6dbdd20aSAndroid Build Coastguard Worker 
34*6dbdd20aSAndroid Build Coastguard Worker }  // namespace
35*6dbdd20aSAndroid Build Coastguard Worker 
main(int argc,char ** argv)36*6dbdd20aSAndroid Build Coastguard Worker int main(int argc, char** argv) {
37*6dbdd20aSAndroid Build Coastguard Worker   using namespace ::perfetto;
38*6dbdd20aSAndroid Build Coastguard Worker 
39*6dbdd20aSAndroid Build Coastguard Worker   if (argc < 2) {
40*6dbdd20aSAndroid Build Coastguard Worker     PrintUsage(argv[0]);
41*6dbdd20aSAndroid Build Coastguard Worker     return 1;
42*6dbdd20aSAndroid Build Coastguard Worker   }
43*6dbdd20aSAndroid Build Coastguard Worker 
44*6dbdd20aSAndroid Build Coastguard Worker   const char* cmd = argv[1];
45*6dbdd20aSAndroid Build Coastguard Worker   std::string in_data;
46*6dbdd20aSAndroid Build Coastguard Worker   if (argc == 2) {
47*6dbdd20aSAndroid Build Coastguard Worker     base::ReadFileStream(stdin, &in_data);
48*6dbdd20aSAndroid Build Coastguard Worker   } else {
49*6dbdd20aSAndroid Build Coastguard Worker     bool ok = base::ReadFile(argv[2], &in_data);
50*6dbdd20aSAndroid Build Coastguard Worker     if (!ok) {
51*6dbdd20aSAndroid Build Coastguard Worker       printf("Failed to open input file %s\n", argv[2]);
52*6dbdd20aSAndroid Build Coastguard Worker       return 1;
53*6dbdd20aSAndroid Build Coastguard Worker     }
54*6dbdd20aSAndroid Build Coastguard Worker   }
55*6dbdd20aSAndroid Build Coastguard Worker 
56*6dbdd20aSAndroid Build Coastguard Worker   if (strcmp(cmd, "txt_to_pb") == 0) {
57*6dbdd20aSAndroid Build Coastguard Worker     base::StatusOr<std::vector<uint8_t>> res = TraceConfigTxtToPb(in_data);
58*6dbdd20aSAndroid Build Coastguard Worker     if (!res.ok()) {
59*6dbdd20aSAndroid Build Coastguard Worker       printf("%s\n", res.status().c_message());
60*6dbdd20aSAndroid Build Coastguard Worker       return 1;
61*6dbdd20aSAndroid Build Coastguard Worker     }
62*6dbdd20aSAndroid Build Coastguard Worker     fwrite(res->data(), res->size(), 1, stdout);
63*6dbdd20aSAndroid Build Coastguard Worker     return 0;
64*6dbdd20aSAndroid Build Coastguard Worker   }
65*6dbdd20aSAndroid Build Coastguard Worker 
66*6dbdd20aSAndroid Build Coastguard Worker   if (strcmp(cmd, "pb_to_txt") == 0) {
67*6dbdd20aSAndroid Build Coastguard Worker     std::string txt = TraceConfigPbToTxt(in_data.data(), in_data.size());
68*6dbdd20aSAndroid Build Coastguard Worker     printf("%s\n", txt.c_str());
69*6dbdd20aSAndroid Build Coastguard Worker     return 0;
70*6dbdd20aSAndroid Build Coastguard Worker   }
71*6dbdd20aSAndroid Build Coastguard Worker 
72*6dbdd20aSAndroid Build Coastguard Worker   PrintUsage(argv[0]);
73*6dbdd20aSAndroid Build Coastguard Worker   return 1;
74*6dbdd20aSAndroid Build Coastguard Worker }
75