blob: 5f15db90028ac4cc3ce8e5645b5951f0ef7d9afd [file] [log] [blame]
Colm Donelana21620d2019-10-11 13:09:49 +01001//
2// Copyright © 2019 Arm Ltd. All rights reserved.
3// SPDX-License-Identifier: MIT
4//
5
Colm Donelanb682d842019-10-16 12:24:20 +01006#include "../../../src/profiling/PacketVersionResolver.hpp"
7#include "../../../src/profiling/PeriodicCounterSelectionCommandHandler.hpp"
Colm Donelana21620d2019-10-11 13:09:49 +01008#include "CommandFileParser.hpp"
9#include "CommandLineProcessor.hpp"
Finn Williams15db7452019-10-15 14:22:13 +010010#include "DirectoryCaptureCommandHandler.hpp"
Colm Donelana21620d2019-10-11 13:09:49 +010011#include "GatordMockService.hpp"
Colm Donelana21620d2019-10-11 13:09:49 +010012#include "PeriodicCounterCaptureCommandHandler.hpp"
Colm Donelanb682d842019-10-16 12:24:20 +010013#include "PeriodicCounterSelectionResponseHandler.hpp"
Colm Donelana21620d2019-10-11 13:09:49 +010014
Colm Donelanb682d842019-10-16 12:24:20 +010015#include <iostream>
Colm Donelana21620d2019-10-11 13:09:49 +010016#include <string>
17
Colm Donelanb682d842019-10-16 12:24:20 +010018int main(int argc, char* argv[])
Colm Donelana21620d2019-10-11 13:09:49 +010019{
20 // Process command line arguments
21 armnn::gatordmock::CommandLineProcessor cmdLine;
22 if (!cmdLine.ProcessCommandLine(argc, argv))
23 {
24 return EXIT_FAILURE;
25 }
26
Colm Donelanb682d842019-10-16 12:24:20 +010027 armnn::profiling::PacketVersionResolver packetVersionResolver;
Colm Donelana21620d2019-10-11 13:09:49 +010028 // Create the Command Handler Registry
29 armnn::profiling::CommandHandlerRegistry registry;
30
Colm Donelanb682d842019-10-16 12:24:20 +010031 // This functor will receive back the selection response packet.
32 armnn::gatordmock::PeriodicCounterSelectionResponseHandler periodicCounterSelectionResponseHandler(
Jim Flynned25e0e2019-10-18 13:21:43 +010033 0, 4, packetVersionResolver.ResolvePacketVersion(0, 4).GetEncodedValue());
Colm Donelanb682d842019-10-16 12:24:20 +010034 // This functor will receive the counter data.
35 armnn::gatordmock::PeriodicCounterCaptureCommandHandler counterCaptureCommandHandler(
Jim Flynned25e0e2019-10-18 13:21:43 +010036 1, 0, packetVersionResolver.ResolvePacketVersion(1, 0).GetEncodedValue());
Colm Donelana21620d2019-10-11 13:09:49 +010037
Keith Davis3201eea2019-10-24 17:30:41 +010038 armnn::profiling::DirectoryCaptureCommandHandler directoryCaptureCommandHandler(
39 0, 2, packetVersionResolver.ResolvePacketVersion(0, 2).GetEncodedValue(), false);
Finn Williams15db7452019-10-15 14:22:13 +010040
Colm Donelana21620d2019-10-11 13:09:49 +010041 // Register different derived functors
Colm Donelanb682d842019-10-16 12:24:20 +010042 registry.RegisterFunctor(&periodicCounterSelectionResponseHandler);
Colm Donelana21620d2019-10-11 13:09:49 +010043 registry.RegisterFunctor(&counterCaptureCommandHandler);
Finn Williams15db7452019-10-15 14:22:13 +010044 registry.RegisterFunctor(&directoryCaptureCommandHandler);
Colm Donelana21620d2019-10-11 13:09:49 +010045
46 armnn::gatordmock::GatordMockService mockService(registry, cmdLine.IsEchoEnabled());
47
48 if (!mockService.OpenListeningSocket(cmdLine.GetUdsNamespace()))
49 {
50 return EXIT_FAILURE;
51 }
Colm Donelanb682d842019-10-16 12:24:20 +010052 std::cout << "Bound to UDS namespace: \\0" << cmdLine.GetUdsNamespace() << std::endl;
Colm Donelana21620d2019-10-11 13:09:49 +010053
54 // Wait for a single connection.
55 if (-1 == mockService.BlockForOneClient())
56 {
57 return EXIT_FAILURE;
58 }
Colm Donelanb682d842019-10-16 12:24:20 +010059 std::cout << "Client connection established." << std::endl;
Colm Donelana21620d2019-10-11 13:09:49 +010060
61 // Send receive the strweam metadata and send connection ack.
62 if (!mockService.WaitForStreamMetaData())
63 {
64 return EXIT_FAILURE;
65 }
66 mockService.SendConnectionAck();
67
68 // Prepare to receive data.
69 mockService.LaunchReceivingThread();
70
71 // Process the SET and WAIT command from the file.
72 armnn::gatordmock::CommandFileParser commandLineParser;
73 commandLineParser.ParseFile(cmdLine.GetCommandFile(), mockService);
74
75 // Once we've finished processing the file wait for the receiving thread to close.
76 mockService.WaitForReceivingThread();
77
78 return EXIT_SUCCESS;
79}