diff options
Diffstat (limited to 'profiling/client/include/backends/IBackendProfiling.hpp')
-rw-r--r-- | profiling/client/include/backends/IBackendProfiling.hpp | 106 |
1 files changed, 106 insertions, 0 deletions
diff --git a/profiling/client/include/backends/IBackendProfiling.hpp b/profiling/client/include/backends/IBackendProfiling.hpp new file mode 100644 index 0000000000..347d2ddf03 --- /dev/null +++ b/profiling/client/include/backends/IBackendProfiling.hpp @@ -0,0 +1,106 @@ +// +// Copyright © 2020 Arm Ltd. All rights reserved. +// SPDX-License-Identifier: MIT +// +#pragma once + +#include <client/include/ISendTimelinePacket.hpp> + +#include <common/include/IProfilingGuidGenerator.hpp> +#include <common/include/Optional.hpp> + +#include <memory> +#include <vector> + +namespace arm +{ + +namespace pipe +{ + +struct CounterValue +{ + CounterValue(uint16_t id, uint32_t value) : + counterId(id), counterValue(value) {} + uint16_t counterId; + uint32_t counterValue; +}; + +struct Timestamp +{ + uint64_t timestamp; + std::vector<CounterValue> counterValues; +}; + +struct CounterStatus +{ + CounterStatus(uint16_t backendCounterId, + uint16_t globalCounterId, + bool enabled, + uint32_t samplingRateInMicroseconds) + : m_BackendCounterId(backendCounterId), + m_GlobalCounterId(globalCounterId), + m_Enabled(enabled), + m_SamplingRateInMicroseconds(samplingRateInMicroseconds) {} + uint16_t m_BackendCounterId; + uint16_t m_GlobalCounterId; + bool m_Enabled; + uint32_t m_SamplingRateInMicroseconds; +}; + +class IRegisterBackendCounters +{ +public: + virtual void RegisterCategory(const std::string& categoryName) = 0; + + virtual uint16_t RegisterDevice(const std::string& deviceName, + uint16_t cores = 0, + const arm::pipe::Optional<std::string>& parentCategoryName + = arm::pipe::EmptyOptional()) = 0; + + virtual uint16_t RegisterCounterSet(const std::string& counterSetName, + uint16_t count = 0, + const arm::pipe::Optional<std::string>& parentCategoryName + = arm::pipe::EmptyOptional()) = 0; + + virtual uint16_t RegisterCounter(const uint16_t uid, + const std::string& parentCategoryName, + uint16_t counterClass, + uint16_t interpolation, + double multiplier, + const std::string& name, + const std::string& description, + const arm::pipe::Optional<std::string>& units = arm::pipe::EmptyOptional(), + const arm::pipe::Optional<uint16_t>& numberOfCores = arm::pipe::EmptyOptional(), + const arm::pipe::Optional<uint16_t>& deviceUid = arm::pipe::EmptyOptional(), + const arm::pipe::Optional<uint16_t>& counterSetUid = arm::pipe::EmptyOptional()) = 0; + + virtual ~IRegisterBackendCounters() {} +}; + +class IBackendProfiling +{ +public: + virtual ~IBackendProfiling() + {} + + virtual std::unique_ptr<IRegisterBackendCounters> + GetCounterRegistrationInterface(uint16_t currentMaxGlobalCounterID) = 0; + + virtual std::unique_ptr<ISendTimelinePacket> GetSendTimelinePacket() = 0; + + virtual IProfilingGuidGenerator& GetProfilingGuidGenerator() = 0; + + virtual void ReportCounters(const std::vector<Timestamp>& counterValues) = 0; + + virtual CounterStatus GetCounterStatus(uint16_t backendCounterId) = 0; + + virtual std::vector<CounterStatus> GetActiveCounters() = 0; + + virtual bool IsProfilingEnabled() const = 0; + +}; + +} // namespace pipe + +} // namespace arm |