Bug 1278556 - Enable the support for "record_in_process" in Scalars.yaml. r=gfritzsche
MozReview-Commit-ID: BP2sADn0ELc
This commit is contained in:
@@ -6,17 +6,30 @@
|
|||||||
#ifndef TelemetryScalarInfo_h__
|
#ifndef TelemetryScalarInfo_h__
|
||||||
#define TelemetryScalarInfo_h__
|
#define TelemetryScalarInfo_h__
|
||||||
|
|
||||||
|
#include "nsXULAppAPI.h"
|
||||||
|
|
||||||
// This module is internal to Telemetry. It defines a structure that holds the
|
// This module is internal to Telemetry. It defines a structure that holds the
|
||||||
// scalar info. It should only be used by TelemetryScalarData.h automatically
|
// scalar info. It should only be used by TelemetryScalarData.h automatically
|
||||||
// generated file and TelemetryScalar.cpp. This should not be used anywhere else.
|
// generated file and TelemetryScalar.cpp. This should not be used anywhere else.
|
||||||
// For the public interface to Telemetry functionality, see Telemetry.h.
|
// For the public interface to Telemetry functionality, see Telemetry.h.
|
||||||
|
|
||||||
namespace {
|
namespace {
|
||||||
|
|
||||||
|
enum class RecordedProcessType : uint32_t {
|
||||||
|
Main = (1 << GeckoProcessType_Default), // Also known as "parent process"
|
||||||
|
Content = (1 << GeckoProcessType_Content),
|
||||||
|
Gpu = (1 << GeckoProcessType_GPU),
|
||||||
|
AllChilds = 0xFFFFFFFF - 1, // All the children processes (i.e. content, gpu, ...)
|
||||||
|
All = 0xFFFFFFFF // All the processes
|
||||||
|
};
|
||||||
|
MOZ_MAKE_ENUM_CLASS_BITWISE_OPERATORS(RecordedProcessType)
|
||||||
|
|
||||||
struct ScalarInfo {
|
struct ScalarInfo {
|
||||||
uint32_t kind;
|
uint32_t kind;
|
||||||
uint32_t name_offset;
|
uint32_t name_offset;
|
||||||
uint32_t expiration_offset;
|
uint32_t expiration_offset;
|
||||||
uint32_t dataset;
|
uint32_t dataset;
|
||||||
|
RecordedProcessType record_in_processes;
|
||||||
bool keyed;
|
bool keyed;
|
||||||
|
|
||||||
const char *name() const;
|
const char *name() const;
|
||||||
|
|||||||
@@ -40,11 +40,12 @@ def write_scalar_info(scalar, output, name_index, expiration_index):
|
|||||||
if cpp_guard:
|
if cpp_guard:
|
||||||
print("#if defined(%s)" % cpp_guard, file=output)
|
print("#if defined(%s)" % cpp_guard, file=output)
|
||||||
|
|
||||||
print(" {{ {}, {}, {}, {}, {} }},"\
|
print(" {{ {}, {}, {}, {}, {}, {} }},"\
|
||||||
.format(scalar.nsITelemetry_kind,
|
.format(scalar.nsITelemetry_kind,
|
||||||
name_index,
|
name_index,
|
||||||
expiration_index,
|
expiration_index,
|
||||||
scalar.dataset,
|
scalar.dataset,
|
||||||
|
" | ".join(scalar.record_in_processes_enum),
|
||||||
"true" if scalar.keyed else "false"),
|
"true" if scalar.keyed else "false"),
|
||||||
file=output)
|
file=output)
|
||||||
|
|
||||||
|
|||||||
@@ -14,6 +14,16 @@ SCALAR_TYPES_MAP = {
|
|||||||
'boolean': 'nsITelemetry::SCALAR_BOOLEAN'
|
'boolean': 'nsITelemetry::SCALAR_BOOLEAN'
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# This is a list of flags that determine which process the scalar is allowed
|
||||||
|
# to record from.
|
||||||
|
KNOWN_PROCESS_FLAGS = {
|
||||||
|
'all': 'RecordedProcessType::All',
|
||||||
|
'all_childs': 'RecordedProcessType::AllChilds',
|
||||||
|
'main': 'RecordedProcessType::Main',
|
||||||
|
'content': 'RecordedProcessType::Content',
|
||||||
|
'gpu': 'RecordedProcessType::Gpu',
|
||||||
|
}
|
||||||
|
|
||||||
class ScalarType:
|
class ScalarType:
|
||||||
"""A class for representing a scalar definition."""
|
"""A class for representing a scalar definition."""
|
||||||
|
|
||||||
@@ -87,13 +97,15 @@ class ScalarType:
|
|||||||
OPTIONAL_FIELDS = {
|
OPTIONAL_FIELDS = {
|
||||||
'cpp_guard': basestring,
|
'cpp_guard': basestring,
|
||||||
'release_channel_collection': basestring,
|
'release_channel_collection': basestring,
|
||||||
'keyed': bool
|
'keyed': bool,
|
||||||
|
'record_in_processes': list,
|
||||||
}
|
}
|
||||||
|
|
||||||
# The types for the data within the fields that hold lists.
|
# The types for the data within the fields that hold lists.
|
||||||
LIST_FIELDS_CONTENT = {
|
LIST_FIELDS_CONTENT = {
|
||||||
'bug_numbers': int,
|
'bug_numbers': int,
|
||||||
'notification_emails': basestring
|
'notification_emails': basestring,
|
||||||
|
'record_in_processes': basestring,
|
||||||
}
|
}
|
||||||
|
|
||||||
# Concatenate the required and optional field definitions.
|
# Concatenate the required and optional field definitions.
|
||||||
@@ -153,6 +165,12 @@ class ScalarType:
|
|||||||
if cpp_guard and re.match(r'\W', cpp_guard):
|
if cpp_guard and re.match(r'\W', cpp_guard):
|
||||||
raise ValueError(self._name + ' - invalid cpp_guard: ' + cpp_guard)
|
raise ValueError(self._name + ' - invalid cpp_guard: ' + cpp_guard)
|
||||||
|
|
||||||
|
# Validate record_in_processes.
|
||||||
|
record_in_processes = definition.get('record_in_processes', [])
|
||||||
|
for proc in record_in_processes:
|
||||||
|
if proc not in KNOWN_PROCESS_FLAGS.keys():
|
||||||
|
raise ValueError(self._name + ' - unknown value in record_in_processes: ' + proc)
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def name(self):
|
def name(self):
|
||||||
"""Get the scalar name"""
|
"""Get the scalar name"""
|
||||||
@@ -208,6 +226,16 @@ class ScalarType:
|
|||||||
"""Get the list of notification emails"""
|
"""Get the list of notification emails"""
|
||||||
return self._definition['notification_emails']
|
return self._definition['notification_emails']
|
||||||
|
|
||||||
|
@property
|
||||||
|
def record_in_processes(self):
|
||||||
|
"""Get the non-empty list of processes to record data in"""
|
||||||
|
return self._definition.get('record_in_processes', ['main'])
|
||||||
|
|
||||||
|
@property
|
||||||
|
def record_in_processes_enum(self):
|
||||||
|
"""Get the non-empty list of flags representing the processes to record data in"""
|
||||||
|
return [KNOWN_PROCESS_FLAGS.get(p) for p in self.record_in_processes]
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def dataset(self):
|
def dataset(self):
|
||||||
"""Get the nsITelemetry constant equivalent to the chose release channel collection
|
"""Get the nsITelemetry constant equivalent to the chose release channel collection
|
||||||
|
|||||||
Reference in New Issue
Block a user