// -*- mode: C++ -*-

/* This file is auto-generated by run_glean_parser.py.
   It is only for internal use by types in
   toolkit/components/glean/bindings/private */

#include "mozilla/Maybe.h"
#include "mozilla/Telemetry.h"
#include "mozilla/DataMutex.h"

#ifndef mozilla_glean_HistogramGifftMap_h
#define mozilla_glean_HistogramGifftMap_h

namespace mozilla::glean {

using Telemetry::HistogramID;

typedef uint64_t TimerId; // Same as in TimingDistribution.h.
typedef StaticDataMutex<UniquePtr<nsTHashMap<TimerId, TimeStamp>>> TimerToStampMutex;
static inline TimerToStampMutex::AutoLock GetTimerIdToStartsLock() {
  static TimerToStampMutex sTimerIdToStarts("sTimerIdToStarts");
  auto lock = sTimerIdToStarts.Lock();
  if (!*lock) {
    *lock = MakeUnique<nsTHashMap<TimerId, TimeStamp>>();
  }
  return lock;
}

static Maybe<HistogramID> HistogramIdForMetric(uint32_t aId) {
  switch(aId) {
    case 12: { // test.timing_distribution_metric
      return Some(HistogramID::SOME_TIME_HISTOGRAM_MS);
    }
    case 13: { // test.memory_distribution_metric
      return Some(HistogramID::SOME_MEM_HISTOGRAM_KB);
    }
    case 14: { // test.custom_distribution_metric
      return Some(HistogramID::SOME_LINEAR_HISTOGRAM);
    }
    default: {
      return Nothing();
    }
  }
}

}  // namespace mozilla::glean
#endif  // mozilla_glean_HistogramGifftMaps_h
