diff options
Diffstat (limited to 'profiling/client/src/backends')
-rw-r--r-- | profiling/client/src/backends/BackendProfiling.cpp | 97 | ||||
-rw-r--r-- | profiling/client/src/backends/BackendProfiling.hpp | 53 | ||||
-rw-r--r-- | profiling/client/src/backends/IBackendProfiling.cpp | 24 |
3 files changed, 174 insertions, 0 deletions
diff --git a/profiling/client/src/backends/BackendProfiling.cpp b/profiling/client/src/backends/BackendProfiling.cpp new file mode 100644 index 0000000000..c33d5a738a --- /dev/null +++ b/profiling/client/src/backends/BackendProfiling.cpp @@ -0,0 +1,97 @@ +// +// Copyright © 2020 Arm Ltd. All rights reserved. +// SPDX-License-Identifier: MIT +// + +#include "BackendProfiling.hpp" +#include <client/src/RegisterBackendCounters.hpp> + +namespace arm +{ + +namespace pipe +{ + +std::unique_ptr<IRegisterBackendCounters> + BackendProfiling::GetCounterRegistrationInterface(uint16_t currentMaxGlobalCounterID) +{ + return std::make_unique<RegisterBackendCounters>( + RegisterBackendCounters(currentMaxGlobalCounterID, m_BackendId, m_ProfilingService)); +} + +std::unique_ptr<ISendTimelinePacket> BackendProfiling::GetSendTimelinePacket() +{ + return m_ProfilingService.GetSendTimelinePacket(); +} + +IProfilingGuidGenerator& BackendProfiling::GetProfilingGuidGenerator() +{ + // The profiling service is our Guid Generator. + return m_ProfilingService; +} + +void BackendProfiling::ReportCounters(const std::vector<Timestamp>& timestamps) +{ + for (const auto& timestampInfo : timestamps) + { + std::vector<CounterValue> backendCounterValues = timestampInfo.counterValues; + for_each(backendCounterValues.begin(), backendCounterValues.end(), [&](CounterValue& backendCounterValue) + { + // translate the counterId to globalCounterId + backendCounterValue.counterId = m_ProfilingService.GetCounterMappings().GetGlobalId( + backendCounterValue.counterId, m_BackendId); + }); + + // Send Periodic Counter Capture Packet for the Timestamp + m_ProfilingService.GetSendCounterPacket().SendPeriodicCounterCapturePacket( + timestampInfo.timestamp, backendCounterValues); + } +} + +CounterStatus BackendProfiling::GetCounterStatus(uint16_t backendCounterId) +{ + uint16_t globalCounterId = m_ProfilingService.GetCounterMappings().GetGlobalId(backendCounterId, m_BackendId); + CaptureData captureData = m_ProfilingService.GetCaptureData(); + + CounterStatus counterStatus(backendCounterId, globalCounterId, false, 0); + + if (captureData.IsCounterIdInCaptureData(globalCounterId)) + { + counterStatus.m_Enabled = true; + counterStatus.m_SamplingRateInMicroseconds = captureData.GetCapturePeriod(); + } + + return counterStatus; +} + +std::vector<CounterStatus> BackendProfiling::GetActiveCounters() +{ + CaptureData captureData = m_ProfilingService.GetCaptureData(); + + const std::vector<uint16_t>& globalCounterIds = captureData.GetCounterIds(); + std::vector<CounterStatus> activeCounterIds; + + for (auto globalCounterId : globalCounterIds) { + // Get pair of local counterId and backendId using globalCounterId + const std::pair<uint16_t, std::string>& backendCounterIdPair = + m_ProfilingService.GetCounterMappings().GetBackendId(globalCounterId); + if (backendCounterIdPair.second == m_BackendId) + { + activeCounterIds.emplace_back(backendCounterIdPair.first, + globalCounterId, + true, + captureData.GetCapturePeriod()); + } + } + + return activeCounterIds; +} + +bool BackendProfiling::IsProfilingEnabled() const +{ + return m_ProfilingService.IsProfilingEnabled(); +} + +} // namespace pipe + +} // namespace arm diff --git a/profiling/client/src/backends/BackendProfiling.hpp b/profiling/client/src/backends/BackendProfiling.hpp new file mode 100644 index 0000000000..4db02f9573 --- /dev/null +++ b/profiling/client/src/backends/BackendProfiling.hpp @@ -0,0 +1,53 @@ +// +// Copyright © 2020 Arm Ltd. All rights reserved. +// SPDX-License-Identifier: MIT +// + +#pragma once + +#include <client/include/backends/IBackendProfiling.hpp> +#include <client/include/IProfilingService.hpp> + +namespace arm +{ + +namespace pipe +{ + +class BackendProfiling : public IBackendProfiling +{ +public: + BackendProfiling(const ProfilingOptions& options, + IProfilingService& profilingService, + const std::string& backendId) + : m_Options(options), + m_ProfilingService(profilingService), + m_BackendId(backendId) {} + + ~BackendProfiling() + {} + + std::unique_ptr<IRegisterBackendCounters> + GetCounterRegistrationInterface(uint16_t currentMaxGlobalCounterID) override; + + std::unique_ptr<ISendTimelinePacket> GetSendTimelinePacket() override; + + IProfilingGuidGenerator& GetProfilingGuidGenerator() override; + + void ReportCounters(const std::vector<Timestamp>&) override; + + CounterStatus GetCounterStatus(uint16_t backendCounterId) override; + + std::vector<CounterStatus> GetActiveCounters() override; + + bool IsProfilingEnabled() const override; + +private: + ProfilingOptions m_Options; + IProfilingService& m_ProfilingService; + std::string m_BackendId; +}; + +} // namespace pipe + +} // namespace arm diff --git a/profiling/client/src/backends/IBackendProfiling.cpp b/profiling/client/src/backends/IBackendProfiling.cpp new file mode 100644 index 0000000000..f172be9f51 --- /dev/null +++ b/profiling/client/src/backends/IBackendProfiling.cpp @@ -0,0 +1,24 @@ +// +// Copyright © 2022 Arm Ltd and Contributors. All rights reserved. +// SPDX-License-Identifier: MIT +// + +#include "BackendProfiling.hpp" + +#include <client/include/backends/IBackendProfiling.hpp> + +namespace arm +{ + +namespace pipe +{ + +std::unique_ptr<IBackendProfiling> IBackendProfiling::CreateBackendProfiling(const ProfilingOptions& options, + IProfilingService& profilingService, + const std::string& backendId) +{ + return std::make_unique<BackendProfiling>(options, profilingService, backendId); +} + +} // namespace pipe +} // namespace arm |