1*6fa2df46SAndroid Build Coastguard Worker // Copyright (C) 2021 The Android Open Source Project
2*6fa2df46SAndroid Build Coastguard Worker //
3*6fa2df46SAndroid Build Coastguard Worker // Licensed under the Apache License, Version 2.0 (the "License");
4*6fa2df46SAndroid Build Coastguard Worker // you may not use this file except in compliance with the License.
5*6fa2df46SAndroid Build Coastguard Worker // You may obtain a copy of the License at
6*6fa2df46SAndroid Build Coastguard Worker //
7*6fa2df46SAndroid Build Coastguard Worker // http://www.apache.org/licenses/LICENSE-2.0
8*6fa2df46SAndroid Build Coastguard Worker //
9*6fa2df46SAndroid Build Coastguard Worker // Unless required by applicable law or agreed to in writing, software
10*6fa2df46SAndroid Build Coastguard Worker // distributed under the License is distributed on an "AS IS" BASIS,
11*6fa2df46SAndroid Build Coastguard Worker // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12*6fa2df46SAndroid Build Coastguard Worker // See the License for the specific language governing permissions and
13*6fa2df46SAndroid Build Coastguard Worker // limitations under the License.
14*6fa2df46SAndroid Build Coastguard Worker
15*6fa2df46SAndroid Build Coastguard Worker #include <getopt.h>
16*6fa2df46SAndroid Build Coastguard Worker #include <unistd.h>
17*6fa2df46SAndroid Build Coastguard Worker
18*6fa2df46SAndroid Build Coastguard Worker #include <cstring>
19*6fa2df46SAndroid Build Coastguard Worker #include <string>
20*6fa2df46SAndroid Build Coastguard Worker
21*6fa2df46SAndroid Build Coastguard Worker #include <ditto/arg_parser.h>
22*6fa2df46SAndroid Build Coastguard Worker #include <ditto/instruction.h>
23*6fa2df46SAndroid Build Coastguard Worker #include <ditto/logger.h>
24*6fa2df46SAndroid Build Coastguard Worker #include <ditto/parser.h>
25*6fa2df46SAndroid Build Coastguard Worker #include <ditto/tracer.h>
26*6fa2df46SAndroid Build Coastguard Worker
main(int argc,char ** argv)27*6fa2df46SAndroid Build Coastguard Worker int main(int argc, char** argv) {
28*6fa2df46SAndroid Build Coastguard Worker dittosuite::Tracer tracer;
29*6fa2df46SAndroid Build Coastguard Worker dittosuite::CmdArguments arguments = dittosuite::ParseArguments(argc, argv);
30*6fa2df46SAndroid Build Coastguard Worker dittosuite::Instruction::SetArgv(argv);
31*6fa2df46SAndroid Build Coastguard Worker dittosuite::Instruction::SetArgc(argc);
32*6fa2df46SAndroid Build Coastguard Worker auto& parser = dittosuite::Parser::GetParser();
33*6fa2df46SAndroid Build Coastguard Worker
34*6fa2df46SAndroid Build Coastguard Worker auto benchmark = arguments.embedded_benchmark.size()
35*6fa2df46SAndroid Build Coastguard Worker ? parser.ParseEmbedded(arguments.embedded_benchmark, arguments.parameters)
36*6fa2df46SAndroid Build Coastguard Worker : parser.ParseFile(arguments.file_path, arguments.parameters);
37*6fa2df46SAndroid Build Coastguard Worker tracer.StartSession(std::move(benchmark));
38*6fa2df46SAndroid Build Coastguard Worker
39*6fa2df46SAndroid Build Coastguard Worker auto init = dittosuite::Parser::GetParser().GetInit();
40*6fa2df46SAndroid Build Coastguard Worker if (init != nullptr) {
41*6fa2df46SAndroid Build Coastguard Worker init->SetUp();
42*6fa2df46SAndroid Build Coastguard Worker init->Run();
43*6fa2df46SAndroid Build Coastguard Worker init->TearDown();
44*6fa2df46SAndroid Build Coastguard Worker }
45*6fa2df46SAndroid Build Coastguard Worker
46*6fa2df46SAndroid Build Coastguard Worker auto main = dittosuite::Parser::GetParser().GetMain();
47*6fa2df46SAndroid Build Coastguard Worker main->SetUp();
48*6fa2df46SAndroid Build Coastguard Worker tracer.Start("Benchmark");
49*6fa2df46SAndroid Build Coastguard Worker main->Run();
50*6fa2df46SAndroid Build Coastguard Worker tracer.End("Benchmark");
51*6fa2df46SAndroid Build Coastguard Worker main->TearDown();
52*6fa2df46SAndroid Build Coastguard Worker
53*6fa2df46SAndroid Build Coastguard Worker auto result = main->CollectResults("");
54*6fa2df46SAndroid Build Coastguard Worker result->Print(arguments.results_output, "");
55*6fa2df46SAndroid Build Coastguard Worker
56*6fa2df46SAndroid Build Coastguard Worker auto clean_up = dittosuite::Parser::GetParser().GetCleanUp();
57*6fa2df46SAndroid Build Coastguard Worker if (clean_up != nullptr) {
58*6fa2df46SAndroid Build Coastguard Worker clean_up->SetUp();
59*6fa2df46SAndroid Build Coastguard Worker clean_up->Run();
60*6fa2df46SAndroid Build Coastguard Worker clean_up->TearDown();
61*6fa2df46SAndroid Build Coastguard Worker }
62*6fa2df46SAndroid Build Coastguard Worker return 0;
63*6fa2df46SAndroid Build Coastguard Worker }
64