author Wes Kocher <>
Wed, 07 Sep 2016 10:18:17 -0700
changeset 313071 1530103e032c225c93bf7ac8fc581ccbab898275
parent 312992 fc16cda7781bf831684253c5e31e3fd87011e3c2
child 313851 a38442afa9317df51b8b47d1251efb851ff54a57
permissions -rw-r--r--
Backed out 17 changesets (bug 1277504, bug 1218577, bug 1218576) for ASAN bc2 failures a=backout Backed out changeset 62009556e4ad (bug 1218576) Backed out changeset 57f9849f0f8f (bug 1218576) Backed out changeset 9595c56c9db2 (bug 1277504) Backed out changeset 9d15ae92f2fa (bug 1218576) Backed out changeset ea7282078b05 (bug 1218576) Backed out changeset 848f4ef30978 (bug 1218576) Backed out changeset 1b6666eb3b81 (bug 1218576) Backed out changeset ce2a2dabb042 (bug 1218576) Backed out changeset 3caacb5c213b (bug 1218576) Backed out changeset c68fc5ad5ecf (bug 1218576) Backed out changeset 1678482b2fad (bug 1218576) Backed out changeset df28918fe236 (bug 1218576) Backed out changeset eb5dbe28ab20 (bug 1218576) Backed out changeset baf105cbe0c8 (bug 1218576) Backed out changeset 7fdd6b6ab594 (bug 1218576) Backed out changeset a0a4829d0ca0 (bug 1218577) Backed out changeset fc16cda7781b (bug 1218576)

/* -*-  Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2; -*- */
/* This Source Code Form is subject to the terms of the Mozilla Public
 * License, v. 2.0. If a copy of the MPL was not distributed with this
 * file, You can obtain one at */

#ifndef TelemetryHistogram_h__
#define TelemetryHistogram_h__

#include "mozilla/TelemetryHistogramEnums.h"

// This module is internal to Telemetry.  It encapsulates Telemetry's
// histogram accumulation and storage logic.  It should only be used by
// Telemetry.cpp.  These functions should not be used anywhere else.
// For the public interface to Telemetry functionality, see Telemetry.h.

namespace TelemetryHistogram {

void CreateStatisticsRecorder();
void DestroyStatisticsRecorder();

void InitializeGlobalState(bool canRecordBase, bool canRecordExtended);
void DeInitializeGlobalState();
#ifdef DEBUG
bool GlobalStateHasBeenInitialized();

bool CanRecordBase();
void SetCanRecordBase(bool b);
bool CanRecordExtended();
void SetCanRecordExtended(bool b);

void InitHistogramRecordingEnabled();
void SetHistogramRecordingEnabled(mozilla::Telemetry::ID aID, bool aEnabled);

nsresult SetHistogramRecordingEnabled(const nsACString &id, bool aEnabled);

void Accumulate(mozilla::Telemetry::ID aHistogram, uint32_t aSample);
void Accumulate(mozilla::Telemetry::ID aID, const nsCString& aKey,
                                            uint32_t aSample);
void Accumulate(const char* name, uint32_t sample);
void Accumulate(const char* name, const nsCString& key, uint32_t sample);

void AccumulateCategorical(mozilla::Telemetry::ID aId, const nsCString& aLabel);

ClearHistogram(mozilla::Telemetry::ID aId);

GetHistogramById(const nsACString &name, JSContext *cx,
                 JS::MutableHandle<JS::Value> ret);

GetKeyedHistogramById(const nsACString &name, JSContext *cx,
                      JS::MutableHandle<JS::Value> ret);

const char*
GetHistogramName(mozilla::Telemetry::ID id);

NewKeyedHistogram(const nsACString &name, const nsACString &expiration,
                  uint32_t histogramType, uint32_t min, uint32_t max,
                  uint32_t bucketCount, JSContext *cx,
                  uint8_t optArgCount, JS::MutableHandle<JS::Value> ret);

HistogramFrom(const nsACString &name, const nsACString &existing_name,
              JSContext *cx, JS::MutableHandle<JS::Value> ret);

CreateHistogramSnapshots(JSContext *cx, JS::MutableHandle<JS::Value> ret,
                         bool subsession, bool clearSubsession);

RegisteredHistograms(uint32_t aDataset, uint32_t *aCount,
                     char*** aHistograms);

RegisteredKeyedHistograms(uint32_t aDataset, uint32_t *aCount,
                          char*** aHistograms);

GetKeyedHistogramSnapshots(JSContext *cx, JS::MutableHandle<JS::Value> ret);

RegisterAddonHistogram(const nsACString &id, const nsACString &name,
                       uint32_t histogramType, uint32_t min, uint32_t max,
                       uint32_t bucketCount, uint8_t optArgCount);

GetAddonHistogram(const nsACString &id, const nsACString &name,
                  JSContext *cx, JS::MutableHandle<JS::Value> ret);

UnregisterAddonHistograms(const nsACString &id);

GetAddonHistogramSnapshots(JSContext *cx, JS::MutableHandle<JS::Value> ret);

GetMapShallowSizesOfExcludingThis(mozilla::MallocSizeOf aMallocSizeOf);

GetHistogramSizesofIncludingThis(mozilla::MallocSizeOf aMallocSizeOf);

} // namespace TelemetryHistogram

#endif // TelemetryHistogram_h__