blob: 6d617978e5a134cb556a884cb22573409f88afb0 [file] [log] [blame]
Keith Davis02356de2019-08-26 18:28:17 +01001//
2// Copyright © 2017 Arm Ltd. All rights reserved.
3// SPDX-License-Identifier: MIT
4//
5
6#pragma once
7
8#include "ProfilingStateMachine.hpp"
9#include "ProfilingConnectionFactory.hpp"
FinnWilliamsArmce2d9d12019-09-18 10:28:16 +010010#include "CounterDirectory.hpp"
FinnWilliamsArmf6e534a2019-09-16 15:45:42 +010011#include "CounterValues.hpp"
Keith Davis02356de2019-08-26 18:28:17 +010012
13namespace armnn
14{
15
16namespace profiling
17{
18
FinnWilliamsArmf6e534a2019-09-16 15:45:42 +010019class ProfilingService : IWriteCounterValues
Keith Davis02356de2019-08-26 18:28:17 +010020{
21public:
22 ProfilingService(const Runtime::CreationOptions::ExternalProfilingOptions& options);
23 ~ProfilingService() = default;
24
25 void Run();
26
FinnWilliamsArmce2d9d12019-09-18 10:28:16 +010027 const ICounterDirectory& GetCounterDirectory() const;
Keith Davis02356de2019-08-26 18:28:17 +010028 ProfilingState GetCurrentState() const;
FinnWilliamsArmce2d9d12019-09-18 10:28:16 +010029 void ResetExternalProfilingOptions(const Runtime::CreationOptions::ExternalProfilingOptions& options);
Keith Davis02356de2019-08-26 18:28:17 +010030
FinnWilliamsArmf6e534a2019-09-16 15:45:42 +010031 uint16_t GetCounterCount() const;
32 void GetCounterValue(uint16_t index, uint32_t& value) const;
33 void SetCounterValue(uint16_t index, uint32_t value);
34 void AddCounterValue(uint16_t index, uint32_t value);
35 void SubtractCounterValue(uint16_t index, uint32_t value);
36 void IncrementCounterValue(uint16_t index);
37 void DecrementCounterValue(uint16_t index);
38
Keith Davis02356de2019-08-26 18:28:17 +010039private:
40 void Initialise();
FinnWilliamsArmf6e534a2019-09-16 15:45:42 +010041 void CheckIndexSize(uint16_t counterIndex) const;
Keith Davis02356de2019-08-26 18:28:17 +010042
FinnWilliamsArmce2d9d12019-09-18 10:28:16 +010043 CounterDirectory m_CounterDirectory;
Keith Davis02356de2019-08-26 18:28:17 +010044 ProfilingConnectionFactory m_Factory;
FinnWilliamsArmce2d9d12019-09-18 10:28:16 +010045 Runtime::CreationOptions::ExternalProfilingOptions m_Options;
46 ProfilingStateMachine m_State;
FinnWilliamsArmf6e534a2019-09-16 15:45:42 +010047
48 std::unordered_map<uint16_t, std::atomic<uint32_t>> m_CounterIdToValue;
Keith Davis02356de2019-08-26 18:28:17 +010049};
50
51} // namespace profiling
52
53} // namespace armnn