diff options
Diffstat (limited to 'profiling/client/src/PeriodicCounterCapture.hpp')
-rw-r--r-- | profiling/client/src/PeriodicCounterCapture.hpp | 71 |
1 files changed, 71 insertions, 0 deletions
diff --git a/profiling/client/src/PeriodicCounterCapture.hpp b/profiling/client/src/PeriodicCounterCapture.hpp new file mode 100644 index 0000000000..88084172ca --- /dev/null +++ b/profiling/client/src/PeriodicCounterCapture.hpp @@ -0,0 +1,71 @@ +// +// Copyright © 2019 Arm Ltd. All rights reserved. +// SPDX-License-Identifier: MIT +// + +#pragma once + +#include "IPeriodicCounterCapture.hpp" +#include "SendCounterPacket.hpp" + +#include <client/include/CounterIdMap.hpp> +#include <client/include/Holder.hpp> +#include <client/include/ICounterValues.hpp> + +#include <client/include/backends/IBackendProfilingContext.hpp> + +#include <common/include/Packet.hpp> + +#include <atomic> +#include <mutex> +#include <thread> + +namespace arm +{ + +namespace pipe +{ + +class PeriodicCounterCapture final : public IPeriodicCounterCapture +{ +public: + PeriodicCounterCapture(const Holder& data, + ISendCounterPacket& packet, + IReadCounterValues& readCounterValue, + const ICounterMappings& counterIdMap, + const std::unordered_map<std::string, + std::shared_ptr<IBackendProfilingContext>>& backendProfilingContexts) + : m_CaptureDataHolder(data) + , m_IsRunning(false) + , m_KeepRunning(false) + , m_ReadCounterValues(readCounterValue) + , m_SendCounterPacket(packet) + , m_CounterIdMap(counterIdMap) + , m_BackendProfilingContexts(backendProfilingContexts) + {} + ~PeriodicCounterCapture() { Stop(); } + + void Start() override; + void Stop() override; + bool IsRunning() const { return m_IsRunning; } + +private: + CaptureData ReadCaptureData(); + void Capture(IReadCounterValues& readCounterValues); + void DispatchPeriodicCounterCapturePacket( + const std::string& backendId, const std::vector<Timestamp>& timestampValues); + + const Holder& m_CaptureDataHolder; + bool m_IsRunning; + std::atomic<bool> m_KeepRunning; + std::thread m_PeriodCaptureThread; + IReadCounterValues& m_ReadCounterValues; + ISendCounterPacket& m_SendCounterPacket; + const ICounterMappings& m_CounterIdMap; + const std::unordered_map<std::string, + std::shared_ptr<IBackendProfilingContext>>& m_BackendProfilingContexts; +}; + +} // namespace pipe + +} // namespace arm |