xref: /openbsd-src/gnu/llvm/lldb/source/Plugins/Trace/intel-pt/TaskTimer.cpp (revision f6aab3d83b51b91c24247ad2c2573574de475a82)
1*f6aab3d8Srobert //===-- TaskTimer.cpp -----------------------------------------------------===//
2*f6aab3d8Srobert //
3*f6aab3d8Srobert // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4*f6aab3d8Srobert // See https://llvm.org/LICENSE.txt for license information.
5*f6aab3d8Srobert // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6*f6aab3d8Srobert //
7*f6aab3d8Srobert //===----------------------------------------------------------------------===//
8*f6aab3d8Srobert 
9*f6aab3d8Srobert #include "TaskTimer.h"
10*f6aab3d8Srobert 
11*f6aab3d8Srobert using namespace lldb;
12*f6aab3d8Srobert using namespace lldb_private;
13*f6aab3d8Srobert using namespace lldb_private::trace_intel_pt;
14*f6aab3d8Srobert using namespace llvm;
15*f6aab3d8Srobert 
ForEachTimedTask(std::function<void (const std::string & event,std::chrono::milliseconds duration)> callback)16*f6aab3d8Srobert void ScopedTaskTimer::ForEachTimedTask(
17*f6aab3d8Srobert     std::function<void(const std::string &event,
18*f6aab3d8Srobert                        std::chrono::milliseconds duration)>
19*f6aab3d8Srobert         callback) {
20*f6aab3d8Srobert   for (const auto &kv : m_timed_tasks) {
21*f6aab3d8Srobert     callback(kv.first, kv.second);
22*f6aab3d8Srobert   }
23*f6aab3d8Srobert }
24*f6aab3d8Srobert 
ForThread(lldb::tid_t tid)25*f6aab3d8Srobert ScopedTaskTimer &TaskTimer::ForThread(lldb::tid_t tid) {
26*f6aab3d8Srobert   auto it = m_thread_timers.find(tid);
27*f6aab3d8Srobert   if (it == m_thread_timers.end())
28*f6aab3d8Srobert     it = m_thread_timers.try_emplace(tid, ScopedTaskTimer{}).first;
29*f6aab3d8Srobert   return it->second;
30*f6aab3d8Srobert }
31*f6aab3d8Srobert 
ForGlobal()32*f6aab3d8Srobert ScopedTaskTimer &TaskTimer::ForGlobal() { return m_global_timer; }
33