# -*- 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')