// Copyright 2016 The Fuchsia Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#include "garnet/bin/ktrace_provider/tags.h"

#include <mutex>

#include <lib/zircon-internal/ktrace.h>

namespace ktrace_provider {
namespace {

#define TAG_TYPE_16B TagType::kBasic
#define TAG_TYPE_32B TagType::kQuad
#define TAG_TYPE_NAME TagType::kName
#define KTRACE_DEF(num, type, name, group) {num, KTRACE_GRP_##group, TAG_TYPE_##type, #name},

constexpr TagInfo kTags[] = {
#include <lib/zircon-internal/ktrace-def.h>
};

std::once_flag g_tags_once;
TagMap g_tags;

}  // namespace

const TagMap& GetTags() {
  std::call_once(g_tags_once, [] {
    for (const auto& item : kTags) {
      g_tags.emplace(item.num, item);
    }
  });
  return g_tags;
}

}  // namespace ktrace_provider
