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