toolkit/components/telemetry/moz.build
author Chris H-C <chutten@mozilla.com>
Mon, 14 May 2018 09:57:30 -0400
changeset 477871 0abaa980b795b7553aa9f1fdb8ad5f1eb0f06d14
parent 477553 167d3bf700d3d43b5c5e6802d090cf6cc0056a51
child 488606 fcd411537143c5d926136eb3aa39a6ff677bf326
permissions -rw-r--r--
bug 1460595 - Implement the 'event' ping r=Dexter,janerik a=lizzard MozReview-Commit-ID: HQAk8jmouyI

# -*- Mode: python; indent-tabs-mode: nil; tab-width: 40 -*-
# vim: set filetype=python:
# 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/.

HAS_MISC_RULE = True

include('/ipc/chromium/chromium-config.mozbuild')

FINAL_LIBRARY = 'xul'

DIRS = [
    'hybrid-content',
    'pingsender',
]

DEFINES['MOZ_APP_VERSION'] = '"%s"' % CONFIG['MOZ_APP_VERSION']

LOCAL_INCLUDES += [
    '/xpcom/build',
    '/xpcom/threads',
]

SPHINX_TREES['telemetry'] = 'docs'

with Files('docs/**'):
    SCHEDULES.exclusive = ['docs']

if CONFIG['CC_TYPE'] in ('clang', 'gcc'):
    CXXFLAGS += ['-Wno-error=shadow']

if CONFIG['ENABLE_TESTS']:
    # We need to use a separate directory for GeckoView gtests. See
    # the comment below near MOZ_TELEMETRY_GECKOVIEW.
    DIRS += [
        'geckoview/gtest',
        'tests/gtest'
    ]

TEST_DIRS += ['tests']

XPCSHELL_TESTS_MANIFESTS += ['tests/unit/xpcshell.ini']
BROWSER_CHROME_MANIFESTS += ['tests/browser/browser.ini']

XPIDL_SOURCES += [
    'nsITelemetry.idl',
]

XPIDL_MODULE = 'telemetry'

EXPORTS.mozilla += [
    '!TelemetryEventEnums.h',
    '!TelemetryHistogramEnums.h',
    '!TelemetryProcessEnums.h',
    '!TelemetryScalarEnums.h',
    'CombinedStacks.h',
    'ipc/TelemetryComms.h',
    'ipc/TelemetryIPC.h',
    'ProcessedStack.h',
    'Telemetry.h',
]

SOURCES += [
    'CombinedStacks.cpp',
    'geckoview/TelemetryGeckoViewPersistence.cpp',
    'ipc/TelemetryIPC.cpp',
    'ipc/TelemetryIPCAccumulator.cpp',
    'ProcessedStack.cpp',
    'Telemetry.cpp',
    'TelemetryCommon.cpp',
    'TelemetryEvent.cpp',
    'TelemetryHistogram.cpp',
    'TelemetryIOInterposeObserver.cpp',
    'TelemetryScalar.cpp',
    'WebrtcTelemetry.cpp',
]

# KeyedStackCapturer entirely relies on profiler to be enabled.
if CONFIG['MOZ_GECKO_PROFILER']:
    SOURCES += [
      'KeyedStackCapturer.cpp'
    ]

EXTRA_COMPONENTS += [
    'TelemetryStartup.js',
    'TelemetryStartup.manifest'
]

EXTRA_JS_MODULES += [
    'GCTelemetry.jsm',
    'TelemetryArchive.jsm',
    'TelemetryController.jsm',
    'TelemetryEnvironment.jsm',
    'TelemetryEventPing.jsm',
    'TelemetryHealthPing.jsm',
    'TelemetryModules.jsm',
    'TelemetryReportingPolicy.jsm',
    'TelemetrySend.jsm',
    'TelemetrySession.jsm',
    'TelemetryStopwatch.jsm',
    'TelemetryStorage.jsm',
    'TelemetryTimestamps.jsm',
    'TelemetryUtils.jsm',
    'UITelemetry.jsm',
    'UpdatePing.jsm',
]

TESTING_JS_MODULES += [
  'tests/unit/TelemetryArchiveTesting.jsm',
]

PYTHON_UNITTEST_MANIFESTS += [
    'tests/python/python.ini',
]

GENERATED_FILES = [
    'EventArtifactDefinitions.json',
    'ScalarArtifactDefinitions.json',
    'TelemetryEventData.h',
    'TelemetryEventEnums.h',
    'TelemetryHistogramData.inc',
    'TelemetryHistogramEnums.h',
    'TelemetryProcessData.h',
    'TelemetryProcessEnums.h',
    'TelemetryScalarData.h',
    'TelemetryScalarEnums.h',
]

# Generate histogram files.
histogram_files = [
    'Histograms.json',
    '/dom/base/UseCounters.conf',
    '/dom/base/nsDeprecatedOperationList.h',
]

data = GENERATED_FILES['TelemetryHistogramData.inc']
data.script = 'gen_histogram_data.py'
data.inputs = histogram_files

enums = GENERATED_FILES['TelemetryHistogramEnums.h']
enums.script = 'gen_histogram_enum.py'
enums.inputs = histogram_files

# Generate scalar files.
scalar_files = [
    'Scalars.yaml',
]

scalar_data = GENERATED_FILES['TelemetryScalarData.h']
scalar_data.script = 'gen_scalar_data.py'
scalar_data.inputs = scalar_files

scalar_enums = GENERATED_FILES['TelemetryScalarEnums.h']
scalar_enums.script = 'gen_scalar_enum.py'
scalar_enums.inputs = scalar_files

# Generate the JSON scalar definitions. They will only be
# used in artifact or "build faster" builds.
scalar_json_data = GENERATED_FILES['ScalarArtifactDefinitions.json']
scalar_json_data.script = 'gen_scalar_data.py:generate_JSON_definitions'
scalar_json_data.inputs = scalar_files

# Move the scalars JSON file to the directory where the Firefox binary is.
FINAL_TARGET_FILES += ['!ScalarArtifactDefinitions.json']

# Generate event files.
event_files = [
    'Events.yaml',
]

event_data = GENERATED_FILES['TelemetryEventData.h']
event_data.script = 'gen_event_data.py'
event_data.inputs = event_files

event_enums = GENERATED_FILES['TelemetryEventEnums.h']
event_enums.script = 'gen_event_enum.py'
event_enums.inputs = event_files

# Generate the JSON event definitions. They will only be
# used in artifact or "build faster" builds.
event_json_data = GENERATED_FILES['EventArtifactDefinitions.json']
event_json_data.script = 'gen_event_data.py:generate_JSON_definitions'
event_json_data.inputs = event_files

# Move the events JSON file to the directory where the Firefox binary is.
FINAL_TARGET_FILES += ['!EventArtifactDefinitions.json']

# Generate data from Processes.yaml
processes_files = [
    'Processes.yaml',
]

processes_enum = GENERATED_FILES['TelemetryProcessEnums.h']
processes_enum.script = 'gen_process_enum.py'
processes_enum.inputs = processes_files

processes_data = GENERATED_FILES['TelemetryProcessData.h']
processes_data.script = 'gen_process_data.py'
processes_data.inputs = processes_files

# Add support for GeckoView: please note that building GeckoView
# implies having an Android build. The packaging step decides
# which files to include. As a consequence, we can simply only
# include the GeckoView files on all Android builds.
if CONFIG['MOZ_WIDGET_TOOLKIT'] == 'android':
    # Introduce this define to conditionally enable Telemetry GV code in the various
    # C++ modules. We need this trick in order to run gtest coverage on Treeherder
    # on platforms other than Android, since gtests on Android are not supported
    # yet (see bug 1318091).
    DEFINES['MOZ_TELEMETRY_GECKOVIEW'] = True

    EXTRA_JS_MODULES += [
        'geckoview/GeckoViewTelemetryController.jsm',
    ]

# Include the GeckoView testing IDL if we're building tests
# as well. This will be used in xpcshell tests.
if CONFIG['ENABLE_TESTS']:
    XPIDL_SOURCES += [
        'geckoview/nsITelemetryGeckoViewTesting.idl'
    ]

    SOURCES += [
        'geckoview/TelemetryGeckoViewTesting.cpp'
    ]

with Files('**'):
    BUG_COMPONENT = ('Toolkit', 'Telemetry')