1 // 2 // Copyright © 2020 Arm Ltd. All rights reserved. 3 // SPDX-License-Identifier: MIT 4 // 5 6 #pragma once 7 8 #include <client/include/CounterStatus.hpp> 9 #include <client/include/CounterValue.hpp> 10 #include <client/include/IProfilingService.hpp> 11 #include <client/include/ISendCounterPacket.hpp> 12 #include <client/include/ISendTimelinePacket.hpp> 13 #include <client/include/ProfilingOptions.hpp> 14 #include <client/include/Timestamp.hpp> 15 16 #include <common/include/IProfilingGuidGenerator.hpp> 17 #include <common/include/Optional.hpp> 18 19 #include <memory> 20 #include <vector> 21 22 namespace arm 23 { 24 25 namespace pipe 26 { 27 28 class IRegisterBackendCounters 29 { 30 public: 31 virtual void RegisterCategory(const std::string& categoryName) = 0; 32 33 virtual uint16_t RegisterDevice(const std::string& deviceName, 34 uint16_t cores = 0, 35 const arm::pipe::Optional<std::string>& parentCategoryName 36 = arm::pipe::EmptyOptional()) = 0; 37 38 virtual uint16_t RegisterCounterSet(const std::string& counterSetName, 39 uint16_t count = 0, 40 const arm::pipe::Optional<std::string>& parentCategoryName 41 = arm::pipe::EmptyOptional()) = 0; 42 43 virtual uint16_t RegisterCounter(const uint16_t uid, 44 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; 54 ~IRegisterBackendCounters()55 virtual ~IRegisterBackendCounters() {} 56 }; 57 58 class IBackendProfiling 59 { 60 public: 61 static std::unique_ptr<IBackendProfiling> CreateBackendProfiling(const ProfilingOptions& options, 62 IProfilingService& profilingService, 63 const std::string& backendId); ~IBackendProfiling()64 virtual ~IBackendProfiling() 65 {} 66 67 virtual std::unique_ptr<IRegisterBackendCounters> 68 GetCounterRegistrationInterface(uint16_t currentMaxGlobalCounterID) = 0; 69 70 virtual std::unique_ptr<ISendTimelinePacket> GetSendTimelinePacket() = 0; 71 72 virtual IProfilingGuidGenerator& GetProfilingGuidGenerator() = 0; 73 74 virtual void ReportCounters(const std::vector<Timestamp>& counterValues) = 0; 75 76 virtual CounterStatus GetCounterStatus(uint16_t backendCounterId) = 0; 77 78 virtual std::vector<CounterStatus> GetActiveCounters() = 0; 79 80 virtual bool IsProfilingEnabled() const = 0; 81 82 }; 83 84 } // namespace pipe 85 86 } // namespace arm 87