This patch changes GeckoView persistence code so that it will always get compiled and linked to the final executable, even outside of Android. By doing so, we are able to easily add gtest coverage for this code on all platforms other than Android on which gtest is not yet supported. In addition to that, this patch adds proper test cases for measurements' serialization and deserialization for both scalars and histograms. MozReview-Commit-ID: J0Snhl3Y8jk
96 lines
3.7 KiB
C++
96 lines
3.7 KiB
C++
/* -*- 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 http://mozilla.org/MPL/2.0/. */
|
|
|
|
#ifndef TelemetryHistogram_h__
|
|
#define TelemetryHistogram_h__
|
|
|
|
#include "mozilla/TelemetryHistogramEnums.h"
|
|
#include "mozilla/TelemetryProcessEnums.h"
|
|
|
|
#include "mozilla/TelemetryComms.h"
|
|
#include "nsXULAppAPI.h"
|
|
|
|
namespace mozilla{
|
|
// This is only used for the GeckoView persistence.
|
|
class JSONWriter;
|
|
}
|
|
|
|
// 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 InitializeGlobalState(bool canRecordBase, bool canRecordExtended);
|
|
void DeInitializeGlobalState();
|
|
#ifdef DEBUG
|
|
bool GlobalStateHasBeenInitialized();
|
|
#endif
|
|
|
|
bool CanRecordBase();
|
|
void SetCanRecordBase(bool b);
|
|
bool CanRecordExtended();
|
|
void SetCanRecordExtended(bool b);
|
|
|
|
void InitHistogramRecordingEnabled();
|
|
void SetHistogramRecordingEnabled(mozilla::Telemetry::HistogramID aID, bool aEnabled);
|
|
|
|
nsresult SetHistogramRecordingEnabled(const nsACString &id, bool aEnabled);
|
|
|
|
void Accumulate(mozilla::Telemetry::HistogramID aHistogram, uint32_t aSample);
|
|
void Accumulate(mozilla::Telemetry::HistogramID aHistogram, const nsTArray<uint32_t>& aSamples);
|
|
void Accumulate(mozilla::Telemetry::HistogramID aID, const nsCString& aKey,
|
|
uint32_t aSample);
|
|
void Accumulate(mozilla::Telemetry::HistogramID aID, const nsCString& aKey,
|
|
const nsTArray<uint32_t>& aSamples);
|
|
void Accumulate(const char* name, uint32_t sample);
|
|
void Accumulate(const char* name, const nsCString& key, uint32_t sample);
|
|
|
|
void AccumulateCategorical(mozilla::Telemetry::HistogramID aId, const nsCString& aLabel);
|
|
void AccumulateCategorical(mozilla::Telemetry::HistogramID aId, const nsTArray<nsCString>& aLabels);
|
|
|
|
void AccumulateChild(mozilla::Telemetry::ProcessID aProcessType,
|
|
const nsTArray<mozilla::Telemetry::HistogramAccumulation>& aAccumulations);
|
|
void AccumulateChildKeyed(mozilla::Telemetry::ProcessID aProcessType,
|
|
const nsTArray<mozilla::Telemetry::KeyedHistogramAccumulation>& aAccumulations);
|
|
|
|
nsresult
|
|
GetHistogramById(const nsACString &name, JSContext *cx,
|
|
JS::MutableHandle<JS::Value> ret);
|
|
|
|
nsresult
|
|
GetKeyedHistogramById(const nsACString &name, JSContext *cx,
|
|
JS::MutableHandle<JS::Value> ret);
|
|
|
|
const char*
|
|
GetHistogramName(mozilla::Telemetry::HistogramID id);
|
|
|
|
nsresult
|
|
CreateHistogramSnapshots(JSContext* aCx, JS::MutableHandleValue aResult, unsigned int aDataset,
|
|
bool aClearSubsession);
|
|
|
|
nsresult
|
|
GetKeyedHistogramSnapshots(JSContext *aCx, JS::MutableHandleValue aResult, unsigned int aDataset,
|
|
bool aClearSubsession);
|
|
|
|
size_t
|
|
GetMapShallowSizesOfExcludingThis(mozilla::MallocSizeOf aMallocSizeOf);
|
|
|
|
size_t
|
|
GetHistogramSizesofIncludingThis(mozilla::MallocSizeOf aMallocSizeOf);
|
|
|
|
// These functions are only meant to be used for GeckoView persistence.
|
|
// They are responsible for updating in-memory probes with the data persisted
|
|
// on the disk and vice-versa.
|
|
nsresult SerializeHistograms(mozilla::JSONWriter &aWriter);
|
|
nsresult SerializeKeyedHistograms(mozilla::JSONWriter &aWriter);
|
|
nsresult DeserializeHistograms(JSContext* aCx, JS::HandleValue aData);
|
|
nsresult DeserializeKeyedHistograms(JSContext* aCx, JS::HandleValue aData);
|
|
|
|
} // namespace TelemetryHistogram
|
|
|
|
#endif // TelemetryHistogram_h__
|