blob: a9d29c504fe1468ad9571704e4f2bf2a387e5d04 [file] [log] [blame]
Colm Donelane49755b2020-01-29 15:22:43 +00001//
2// Copyright © 2020 Arm Ltd. All rights reserved.
3// SPDX-License-Identifier: MIT
4//
Jim Flynn3e9bc192022-03-23 23:01:26 +00005
Colm Donelane49755b2020-01-29 15:22:43 +00006#pragma once
7
Jim Flynn3e9bc192022-03-23 23:01:26 +00008#include <client/include/CounterStatus.hpp>
9#include <client/include/CounterValue.hpp>
10#include <client/include/IProfilingService.hpp>
11#include <client/include/ISendCounterPacket.hpp>
Jim Flynn27761832022-03-20 21:52:17 +000012#include <client/include/ISendTimelinePacket.hpp>
Jim Flynn3e9bc192022-03-23 23:01:26 +000013#include <client/include/ProfilingOptions.hpp>
14#include <client/include/Timestamp.hpp>
Nikhil Raj5b1bcc92021-06-08 12:31:50 +010015
16#include <common/include/IProfilingGuidGenerator.hpp>
Jim Flynndecd08b2022-03-13 22:35:46 +000017#include <common/include/Optional.hpp>
Nikhil Raj5b1bcc92021-06-08 12:31:50 +010018
Colm Donelane49755b2020-01-29 15:22:43 +000019#include <memory>
20#include <vector>
21
Cathal Corbett5aa9fd72022-02-25 15:33:28 +000022namespace arm
Colm Donelane49755b2020-01-29 15:22:43 +000023{
24
Cathal Corbett5aa9fd72022-02-25 15:33:28 +000025namespace pipe
Colm Donelane49755b2020-01-29 15:22:43 +000026{
27
Colm Donelane49755b2020-01-29 15:22:43 +000028class IRegisterBackendCounters
29{
30public:
Sadik Armagan4c998992020-02-25 12:44:44 +000031 virtual void RegisterCategory(const std::string& categoryName) = 0;
Colm Donelane49755b2020-01-29 15:22:43 +000032
Jim Flynn97897022020-02-02 12:52:59 +000033 virtual uint16_t RegisterDevice(const std::string& deviceName,
34 uint16_t cores = 0,
Jim Flynndecd08b2022-03-13 22:35:46 +000035 const arm::pipe::Optional<std::string>& parentCategoryName
36 = arm::pipe::EmptyOptional()) = 0;
Colm Donelane49755b2020-01-29 15:22:43 +000037
Jim Flynn97897022020-02-02 12:52:59 +000038 virtual uint16_t RegisterCounterSet(const std::string& counterSetName,
39 uint16_t count = 0,
Jim Flynndecd08b2022-03-13 22:35:46 +000040 const arm::pipe::Optional<std::string>& parentCategoryName
41 = arm::pipe::EmptyOptional()) = 0;
Colm Donelane49755b2020-01-29 15:22:43 +000042
Jim Flynn97897022020-02-02 12:52:59 +000043 virtual uint16_t RegisterCounter(const uint16_t uid,
Jim Flynndecd08b2022-03-13 22:35:46 +000044 const std::string& parentCategoryName,
45 uint16_t counterClass,
46 uint16_t interpolation,
47 double multiplier,
48 const std::string& name,
49 const std::string& description,
50 const arm::pipe::Optional<std::string>& units = arm::pipe::EmptyOptional(),
51 const arm::pipe::Optional<uint16_t>& numberOfCores = arm::pipe::EmptyOptional(),
52 const arm::pipe::Optional<uint16_t>& deviceUid = arm::pipe::EmptyOptional(),
53 const arm::pipe::Optional<uint16_t>& counterSetUid = arm::pipe::EmptyOptional()) = 0;
Jim Flynn97897022020-02-02 12:52:59 +000054
55 virtual ~IRegisterBackendCounters() {}
Colm Donelane49755b2020-01-29 15:22:43 +000056};
57
58class IBackendProfiling
59{
Colm Donelane49755b2020-01-29 15:22:43 +000060public:
Jim Flynn3e9bc192022-03-23 23:01:26 +000061 static std::unique_ptr<IBackendProfiling> CreateBackendProfiling(const ProfilingOptions& options,
62 IProfilingService& profilingService,
63 const std::string& backendId);
Colm Donelane49755b2020-01-29 15:22:43 +000064 virtual ~IBackendProfiling()
65 {}
66
Colm Donelan1aff3932020-02-05 17:48:59 +000067 virtual std::unique_ptr<IRegisterBackendCounters>
James Conroy2dcd3fe2020-02-06 18:34:52 +000068 GetCounterRegistrationInterface(uint16_t currentMaxGlobalCounterID) = 0;
Colm Donelane49755b2020-01-29 15:22:43 +000069
Colm Donelan1aff3932020-02-05 17:48:59 +000070 virtual std::unique_ptr<ISendTimelinePacket> GetSendTimelinePacket() = 0;
Colm Donelane49755b2020-01-29 15:22:43 +000071
Colm Donelan1aff3932020-02-05 17:48:59 +000072 virtual IProfilingGuidGenerator& GetProfilingGuidGenerator() = 0;
Colm Donelane49755b2020-01-29 15:22:43 +000073
Colm Donelan1aff3932020-02-05 17:48:59 +000074 virtual void ReportCounters(const std::vector<Timestamp>& counterValues) = 0;
Colm Donelane49755b2020-01-29 15:22:43 +000075
Colm Donelan1aff3932020-02-05 17:48:59 +000076 virtual CounterStatus GetCounterStatus(uint16_t backendCounterId) = 0;
Colm Donelane49755b2020-01-29 15:22:43 +000077
Colm Donelan1aff3932020-02-05 17:48:59 +000078 virtual std::vector<CounterStatus> GetActiveCounters() = 0;
Colm Donelane49755b2020-01-29 15:22:43 +000079
Colm Donelan1aff3932020-02-05 17:48:59 +000080 virtual bool IsProfilingEnabled() const = 0;
81
Colm Donelane49755b2020-01-29 15:22:43 +000082};
James Conroy2dcd3fe2020-02-06 18:34:52 +000083
Cathal Corbett5aa9fd72022-02-25 15:33:28 +000084} // namespace pipe
James Conroy2dcd3fe2020-02-06 18:34:52 +000085
Jim Flynn8de9d442022-03-07 14:14:28 +000086} // namespace arm