| /* |
| Copyright (C) 2026 Intel Corporation |
| SPDX-License-Identifier: (BSD-3-Clause OR GPL-2.0-only) |
| */ |
| |
| #ifndef ITTAPI_FRAME_HPP |
| #define ITTAPI_FRAME_HPP |
| |
| #include "ittapi_utils.hpp" |
| |
| namespace ittapi |
| { |
| |
| class Domain; |
| |
| class ScopedFrame |
| { |
| public: |
| explicit ScopedFrame(const __itt_domain* domain) noexcept |
| : m_domain(domain) |
| , m_id(detail::get_null_id()) |
| , m_active(true) |
| { |
| __itt_frame_begin_v3(m_domain, &m_id); |
| } |
| |
| ScopedFrame(const ScopedFrame&) = delete; |
| ScopedFrame& operator=(const ScopedFrame&) = delete; |
| ScopedFrame& operator=(ScopedFrame&&) = delete; |
| |
| ScopedFrame(ScopedFrame&& other) noexcept |
| : m_domain(other.m_domain) |
| , m_id(other.m_id) |
| , m_active(other.m_active) |
| { |
| other.m_active = false; |
| } |
| |
| ~ScopedFrame() noexcept |
| { |
| end(); |
| } |
| |
| void end() noexcept |
| { |
| if (m_active) |
| { |
| __itt_frame_end_v3(m_domain, &m_id); |
| m_active = false; |
| } |
| } |
| |
| bool active() const noexcept |
| { |
| return m_active; |
| } |
| |
| static void submit(const __itt_domain* domain, __itt_timestamp begin, __itt_timestamp end) noexcept |
| { |
| __itt_id id = detail::get_null_id(); |
| __itt_frame_submit_v3(domain, &id, begin, end); |
| } |
| |
| private: |
| const __itt_domain* m_domain = nullptr; |
| __itt_id m_id{}; |
| bool m_active = false; |
| }; |
| |
| } // namespace ittapi |
| |
| #endif // ITTAPI_FRAME_HPP |