1 // 2 // Copyright © 2020 Arm Ltd and Contributors. All rights reserved. 3 // SPDX-License-Identifier: MIT 4 // 5 6 #pragma once 7 8 #include "CounterIdMap.hpp" 9 #include "Holder.hpp" 10 #include "ICounterValues.hpp" 11 #include "IInitialiseProfilingService.hpp" 12 #include "IProfilingServiceStatus.hpp" 13 #include "ISendCounterPacket.hpp" 14 #include "ISendTimelinePacket.hpp" 15 #include "IReportStructure.hpp" 16 #include "ProfilingOptions.hpp" 17 #include "ProfilingState.hpp" 18 19 #include <common/include/ICounterRegistry.hpp> 20 #include <common/include/Optional.hpp> 21 #include <common/include/ProfilingGuidGenerator.hpp> 22 23 24 namespace arm 25 { 26 27 namespace pipe 28 { 29 30 // forward declaration 31 class IBackendProfilingContext; 32 33 class IProfilingService : public IProfilingGuidGenerator, 34 public IProfilingServiceStatus, 35 public IReadWriteCounterValues 36 { 37 public: 38 static std::unique_ptr<IProfilingService> CreateProfilingService( 39 uint16_t maxGlobalCounterId, 40 IInitialiseProfilingService& initialiser, 41 const std::string& softwareInfo, 42 const std::string& softwareVersion, 43 const std::string& hardwareVersion, 44 arm::pipe::Optional<IReportStructure&> reportStructure = arm::pipe::EmptyOptional()); ~IProfilingService()45 virtual ~IProfilingService() {}; 46 virtual std::unique_ptr<ISendTimelinePacket> GetSendTimelinePacket() const = 0; 47 virtual const ICounterMappings& GetCounterMappings() const = 0; 48 virtual ISendCounterPacket& GetSendCounterPacket() = 0; 49 virtual bool IsProfilingEnabled() const = 0; 50 virtual bool IsTimelineReportingEnabled() const = 0; 51 virtual CaptureData GetCaptureData() = 0; 52 virtual ProfilingState GetCurrentState() const = 0; 53 // Resets the profiling options, optionally clears the profiling service entirely 54 virtual void ResetExternalProfilingOptions(const ProfilingOptions& options, 55 bool resetProfilingService = false) = 0; 56 virtual ProfilingState ConfigureProfilingService(const ProfilingOptions& options, 57 bool resetProfilingService = false) = 0; 58 // Store a profiling context returned from a backend that support profiling. 59 virtual void AddBackendProfilingContext(const std::string& backendId, 60 std::shared_ptr<IBackendProfilingContext> profilingContext) = 0; 61 virtual ICounterRegistry& GetCounterRegistry() = 0; 62 virtual IRegisterCounterMapping& GetCounterMappingRegistry() = 0; 63 virtual bool IsCategoryRegistered(const std::string& categoryName) const = 0; 64 virtual void InitializeCounterValue(uint16_t counterUid) = 0; 65 66 // IProfilingGuidGenerator functions 67 /// Return the next random Guid in the sequence 68 ProfilingDynamicGuid NextGuid() override; 69 /// Create a ProfilingStaticGuid based on a hash of the string 70 ProfilingStaticGuid GenerateStaticId(const std::string& str) override; 71 static ProfilingDynamicGuid GetNextGuid(); 72 static ProfilingStaticGuid GetStaticId(const std::string& str); 73 void ResetGuidGenerator(); 74 75 virtual void Disconnect() = 0; 76 77 private: 78 static ProfilingGuidGenerator m_GuidGenerator; 79 }; 80 81 } // namespace pipe 82 83 } // namespace arm 84