Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/wolfpld/tracy.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'csvexport/src/csvexport.cpp')
-rw-r--r--csvexport/src/csvexport.cpp126
1 files changed, 75 insertions, 51 deletions
diff --git a/csvexport/src/csvexport.cpp b/csvexport/src/csvexport.cpp
index 8b07f485..9b276609 100644
--- a/csvexport/src/csvexport.cpp
+++ b/csvexport/src/csvexport.cpp
@@ -11,12 +11,28 @@
#include "../../server/TracyFileRead.hpp"
#include "../../server/TracyWorker.hpp"
-#include "cxxopts.hpp"
+#include "getopt.h"
+
+void print_usage_exit(int e)
+{
+ fprintf(stderr, "Extract statistics from a trace to a CSV format\n");
+ fprintf(stderr, "Usage:\n");
+ fprintf(stderr, " extract [OPTION...] <trace file>\n");
+ fprintf(stderr, "\n");
+ fprintf(stderr, " -h, --help Print usage\n");
+ fprintf(stderr, " -f, --filter arg Filter zone names (default: "")\n");
+ fprintf(stderr, " -s, --sep arg CSV separator (default: ,)\n");
+ fprintf(stderr, " -c, --case Case sensitive filtering\n");
+ fprintf(stderr, " -e, --self Get self times\n");
+ fprintf(stderr, " -u, --unwrap Report each zone event\n");
+
+ exit(e);
+}
struct Args {
- std::string filter;
- std::string separator;
- std::string trace_file;
+ const char* filter;
+ const char* separator;
+ const char* trace_file;
bool case_sensitive;
bool self_time;
bool unwrap;
@@ -24,61 +40,69 @@ struct Args {
Args parse_args(int argc, char** argv)
{
- cxxopts::Options options(
- "extract",
- "Extract statistics from a trace to a CSV format"
- );
+ if (argc == 1)
+ {
+ print_usage_exit(1);
+ }
+
+ Args args = { "", ",", "", false, false, false };
- std::string filter;
- std::string separator;
- std::string trace_file;
- bool case_sensitive = false;
- bool self_time = false;
- bool unwrap = false;
-
- options.add_options()
- ("h,help", "Print usage")
- ("f,filter", "Filter zone names",
- cxxopts::value(filter)->default_value(""))
- ("s,separator", "CSV separator",
- cxxopts::value(separator)->default_value(","))
- ("t,trace", "same as <trace file>",
- cxxopts::value(trace_file))
- ("case", "Case sensitive filtering",
- cxxopts::value(case_sensitive))
- ("self", "Get self times",
- cxxopts::value(self_time))
- ("unwrap", "Report each zone event",
- cxxopts::value(unwrap))
- ;
-
- options.positional_help("<trace file>");
- options.parse_positional("trace");
- auto result = options.parse(argc, argv);
- if (result.count("help"))
+ struct option long_opts[] = {
+ { "help", no_argument, NULL, 'h' },
+ { "filter", optional_argument, NULL, 'f' },
+ { "sep", optional_argument, NULL, 's' },
+ { "case", no_argument, NULL, 'c' },
+ { "self", no_argument, NULL, 'e' },
+ { "unwrap", no_argument, NULL, 'u' },
+ { NULL, 0, NULL, 0 }
+ };
+
+ int c;
+ while ((c = getopt_long(argc, argv, "hf:s:ceu", long_opts, NULL)) != -1)
{
- fprintf(stderr, "%s\n", options.help().data());
- exit(0);
+ switch (c)
+ {
+ case 'h':
+ print_usage_exit(0);
+ break;
+ case 'f':
+ args.filter = optarg;
+ break;
+ case 's':
+ args.separator = optarg;
+ break;
+ case 'c':
+ args.case_sensitive = true;
+ break;
+ case 'e':
+ args.self_time = true;
+ break;
+ case 'u':
+ args.unwrap = true;
+ break;
+ default:
+ print_usage_exit(1);
+ break;
+ }
}
- if (result.count("trace") == 0)
+ if (argc != optind + 1)
{
- fprintf(stderr, "Requires a trace file");
- exit(1);
+ print_usage_exit(1);
}
- return Args {
- filter, separator, trace_file, case_sensitive, self_time, unwrap
- };
+ args.trace_file = argv[optind];
+
+ return args;
}
bool is_substring(
- const std::string term,
- const std::string s,
+ const char* term,
+ const char* s,
bool case_sensitive = false
){
- std::string new_term = term;
- std::string new_s = s;
+ auto new_term = std::string(term);
+ auto new_s = std::string(s);
if (!case_sensitive) {
std::transform(
@@ -106,7 +130,7 @@ const char* get_name(int32_t id, const tracy::Worker& worker)
}
template <typename T>
-std::string join(const T& v, std::string sep) {
+std::string join(const T& v, const char* sep) {
std::ostringstream s;
for (const auto& i : v) {
if (&i != &v[0]) {
@@ -152,11 +176,11 @@ int main(int argc, char** argv)
Args args = parse_args(argc, argv);
auto f = std::unique_ptr<tracy::FileRead>(
- tracy::FileRead::Open(args.trace_file.data())
+ tracy::FileRead::Open(args.trace_file)
);
if (!f)
{
- fprintf(stderr, "Could not open file %s\n", args.trace_file.data());
+ fprintf(stderr, "Could not open file %s\n", args.trace_file);
return 1;
}
@@ -177,7 +201,7 @@ int main(int argc, char** argv)
if(it->second.total != 0)
{
++total_cnt;
- if(args.filter.empty())
+ if(args.filter[0] == '\0')
{
slz_selected.push_back_no_space_check(it);
}