blob: 4af81a024e63a1db63fc6e182829c05d30b94a5b [file] [log] [blame]
Aron Virginas-Tar1a0f6912019-08-23 15:18:44 +01001//
Keith Davis3201eea2019-10-24 17:30:41 +01002// Copyright © 2019 Arm Ltd. All rights reserved.
Aron Virginas-Tar1a0f6912019-08-23 15:18:44 +01003// SPDX-License-Identifier: MIT
4//
5
6#include "ProfilingConnectionFactory.hpp"
Keith Davis3201eea2019-10-24 17:30:41 +01007
8#include "FileOnlyProfilingConnection.hpp"
Keith Davisb10e0812019-10-17 09:52:50 +01009#include "ProfilingConnectionDumpToFileDecorator.hpp"
Keith Davis3201eea2019-10-24 17:30:41 +010010#include "SocketProfilingConnection.hpp"
Aron Virginas-Tar1a0f6912019-08-23 15:18:44 +010011
12namespace armnn
13{
14
15namespace profiling
16{
17
18std::unique_ptr<IProfilingConnection> ProfilingConnectionFactory::GetProfilingConnection(
19 const Runtime::CreationOptions::ExternalProfilingOptions& options) const
20{
Keith Davis3201eea2019-10-24 17:30:41 +010021 // We can create 3 different types of IProfilingConnection.
22 // 1: If no relevant options are specified then a SocketProfilingConnection is returned.
23 // 2: If both incoming and outgoing capture files are specified then a SocketProfilingConnection decorated by a
24 // ProfilingConnectionDumpToFileDecorator is returned.
25 // 3: If both incoming and outgoing capture files are specified and "file only" then a FileOnlyProfilingConnection
26 // decorated by a ProfilingConnectionDumpToFileDecorator is returned.
27 if ((!options.m_IncomingCaptureFile.empty() || !options.m_OutgoingCaptureFile.empty()) && !options.m_FileOnly)
Keith Davisb10e0812019-10-17 09:52:50 +010028 {
Keith Davis3201eea2019-10-24 17:30:41 +010029 // This is type 2.
Keith Davisb10e0812019-10-17 09:52:50 +010030 return std::make_unique<ProfilingConnectionDumpToFileDecorator>(std::make_unique<SocketProfilingConnection>(),
Keith Davis3201eea2019-10-24 17:30:41 +010031 options);
32 }
33 else if ((!options.m_IncomingCaptureFile.empty() || !options.m_OutgoingCaptureFile.empty()) && options.m_FileOnly)
34 {
35 // This is type 3.
36 return std::make_unique<ProfilingConnectionDumpToFileDecorator>(
37 std::make_unique<FileOnlyProfilingConnection>(options), options);
Keith Davisb10e0812019-10-17 09:52:50 +010038 }
39 else
40 {
Keith Davis3201eea2019-10-24 17:30:41 +010041 // This is type 1.
Keith Davisb10e0812019-10-17 09:52:50 +010042 return std::make_unique<SocketProfilingConnection>();
43 }
Aron Virginas-Tar1a0f6912019-08-23 15:18:44 +010044}
45
Keith Davis3201eea2019-10-24 17:30:41 +010046} // namespace profiling
Aron Virginas-Tar1a0f6912019-08-23 15:18:44 +010047
Keith Davis3201eea2019-10-24 17:30:41 +010048} // namespace armnn