gecko-dev/tools/profiler/moz.build
Cameron McCormack a1e18da1b1 Bug 1573090 - Part 2: Look up ELF symbol tables directly when pre-symbolicating Gecko profiles on Linux. r=gerald
Whereas previously MozDescribeCodeAddress would have handled demangling,
we need to explicitly do that from our new GetFunction method.  The string we
generate is now more useful for the profiler to merge -- having dropped the
address in the previous patch, and the file & line number and library in this
patch.

While we're at it, try to demangle Rust symbols too.

Ideally we'd add Rust symbol handling to DemangleSymbol in
StackWalk.cpp, but that lives in mozglue, which currently cannot have
any Rust crate dependencies.

Differential Revision: https://phabricator.services.mozilla.com/D43142

--HG--
extra : moz-landing-system : lando
2019-08-23 05:45:16 +00:00

179 lines
6.0 KiB
Python

# -*- 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/.
if CONFIG['MOZ_GECKO_PROFILER']:
DEFINES['MOZ_REPLACE_MALLOC_PREFIX'] = 'profiler'
XPIDL_MODULE = 'profiler'
XPIDL_SOURCES += [
'gecko/nsIProfiler.idl',
]
EXPORTS += [
'public/ChildProfilerController.h',
'public/GeckoProfilerReporter.h',
'public/ProfileJSONWriter.h',
'public/ProfilerChild.h',
'public/ProfilerCodeAddressService.h',
'public/ProfilerMarkerPayload.h',
'public/ProfilerParent.h',
'public/shared-libraries.h',
]
UNIFIED_SOURCES += [
'core/PageInformation.cpp',
'core/platform.cpp',
'core/ProfileBuffer.cpp',
'core/ProfileBufferEntry.cpp',
'core/ProfiledThreadData.cpp',
'core/ProfileJSONWriter.cpp',
'core/ProfilerBacktrace.cpp',
'core/ProfilerCodeAddressService.cpp',
'core/ProfilerMarkerPayload.cpp',
'core/RegisteredThread.cpp',
'gecko/ChildProfilerController.cpp',
'gecko/nsProfilerStartParams.cpp',
'gecko/ProfilerChild.cpp',
'gecko/ProfilerIOInterposeObserver.cpp',
'gecko/ProfilerParent.cpp',
'gecko/ThreadResponsiveness.cpp',
]
if CONFIG['MOZ_REPLACE_MALLOC'] and CONFIG['MOZ_PROFILER_MEMORY']:
SOURCES += [
'core/memory_hooks.cpp', # Non-unified because of order of #includes
]
XPCOM_MANIFESTS += [
'gecko/components.conf',
]
if CONFIG['OS_TARGET'] == 'Darwin':
# This file cannot be built in unified mode because it includes
# "nsLocalFile.h", which pulls in a system header which uses a type
# called TextRange, which conflicts with mozilla::TextRange due to
# a "using namespace mozilla;" declaration from a different file.
SOURCES += [
'gecko/nsProfiler.cpp',
]
else:
UNIFIED_SOURCES += [
'gecko/nsProfiler.cpp',
]
if CONFIG['OS_TARGET'] in ('Android', 'Linux'):
if CONFIG['CPU_ARCH'] in ('arm', 'aarch64', 'x86', 'x86_64', 'mips64'):
UNIFIED_SOURCES += [
'lul/AutoObjectMapper.cpp',
'lul/LulCommon.cpp',
'lul/LulDwarf.cpp',
'lul/LulDwarfSummariser.cpp',
'lul/LulElf.cpp',
'lul/LulMain.cpp',
'lul/platform-linux-lul.cpp',
]
# These files cannot be built in unified mode because of name clashes with mozglue headers on Android.
SOURCES += [
'core/shared-libraries-linux.cc',
]
if not CONFIG['MOZ_CRASHREPORTER']:
SOURCES += [
'/toolkit/crashreporter/google-breakpad/src/common/linux/elfutils.cc',
'/toolkit/crashreporter/google-breakpad/src/common/linux/file_id.cc',
'/toolkit/crashreporter/google-breakpad/src/common/linux/linux_libc_support.cc',
'/toolkit/crashreporter/google-breakpad/src/common/linux/memory_mapped_file.cc',
]
if CONFIG['CPU_ARCH'] == 'arm':
SOURCES += [
'core/EHABIStackWalk.cpp',
]
elif CONFIG['OS_TARGET'] == 'Darwin':
UNIFIED_SOURCES += [
'core/shared-libraries-macos.cc',
]
elif CONFIG['OS_TARGET'] == 'WINNT':
SOURCES += [
'core/shared-libraries-win32.cc',
]
LOCAL_INCLUDES += [
'/caps',
'/docshell/base',
'/ipc/chromium/src',
'/mozglue/linker',
'/netwerk/base',
'/netwerk/protocol/http',
'/toolkit/crashreporter/google-breakpad/src',
'/tools/profiler/core/',
'/tools/profiler/gecko/',
'/xpcom/base',
]
if CONFIG['OS_TARGET'] == 'Android':
DEFINES['ANDROID_NDK_MAJOR_VERSION'] = CONFIG['ANDROID_NDK_MAJOR_VERSION']
DEFINES['ANDROID_NDK_MINOR_VERSION'] = CONFIG['ANDROID_NDK_MINOR_VERSION']
LOCAL_INCLUDES += [
# We need access to Breakpad's getcontext(3) which is suitable for Android
'/toolkit/crashreporter/google-breakpad/src/common/android/include',
'lul',
]
if not CONFIG['MOZ_CRASHREPORTER'] and CONFIG['OS_TARGET'] == 'Android':
SOURCES += ['/toolkit/crashreporter/google-breakpad/src/common/android/breakpad_getcontext.S']
if CONFIG['ENABLE_TESTS']:
DIRS += ['tests/gtest']
FINAL_LIBRARY = 'xul'
IPDL_SOURCES += [
'gecko/PProfiler.ipdl',
'gecko/ProfilerTypes.ipdlh',
]
include('/ipc/chromium/chromium-config.mozbuild')
# GeckoProfiler.h and ProfilerCounts.h are the only code that's visible in
# non-MOZ_GECKO_PROFILER builds, and they only contains no-op macros in that
# case.
EXPORTS += [
'public/GeckoProfiler.h',
]
EXPORTS.mozilla += [
'public/BlocksRingBufferGeckoExtensions.h',
# vm/GeckoProfiler.h needs to include this and doesn't like #include "ProfilerCounts.h"
'public/ProfilerCounts.h',
]
if CONFIG['MOZ_VTUNE']:
DEFINES['MOZ_VTUNE_INSTRUMENTATION'] = True
UNIFIED_SOURCES += [
'core/VTuneProfiler.cpp',
]
if CONFIG['MOZ_TASK_TRACER']:
EXPORTS += [
'tasktracer/GeckoTaskTracer.h',
'tasktracer/GeckoTaskTracerImpl.h',
'tasktracer/SourceEventTypeMap.h',
'tasktracer/TracedTaskCommon.h',
]
UNIFIED_SOURCES += [
'tasktracer/GeckoTaskTracer.cpp',
'tasktracer/TracedTaskCommon.cpp',
]
XPCSHELL_TESTS_MANIFESTS += ['tests/xpcshell/xpcshell.ini']
MOCHITEST_CHROME_MANIFESTS += ['tests/chrome/chrome.ini']
BROWSER_CHROME_MANIFESTS += ['tests/browser/browser.ini']
if CONFIG['CC_TYPE'] in ('clang', 'gcc'):
CXXFLAGS += [
'-Wno-error=shadow',
'-Wno-ignored-qualifiers', # due to use of breakpad headers
]
with Files('**'):
BUG_COMPONENT = ('Core', 'Gecko Profiler')