diff options
author | Torne (Richard Coles) <torne@google.com> | 2013-10-22 16:41:35 +0100 |
---|---|---|
committer | Torne (Richard Coles) <torne@google.com> | 2013-10-22 16:41:35 +0100 |
commit | 8bcbed890bc3ce4d7a057a8f32cab53fa534672e (patch) | |
tree | 1390b6675d21328859f01f50203d9bde09105298 /build | |
parent | 116fa16b45c9efe30e785b9fc32f09780ca23bec (diff) | |
download | chromium_org-8bcbed890bc3ce4d7a057a8f32cab53fa534672e.tar.gz |
Merge from Chromium at DEPS revision 230120
This commit was generated by merge_to_master.py.
Change-Id: I54bc06b7ee8a07092e74ce3b68c6893508349042
Diffstat (limited to 'build')
29 files changed, 516 insertions, 141 deletions
diff --git a/build/all.gyp b/build/all.gyp index d7ecdd63d8..7e8fa4d3bd 100644 --- a/build/all.gyp +++ b/build/all.gyp @@ -193,6 +193,11 @@ '../ui/app_list/app_list.gyp:*', ], }], + ['OS!="android" and OS!="ios"', { + 'dependencies': [ + '../google_apis/gcm/gcm.gyp:*', + ], + }], ], }, # target_name: All { @@ -200,11 +205,10 @@ 'type': 'none', 'conditions': [ ['OS=="win" and fastbuild==0 and target_arch=="ia32"', { - 'dependencies': [ - '../chrome/installer/mini_installer_syzygy.gyp:*', - ], - }, - ], + 'dependencies': [ + '../chrome/installer/mini_installer_syzygy.gyp:*', + ], + }], ], }, # target_name: All_syzygy { @@ -233,9 +237,9 @@ '../chrome/chrome.gyp:sync_integration_tests', '../cloud_print/cloud_print.gyp:cloud_print_unittests', '../components/components.gyp:components_unittests', - '../content/content.gyp:content_browsertests', - '../content/content.gyp:content_shell', - '../content/content.gyp:content_unittests', + '../content/content_shell_and_tests.gyp:content_browsertests', + '../content/content_shell_and_tests.gyp:content_shell', + '../content/content_shell_and_tests.gyp:content_unittests', '../device/device_tests.gyp:device_unittests', '../google_apis/google_apis.gyp:google_apis_unittests', '../gpu/gles2_conform_support/gles2_conform_support.gyp:gles2_conform_support', @@ -338,6 +342,11 @@ 'chromium_swarm_tests', ], }], + ['OS!="android" and OS!="ios"', { + 'dependencies': [ + '../google_apis/gcm/gcm.gyp:gcm_unit_tests', + ], + }], ], }, # target_name: chromium_builder_tests { @@ -356,7 +365,7 @@ 'type': 'none', 'dependencies': [ '../third_party/WebKit/public/all.gyp:all_blink', - '../content/content.gyp:content_shell', + '../content/content_shell_and_tests.gyp:content_shell', ], }, # target_name: all_webkit { @@ -395,11 +404,11 @@ 'target_name': 'chromium_gpu_builder', 'type': 'none', 'dependencies': [ - '../chrome/chrome.gyp:gpu_tests', + '../chrome/chrome.gyp:chrome', '../chrome/chrome.gyp:performance_browser_tests', '../chrome/chrome.gyp:performance_ui_tests', - '../content/content.gyp:content_browsertests', - '../content/content.gyp:content_gl_tests', + '../content/content_shell_and_tests.gyp:content_browsertests', + '../content/content_shell_and_tests.gyp:content_gl_tests', '../gpu/gpu.gyp:gl_tests', ], 'conditions': [ @@ -408,15 +417,25 @@ '../gpu/gles2_conform_test/gles2_conform_test.gyp:gles2_conform_test', ], }], # internal_gles2_conform + ['OS!="ios" and OS!="win"', { + 'dependencies': [ + '../breakpad/breakpad.gyp:minidump_stackwalk', + ], + }], + ['OS=="linux"', { + 'dependencies': [ + '../chrome/chrome.gyp:linux_symbols' + ], + }], ], }, # target_name: chromium_gpu_builder { 'target_name': 'chromium_gpu_debug_builder', 'type': 'none', 'dependencies': [ - '../chrome/chrome.gyp:gpu_tests', - '../content/content.gyp:content_browsertests', - '../content/content.gyp:content_gl_tests', + '../chrome/chrome.gyp:chrome', + '../content/content_shell_and_tests.gyp:content_browsertests', + '../content/content_shell_and_tests.gyp:content_gl_tests', '../gpu/gpu.gyp:gl_tests', ], 'conditions': [ @@ -425,6 +444,16 @@ '../gpu/gles2_conform_test/gles2_conform_test.gyp:gles2_conform_test', ], }], # internal_gles2_conform + ['OS!="ios" and OS!="win"', { + 'dependencies': [ + '../breakpad/breakpad.gyp:minidump_stackwalk', + ], + }], + ['OS=="linux"', { + 'dependencies': [ + '../chrome/chrome.gyp:linux_symbols' + ], + }], ], }, # target_name: chromium_gpu_debug_builder { @@ -434,15 +463,9 @@ '../chrome/chrome.gyp:chrome', # Dependencies of pyauto_functional tests. '../remoting/remoting.gyp:remoting_webapp', + '../chrome/chrome.gyp:pyautolib', ], 'conditions': [ - # If you change this condition, make sure you also change it - # in chrome_tests.gypi - ['enable_automation==1 and (OS=="mac" or ((OS=="win" or os_posix==1) and target_arch==python_arch))', { - 'dependencies': [ - '../chrome/chrome.gyp:pyautolib', - ], - }], ['OS=="mac"', { 'dependencies': [ '../remoting/remoting.gyp:remoting_me2me_host_archive', @@ -482,8 +505,8 @@ 'dependencies': [ 'chromium_builder_qa', # needed for perf pyauto tests '../chrome/chrome.gyp:browser_tests', - '../content/content.gyp:content_browsertests', - '../content/content.gyp:content_unittests', + '../content/content_shell_and_tests.gyp:content_browsertests', + '../content/content_shell_and_tests.gyp:content_unittests', '../third_party/libjingle/libjingle.gyp:peerconnection_server', '../third_party/webrtc/tools/tools.gyp:frame_analyzer', '../third_party/webrtc/tools/tools.gyp:rgba_to_i420_converter', @@ -513,19 +536,19 @@ # We refer to content_shell directly rather than all_webkit # because we don't want the _unittests binaries. - '../content/content.gyp:content_shell', + '../content/content_shell_and_tests.gyp:content_shell', ], 'conditions': [ ['OS!="win"', { 'dependencies': [ - '../content/content.gyp:content_browsertests', + '../content/content_shell_and_tests.gyp:content_browsertests', '../net/net.gyp:dns_fuzz_stub', ], }], ['OS=="win" and fastbuild==0 and target_arch=="ia32"', { 'dependencies': [ '../chrome/chrome_syzygy.gyp:chrome_dll_syzygy', - '../content/content.gyp:content_shell_syzyasan', + '../content/content_shell_and_tests.gyp:content_shell_syzyasan', ], 'conditions': [ ['chrome_multiple_dll==1', { @@ -564,9 +587,10 @@ '../chrome/chrome.gyp:unit_tests', '../cloud_print/cloud_print.gyp:cloud_print_unittests', '../components/components.gyp:components_unittests', - '../content/content.gyp:content_browsertests', - '../content/content.gyp:content_unittests', + '../content/content_shell_and_tests.gyp:content_browsertests', + '../content/content_shell_and_tests.gyp:content_unittests', '../device/device_tests.gyp:device_unittests', + '../google_apis/gcm/gcm.gyp:gcm_unit_tests', '../gpu/gpu.gyp:gpu_unittests', '../ipc/ipc.gyp:ipc_tests', '../jingle/jingle.gyp:jingle_unittests', @@ -597,9 +621,10 @@ '../chrome/chrome.gyp:unit_tests', '../cloud_print/cloud_print.gyp:cloud_print_unittests', '../components/components.gyp:components_unittests', - '../content/content.gyp:content_browsertests', - '../content/content.gyp:content_unittests', + '../content/content_shell_and_tests.gyp:content_browsertests', + '../content/content_shell_and_tests.gyp:content_unittests', '../device/device_tests.gyp:device_unittests', + '../google_apis/gcm/gcm.gyp:gcm_unit_tests', '../gpu/gpu.gyp:gpu_unittests', '../ipc/ipc.gyp:ipc_tests', '../jingle/jingle.gyp:jingle_unittests', @@ -651,13 +676,14 @@ '../chrome/chrome.gyp:unit_tests', '../cloud_print/cloud_print.gyp:cloud_print_unittests', '../components/components.gyp:components_unittests', - '../content/content.gyp:content_unittests', + '../content/content_shell_and_tests.gyp:content_unittests', '../crypto/crypto.gyp:crypto_unittests', '../device/device_tests.gyp:device_unittests', '../ipc/ipc.gyp:ipc_tests', '../jingle/jingle.gyp:jingle_unittests', '../media/media.gyp:media_unittests', '../net/net.gyp:net_unittests', + '../google_apis/gcm/gcm.gyp:gcm_unit_tests', '../printing/printing.gyp:printing_unittests', '../remoting/remoting.gyp:remoting_unittests', '../sql/sql.gyp:sql_unittests', @@ -690,14 +716,15 @@ '../chrome/chrome.gyp:unit_tests', '../cloud_print/cloud_print.gyp:cloud_print_unittests', '../components/components.gyp:components_unittests', - '../content/content.gyp:content_browsertests', - '../content/content.gyp:content_unittests', + '../content/content_shell_and_tests.gyp:content_browsertests', + '../content/content_shell_and_tests.gyp:content_unittests', # mini_installer_tests depends on mini_installer. This should be # defined in installer.gyp. '../chrome/installer/mini_installer.gyp:mini_installer', '../chrome_frame/chrome_frame.gyp:npchrome_frame', '../courgette/courgette.gyp:courgette_unittests', '../device/device_tests.gyp:device_unittests', + '../google_apis/gcm/gcm.gyp:gcm_unit_tests', '../gpu/gpu.gyp:gpu_unittests', '../ipc/ipc.gyp:ipc_tests', '../jingle/jingle.gyp:jingle_unittests', @@ -758,7 +785,7 @@ '../base/base.gyp:base_unittests', '../cloud_print/cloud_print.gyp:cloud_print_unittests', '../components/components.gyp:components_unittests', - '../content/content.gyp:content_unittests', + '../content/content_shell_and_tests.gyp:content_unittests', '../crypto/crypto.gyp:crypto_unittests', '../ipc/ipc.gyp:ipc_tests', '../jingle/jingle.gyp:jingle_unittests', @@ -781,13 +808,14 @@ '../chrome/chrome.gyp:browser_tests', '../cloud_print/cloud_print.gyp:cloud_print_unittests', '../components/components.gyp:components_unittests', - '../content/content.gyp:content_unittests', + '../content/content_shell_and_tests.gyp:content_unittests', '../crypto/crypto.gyp:crypto_unittests', '../device/device_tests.gyp:device_unittests', '../ipc/ipc.gyp:ipc_tests', '../jingle/jingle.gyp:jingle_unittests', '../media/media.gyp:media_unittests', '../net/net.gyp:net_unittests', + '../google_apis/gcm/gcm.gyp:gcm_unit_tests', '../printing/printing.gyp:printing_unittests', '../remoting/remoting.gyp:remoting_unittests', '../sql/sql.gyp:sql_unittests', @@ -820,15 +848,9 @@ '../cloud_print/cloud_print.gyp:cloud_print', '../remoting/remoting.gyp:remoting_webapp', '../third_party/widevine/cdm/widevine_cdm.gyp:widevinecdmadapter', + '../chrome/chrome.gyp:pyautolib', ], 'conditions': [ - # If you change this condition, make sure you also change it - # in chrome_tests.gypi - ['enable_automation==1 and (OS=="mac" or (os_posix==1 and target_arch==python_arch))', { - 'dependencies': [ - '../chrome/chrome.gyp:pyautolib', - ], - }], ['internal_pdf', { 'dependencies': [ '../pdf/pdf.gyp:pdf', @@ -871,8 +893,8 @@ '../chrome/chrome.gyp:interactive_ui_tests', '../chrome/chrome.gyp:unit_tests', '../components/components.gyp:components_unittests', - '../content/content.gyp:content_browsertests', - '../content/content.gyp:content_unittests', + '../content/content_shell_and_tests.gyp:content_browsertests', + '../content/content_shell_and_tests.gyp:content_unittests', '../device/device_tests.gyp:device_unittests', '../ppapi/ppapi_internal.gyp:ppapi_unittests', '../remoting/remoting.gyp:remoting_unittests', diff --git a/build/all_android.gyp b/build/all_android.gyp index 0e67fb4fb5..708646c260 100644 --- a/build/all_android.gyp +++ b/build/all_android.gyp @@ -17,7 +17,7 @@ 'target_name': 'All', 'type': 'none', 'dependencies': [ - '../content/content.gyp:content_shell_apk', + '../content/content_shell_and_tests.gyp:content_shell_apk', '<@(android_app_targets)', 'android_builder_tests', '../android_webview/android_webview.gyp:android_webview_apk', @@ -34,7 +34,7 @@ 'type': 'none', 'dependencies': [ '../third_party/WebKit/public/all.gyp:all_blink', - '../content/content.gyp:content_shell_apk', + '../content/content_shell_and_tests.gyp:content_shell_apk', ], }, # target_name: all_webkit { @@ -64,10 +64,10 @@ '../cc/cc_tests.gyp:cc_unittests', '../chrome/chrome.gyp:unit_tests', '../components/components.gyp:components_unittests', - '../content/content.gyp:content_browsertests', - '../content/content.gyp:content_gl_tests', - '../content/content.gyp:content_shell_test_apk', - '../content/content.gyp:content_unittests', + '../content/content_shell_and_tests.gyp:content_browsertests', + '../content/content_shell_and_tests.gyp:content_gl_tests', + '../content/content_shell_and_tests.gyp:content_shell_test_apk', + '../content/content_shell_and_tests.gyp:content_unittests', '../gpu/gpu.gyp:gl_tests', '../gpu/gpu.gyp:gpu_unittests', '../ipc/ipc.gyp:ipc_tests', @@ -96,10 +96,10 @@ '../cc/cc_tests.gyp:cc_unittests_apk', '../chrome/chrome.gyp:unit_tests_apk', '../components/components.gyp:components_unittests_apk', - '../content/content.gyp:content_browsertests_apk', - '../content/content.gyp:content_gl_tests_apk', - '../content/content.gyp:content_unittests_apk', - '../content/content.gyp:video_decode_accelerator_unittest_apk', + '../content/content_shell_and_tests.gyp:content_browsertests_apk', + '../content/content_shell_and_tests.gyp:content_gl_tests_apk', + '../content/content_shell_and_tests.gyp:content_unittests_apk', + '../content/content_shell_and_tests.gyp:video_decode_accelerator_unittest_apk', '../gpu/gpu.gyp:gl_tests_apk', '../gpu/gpu.gyp:gpu_unittests_apk', '../ipc/ipc.gyp:ipc_tests_apk', diff --git a/build/android/adb_profile_chrome.py b/build/android/adb_profile_chrome.py index c28c04000c..ead6741488 100755 --- a/build/android/adb_profile_chrome.py +++ b/build/android/adb_profile_chrome.py @@ -9,6 +9,7 @@ import logging import optparse import os import re +import shutil import sys import threading import time @@ -21,6 +22,9 @@ from pylib import constants from pylib import pexpect +_DEFAULT_CHROME_CATEGORIES = '_DEFAULT_CHROME_CATEGORIES' + + def _GetTraceTimestamp(): return time.strftime('%Y-%m-%d-%H%M%S', time.localtime()) @@ -218,7 +222,7 @@ def _PullTraces(controllers, output, compress): _ArchiveFiles(trace_files, result) elif output: result = output - os.rename(trace_files[0], result) + shutil.move(trace_files[0], result) else: result = trace_files[0] @@ -287,15 +291,19 @@ def main(): parser.add_option_group(cont_options) categories = optparse.OptionGroup(parser, 'Trace categories') - categories.add_option('-c', '--categories', help='Select categories to trace ' - 'with comma-delimited wildcards, e.g., ' - '"*", "cat1*,-cat1a". Default is "*".', default='*', - dest='chrome_categories') + categories.add_option('-c', '--categories', help='Select Chrome tracing ' + 'categories with comma-delimited wildcards, ' + 'e.g., "*", "cat1*,-cat1a". Omit this option to trace ' + 'Chrome\'s default categories. Chrome tracing can be ' + 'disabled with "--categories=\'\'".', + metavar='CHROME_CATEGORIES', dest='chrome_categories', + default=_DEFAULT_CHROME_CATEGORIES) categories.add_option('-s', '--systrace', help='Capture a systrace with the ' 'chosen comma-delimited systrace categories. You can ' 'also capture a combined Chrome + systrace by enabling ' 'both types of categories. Use "list" to see the ' - 'available categories.', metavar='SYS_CATEGORIES', + 'available categories. Systrace is disabled by ' + 'default.', metavar='SYS_CATEGORIES', dest='systrace_categories', default='') categories.add_option('--trace-cc', help='Enable extra trace categories for ' 'compositor frame viewer data.', action='store_true') diff --git a/build/android/buildbot/bb_device_status_check.py b/build/android/buildbot/bb_device_status_check.py index a5ef54b34c..e279b5095c 100755 --- a/build/android/buildbot/bb_device_status_check.py +++ b/build/android/buildbot/bb_device_status_check.py @@ -9,11 +9,13 @@ import logging import optparse import os import smtplib +import subprocess import sys import re import urllib import bb_annotations +import bb_utils sys.path.append(os.path.join(os.path.dirname(__file__), os.pardir, os.pardir, 'util', 'lib', @@ -203,6 +205,42 @@ def SendDeviceStatusAlert(msg): print 'Failed to send alert email. Error: %s' % e +def RestartUsb(): + if not os.path.isfile('/usr/bin/restart_usb'): + print ('ERROR: Could not restart usb. /usr/bin/restart_usb not installed ' + 'on host (see BUG=305769).') + return 1 + + lsusb_proc = bb_utils.SpawnCmd(['lsusb'], stdout=subprocess.PIPE) + lsusb_output, _ = lsusb_proc.communicate() + if lsusb_proc.returncode: + print ('Error: Could not get list of USB ports (i.e. lsusb).') + return lsusb_proc.returncode + + usb_devices = [re.findall('Bus (\d\d\d) Device (\d\d\d)', lsusb_line)[0] + for lsusb_line in lsusb_output.strip().split('\n')] + + failed_restart = False + # Walk USB devices from leaves up (i.e reverse sorted) restarting the + # connection. If a parent node (e.g. usb hub) is restarted before the + # devices connected to it, the (bus, dev) for the hub can change, making the + # output we have wrong. This way we restart the devices before the hub. + for (bus, dev) in reversed(sorted(usb_devices)): + # Can not restart root usb connections + if dev != '001': + return_code = bb_utils.RunCmd(['/usr/bin/restart_usb', bus, dev]) + if return_code: + print 'Error restarting USB device /dev/bus/usb/%s/%s' % (bus, dev) + failed_restart = True + else: + print 'Restarted USB device /dev/bus/usb/%s/%s' % (bus, dev) + + if failed_restart: + return 1 + + return 0 + + def main(): parser = optparse.OptionParser() parser.add_option('', '--out-dir', @@ -212,9 +250,17 @@ def main(): help='Will not check if devices are provisioned properly.') parser.add_option('--device-status-dashboard', action='store_true', help='Output device status data for dashboard.') + parser.add_option('--restart-usb', action='store_true', + help='Restart USB ports before running device check.') options, args = parser.parse_args() if args: parser.error('Unknown options %s' % args) + + if options.restart_usb: + rc = RestartUsb() + if rc: + return 1 + devices = android_commands.GetAttachedDevices() # TODO(navabi): Test to make sure this fails and then fix call offline_devices = android_commands.GetAttachedDevices(hardware=False, diff --git a/build/android/buildbot/bb_device_steps.py b/build/android/buildbot/bb_device_steps.py index cb09e90815..f80a2a46b3 100755 --- a/build/android/buildbot/bb_device_steps.py +++ b/build/android/buildbot/bb_device_steps.py @@ -73,7 +73,7 @@ INSTRUMENTATION_TESTS = dict((suite.name, suite) for suite in [ ]) VALID_TESTS = set(['chromedriver', 'gpu', 'ui', 'unit', 'webkit', - 'webkit_layout', 'webrtc']) + 'webkit_layout', 'webrtc_chromium', 'webrtc_native']) RunCmd = bb_utils.RunCmd @@ -263,8 +263,12 @@ def RunWebkitLayoutTests(options): exit_code = RunCmd(['webkit/tools/layout_tests/run_webkit_tests.py'] + cmd_args) - if exit_code == 254: # AKA -1, internal error. + if exit_code == 255: # test_run_results.UNEXPECTED_ERROR_EXIT_STATUS bb_annotations.PrintMsg('?? (crashed or hung)') + elif exit_code == 254: # test_run_results.NO_DEVICES_EXIT_STATUS + bb_annotations.PrintMsg('?? (no devices found)') + elif exit_code == 253: # test_run_results.NO_TESTS_EXIT_STATUS + bb_annotations.PrintMsg('?? (no tests found)') else: full_results_path = os.path.join('..', 'layout-test-results', 'full_results.json') @@ -392,10 +396,12 @@ def ProvisionDevices(options): RunCmd(provision_cmd) -def DeviceStatusCheck(_): +def DeviceStatusCheck(options): bb_annotations.PrintNamedStep('device_status_check') - RunCmd(['build/android/buildbot/bb_device_status_check.py'], - halt_on_failure=True) + cmd = ['build/android/buildbot/bb_device_status_check.py'] + if options.restart_usb: + cmd.append('--restart-usb') + RunCmd(cmd, halt_on_failure=True) def GetDeviceSetupStepCmds(): @@ -419,15 +425,25 @@ def RunWebkitTests(options): RunWebkitLint(options.target) -def RunWebRTCTests(options): - RunTestSuites(options, gtest_config.WEBRTC_TEST_SUITES) +def RunWebRTCChromiumTests(options): + RunTestSuites(options, gtest_config.WEBRTC_CHROMIUM_TEST_SUITES) + + +def RunWebRTCNativeTests(options): + RunTestSuites(options, gtest_config.WEBRTC_NATIVE_TEST_SUITES) def RunGPUTests(options): InstallApk(options, INSTRUMENTATION_TESTS['ContentShell'], False) - bb_annotations.PrintNamedStep('gpu_tests') - RunCmd(['content/test/gpu/run_gpu_test', - '--browser=android-content-shell', 'pixel']) + + # Pixel tests require that the browser implements GrabWindowSnapshot and + # GrabViewSnapshot, which android-content-shell currently does not. + # (crbug.com/285932) + + # bb_annotations.PrintNamedStep('gpu_tests') + # RunCmd(['content/test/gpu/run_gpu_test', + # '--browser=android-content-shell', 'pixel']) + bb_annotations.PrintNamedStep('webgl_conformance_tests') RunCmd(['content/test/gpu/run_gpu_test', '--browser=android-content-shell', 'webgl_conformance', @@ -442,7 +458,8 @@ def GetTestStepCmds(): ('ui', RunInstrumentationTests), ('webkit', RunWebkitTests), ('webkit_layout', RunWebkitLayoutTests), - ('webrtc', RunWebRTCTests), + ('webrtc_chromium', RunWebRTCChromiumTests), + ('webrtc_native', RunWebRTCNativeTests), ] @@ -550,6 +567,8 @@ def GetDeviceStepsOptParser(): parser.add_option('--coverage-bucket', help=('Bucket name to store coverage results. Coverage is ' 'only run if this is set.')) + parser.add_option('--restart-usb', action='store_true', + help='Restart usb ports before device status check.') parser.add_option( '--flakiness-server', help=('The flakiness dashboard server to which the results should be ' diff --git a/build/android/buildbot/bb_host_steps.py b/build/android/buildbot/bb_host_steps.py index e27ba08bbc..8fccbda851 100755 --- a/build/android/buildbot/bb_host_steps.py +++ b/build/android/buildbot/bb_host_steps.py @@ -17,6 +17,8 @@ SLAVE_SCRIPTS_DIR = os.path.join(bb_utils.BB_BUILD_DIR, 'scripts', 'slave') VALID_HOST_TESTS = set(['check_webview_licenses', 'findbugs']) EXPERIMENTAL_TARGETS = ['android_experimental'] +DIR_BUILD_ROOT = os.path.dirname(constants.DIR_SOURCE_ROOT) + # Short hand for RunCmd which is used extensively in this file. RunCmd = bb_utils.RunCmd @@ -58,11 +60,15 @@ def Compile(options): build_targets = options.build_targets.split(',') bb_annotations.PrintNamedStep('compile') for build_target in build_targets: - RunCmd(cmd + ['--build-args=%s' % build_target], halt_on_failure=True) + RunCmd(cmd + ['--build-args=%s' % build_target], + halt_on_failure=True, + cwd=DIR_BUILD_ROOT) if options.experimental: for compile_target in EXPERIMENTAL_TARGETS: bb_annotations.PrintNamedStep('Experimental Compile %s' % compile_target) - RunCmd(cmd + ['--build-args=%s' % compile_target], flunk_on_failure=False) + RunCmd(cmd + ['--build-args=%s' % compile_target], + flunk_on_failure=False, + cwd=DIR_BUILD_ROOT) def ZipBuild(options): @@ -72,7 +78,7 @@ def ZipBuild(options): '--src-dir', constants.DIR_SOURCE_ROOT, '--build-dir', SrcPath('out'), '--exclude-files', 'lib.target,gen,android_webview,jingle_unittests'] - + bb_utils.EncodeProperties(options)) + + bb_utils.EncodeProperties(options), cwd=DIR_BUILD_ROOT) def ExtractBuild(options): @@ -81,7 +87,7 @@ def ExtractBuild(options): [os.path.join(SLAVE_SCRIPTS_DIR, 'extract_build.py'), '--build-dir', SrcPath('build'), '--build-output-dir', SrcPath('out')] + bb_utils.EncodeProperties(options), - warning_code=1) + warning_code=1, cwd=DIR_BUILD_ROOT) def FindBugs(options): diff --git a/build/android/buildbot/bb_run_bot.py b/build/android/buildbot/bb_run_bot.py index dbe453a8f0..10a6df11a0 100755 --- a/build/android/buildbot/bb_run_bot.py +++ b/build/android/buildbot/bb_run_bot.py @@ -169,12 +169,18 @@ def GetBotStepMap(): B('webkit-latest-contentshell', H(compile_step), T(['webkit_layout'], ['--auto-reconnect'])), B('builder-unit-tests', H(compile_step), T(['unit'])), - B('webrtc-builder', + B('webrtc-chromium-builder', + H(std_build_steps, + extra_args=['--build-targets=content_browsertests_apk'])), + B('webrtc-native-builder', H(std_build_steps, extra_args=['--build-targets=android_builder_webrtc'], extra_gyp='include_tests=1 enable_tracing=1')), - B('webrtc-tests', H(['download_webrtc_resources'] + std_test_steps), - T(['webrtc'], [flakiness_server])), + B('webrtc-chromium-tests', H(std_test_steps), + T(['webrtc_chromium'], [flakiness_server])), + B('webrtc-native-tests', + H(['download_webrtc_resources'] + std_test_steps), + T(['webrtc_native'], [flakiness_server])), # Generic builder config (for substring match). B('builder', H(std_build_steps)), diff --git a/build/android/buildbot/bb_utils.py b/build/android/buildbot/bb_utils.py index f901103310..3c16cc2bc5 100644 --- a/build/android/buildbot/bb_utils.py +++ b/build/android/buildbot/bb_utils.py @@ -45,6 +45,9 @@ def SpawnCmd(command, stdout=None, cwd=CHROME_SRC): @staticmethod def wait(): return 0 + @staticmethod + def communicate(): + return '', '' return MockPopen() return subprocess.Popen(command, cwd=cwd, stdout=stdout) diff --git a/build/android/gyp/gcc_preprocess.py b/build/android/gyp/gcc_preprocess.py index 93efdb3a74..d4e30fc5fe 100755 --- a/build/android/gyp/gcc_preprocess.py +++ b/build/android/gyp/gcc_preprocess.py @@ -14,8 +14,10 @@ from util import build_utils def DoGcc(options): build_utils.MakeDirectory(os.path.dirname(options.output)) - gcc_cmd = [ - 'gcc', # invoke host gcc. + gcc_cmd = [ 'gcc' ] # invoke host gcc. + if options.defines: + gcc_cmd.extend(sum(map(lambda w: ['-D', w], options.defines), [])) + gcc_cmd.extend([ '-E', # stop after preprocessing. '-D', 'ANDROID', # Specify ANDROID define for pre-processor. '-x', 'c-header', # treat sources as C header files @@ -23,7 +25,7 @@ def DoGcc(options): '-I', options.include_path, '-o', options.output, options.template - ] + ]) build_utils.CheckCallDie(gcc_cmd) @@ -34,6 +36,7 @@ def main(argv): parser.add_option('--template', help='Path to template.') parser.add_option('--output', help='Path for generated file.') parser.add_option('--stamp', help='Path to touch on success.') + parser.add_option('--defines', help='Pre-defines macros', action='append') # TODO(newt): remove this once http://crbug.com/177552 is fixed in ninja. parser.add_option('--ignore', help='Ignored.') diff --git a/build/android/pylib/android_commands.py b/build/android/pylib/android_commands.py index 20684b7b07..1650398800 100644 --- a/build/android/pylib/android_commands.py +++ b/build/android/pylib/android_commands.py @@ -13,6 +13,7 @@ import logging import os import re import shlex +import signal import subprocess import sys import tempfile @@ -458,6 +459,13 @@ class AndroidCommands(object): if out.strip() != 'remount succeeded': raise errors.MsgException('Remount failed: %s' % out) + def RestartAdbdOnDevice(self): + logging.info('Killing adbd on the device...') + adb_pids = self.KillAll('adbd', signal=signal.SIGTERM, with_su=True) + assert adb_pids, 'Unable to obtain adbd pid' + logging.info('Waiting for device to settle...') + self._adb.SendCommand('wait-for-device') + def RestartAdbServer(self): """Restart the adb server.""" ret = self.KillAdbServer() @@ -596,18 +604,24 @@ class AndroidCommands(object): lines = lines[:-1] + [last_line[:status_pos]] return (status, lines) - def KillAll(self, process): + def KillAll(self, process, signal=9, with_su=False): """Android version of killall, connected via adb. Args: - process: name of the process to kill off + process: name of the process to kill off. + signal: signal to use, 9 (SIGKILL) by default. + with_su: wether or not to use su to kill the processes. Returns: the number of processes killed """ pids = self.ExtractPid(process) if pids: - self.RunShellCommand('kill -9 ' + ' '.join(pids)) + cmd = 'kill -%d %s' % (signal, ' '.join(pids)) + if with_su: + self.RunShellCommandWithSU(cmd) + else: + self.RunShellCommand(cmd) return len(pids) def KillAllBlocking(self, process, timeout_sec): diff --git a/build/android/pylib/gtest/filter/breakpad_unittests_disabled b/build/android/pylib/gtest/filter/breakpad_unittests_disabled index de73439477..f1650a3ab5 100644 --- a/build/android/pylib/gtest/filter/breakpad_unittests_disabled +++ b/build/android/pylib/gtest/filter/breakpad_unittests_disabled @@ -1,3 +1,5 @@ FileIDStripTest.StripSelf # crbug.com/171419 MinidumpWriterTest.MappingInfoContained +# crbug.com/310088 +MinidumpWriterTest.MinidumpSizeLimit diff --git a/build/android/pylib/gtest/filter/content_browsertests_disabled b/build/android/pylib/gtest/filter/content_browsertests_disabled index 87470972b2..bf1fcf0195 100644 --- a/build/android/pylib/gtest/filter/content_browsertests_disabled +++ b/build/android/pylib/gtest/filter/content_browsertests_disabled @@ -2,14 +2,12 @@ # Timeouts Http/MediaTest.* File/MediaTest.* -ExternalClearKey/EncryptedMediaTest.* -ClearKey/EncryptedMediaTest.* WorkerTest.* MediaTest.* MediaSourceTest.* WebGLConformanceTest.* MessagePortTest.Tests -EncryptedMediaTest.* +*EncryptedMediaTest.* CrossPlatformAccessibilityBrowserTest.* DatabaseTest.* ResourceDispatcherHostBrowserTest.SyncXMLHttpRequest_DuringUnload diff --git a/build/android/pylib/gtest/gtest_config.py b/build/android/pylib/gtest/gtest_config.py index b677761e95..c373ed9dd6 100644 --- a/build/android/pylib/gtest/gtest_config.py +++ b/build/android/pylib/gtest/gtest_config.py @@ -33,7 +33,11 @@ STABLE_TEST_SUITES = [ 'sandbox_linux_unittests', ] -WEBRTC_TEST_SUITES = [ +WEBRTC_CHROMIUM_TEST_SUITES = [ + 'content_browsertests', +] + +WEBRTC_NATIVE_TEST_SUITES = [ 'audio_decoder_unittests', 'common_audio_unittests', 'common_video_unittests', diff --git a/build/android/pylib/linker/setup.py b/build/android/pylib/linker/setup.py index a13ea4d78b..4024fa7e3b 100644 --- a/build/android/pylib/linker/setup.py +++ b/build/android/pylib/linker/setup.py @@ -27,7 +27,8 @@ def Setup(options, devices): test_cases = [ test_case.LinkerLibraryAddressTest, test_case.LinkerSharedRelroTest, - test_case.LinkerRandomizationTest ] + test_case.LinkerRandomizationTest, + test_case.LinkerLowMemoryThresholdTest ] low_memory_modes = [False, True] all_tests = [t(is_low_memory=m) for t in test_cases for m in low_memory_modes] diff --git a/build/android/pylib/linker/test_case.py b/build/android/pylib/linker/test_case.py index b8a2566763..3f8ea73212 100644 --- a/build/android/pylib/linker/test_case.py +++ b/build/android/pylib/linker/test_case.py @@ -42,6 +42,7 @@ import subprocess import tempfile import time +from pylib import constants from pylib import android_commands from pylib import flag_changer from pylib.base import base_test_result @@ -52,6 +53,17 @@ _PACKAGE_NAME='org.chromium.content_linker_test_apk' _ACTIVITY_NAME='.ContentLinkerTestActivity' _COMMAND_LINE_FILE='/data/local/tmp/content-linker-test-command-line' +# Path to the Linker.java source file. +_LINKER_JAVA_SOURCE_PATH = \ + 'content/public/android/java/src/org/chromium/content/app/Linker.java' + +# A regular expression used to extract the browser shared RELRO configuration +# from the Java source file above. +_RE_LINKER_BROWSER_CONFIG = \ + re.compile(r'.*BROWSER_SHARED_RELRO_CONFIG\s+=\s+' + \ + 'BROWSER_SHARED_RELRO_CONFIG_(\S+)\s*;.*', + re.MULTILINE | re.DOTALL) + # Logcat filters used during each test. Only the 'chromium' one is really # needed, but the logs are added to the TestResult in case of error, and # it is handy to have the 'content_android_linker' ones as well when @@ -67,6 +79,38 @@ re_library_address = re.compile( r'(BROWSER|RENDERER)_LIBRARY_ADDRESS: (\S+) ([0-9A-Fa-f]+)') +def _GetBrowserSharedRelroConfig(): + """Returns a string corresponding to the Linker's configuration of shared + RELRO sections in the browser process. This parses the Java linker source + file to get the appropriate information. + Return: + None in case of error (e.g. could not locate the source file). + 'NEVER' if the browser process shall never use shared RELROs. + 'LOW_RAM_ONLY' if if uses it only on low-end devices. + 'ALWAYS' if it always uses a shared RELRO. + """ + source_path = \ + os.path.join(constants.DIR_SOURCE_ROOT, _LINKER_JAVA_SOURCE_PATH) + if not os.path.exists(source_path): + logging.error('Could not find linker source file: ' + source_path) + return None + + with open(source_path) as f: + configs = _RE_LINKER_BROWSER_CONFIG.findall(f.read()) + if not configs: + logging.error( + 'Can\'t find browser shared RELRO configuration value in ' + \ + source_path) + return None + + if configs[0] not in ['NEVER', 'LOW_RAM_ONLY', 'ALWAYS']: + logging.error('Unexpected browser config value: ' + configs[0]) + return None + + logging.info('Found linker browser shared RELRO config: ' + configs[0]) + return configs[0] + + def _WriteCommandLineFile(adb, command_line, command_line_file): """Create a command-line file on the device. This does not use FlagChanger because its implementation assumes the device has 'su', and thus does @@ -401,10 +445,14 @@ class LinkerLibraryAddressTest(LinkerTestCaseBase): logging.error('Renderer libraries loaded at high addresses: %s', bad_libs) return ResultType.FAIL, logs - if self.is_low_memory: - # For low-memory devices, the libraries must all be loaded at the same - # addresses. This also implicitly checks that the browser libraries are at - # low addresses. + browser_config = _GetBrowserSharedRelroConfig() + if not browser_config: + return ResultType.FAIL, 'Bad linker source configuration' + + if browser_config == 'ALWAYS' or \ + (browser_config == 'LOW_RAM_ONLY' and self.is_low_memory): + # The libraries must all be loaded at the same addresses. This also + # implicitly checks that the browser libraries are at low addresses. addr_mismatches = [] for lib_name, lib_address in browser_libs.iteritems(): lib_address2 = renderer_libs[lib_name] @@ -416,10 +464,10 @@ class LinkerLibraryAddressTest(LinkerTestCaseBase): addr_mismatches) return ResultType.FAIL, logs - # For regular devices, check that libraries are loaded at 'high-addresses'. + # Otherwise, check that libraries are loaded at 'high-addresses'. # Note that for low-memory devices, the previous checks ensure that they # were loaded at low-addresses. - if not self.is_low_memory: + else: bad_libs = [] for lib_name, lib_address in browser_libs.iteritems(): if lib_address < memory_boundary: @@ -473,9 +521,14 @@ class LinkerRandomizationTest(LinkerTestCaseBase): renderer_status, renderer_logs = _CheckLoadAddressRandomization( renderer_lib_map_list, 'Renderer') + browser_config = _GetBrowserSharedRelroConfig() + if not browser_config: + return ResultType.FAIL, 'Bad linker source configuration' + if not browser_status: - if self.is_low_memory: - return ResultType.FAIL, browser_logs + if browser_config == 'ALWAYS' or \ + (browser_config == 'LOW_RAM_ONLY' and self.is_low_memory): + return ResultType.FAIL, browser_logs # IMPORTANT NOTE: The system's ASLR implementation seems to be very poor # when starting an activity process in a loop with "adb shell am start". @@ -501,3 +554,67 @@ class LinkerRandomizationTest(LinkerTestCaseBase): return ResultType.FAIL, renderer_logs return ResultType.PASS, logs + + +class LinkerLowMemoryThresholdTest(LinkerTestCaseBase): + """This test checks that the definitions for the low-memory device physical + RAM threshold are identical in the base/ and linker sources. Because these + two components should absolutely not depend on each other, it's difficult + to perform this check correctly at runtime inside the linker test binary + without introducing hairy dependency issues in the build, or complicated + plumbing at runtime. + + To work-around this, this test looks directly into the sources for a + definition of the same constant that should look like: + + #define ANDROID_LOW_MEMORY_DEVICE_THRESHOLD_MB <number> + + And will check that the values for <number> are identical in all of + them.""" + + # A regular expression used to find the definition of the threshold in all + # sources: + _RE_THRESHOLD_DEFINITION = re.compile( + r'^\s*#\s*define\s+ANDROID_LOW_MEMORY_DEVICE_THRESHOLD_MB\s+(\d+)\s*$', + re.MULTILINE) + + # The list of source files, relative to DIR_SOURCE_ROOT, which must contain + # a line that matches the re above. + _SOURCES_LIST = [ + 'base/android/sys_utils.cc', + 'content/common/android/linker/linker_jni.cc' ] + + def _RunTest(self, adb): + failure = False + values = [] + # First, collect all the values in all input sources. + re = LinkerLowMemoryThresholdTest._RE_THRESHOLD_DEFINITION + for source in LinkerLowMemoryThresholdTest._SOURCES_LIST: + source_path = os.path.join(constants.DIR_SOURCE_ROOT, source); + if not os.path.exists(source_path): + logging.error('Missing source file: ' + source_path) + failure = True + continue + with open(source_path) as f: + source_text = f.read() + # For some reason, re.match() never works here. + source_values = re.findall(source_text) + if not source_values: + logging.error('Missing low-memory threshold definition in ' + \ + source_path) + logging.error('Source:\n%s\n' % source_text) + failure = True + continue + values += source_values + + # Second, check that they are all the same. + if not failure: + for value in values[1:]: + if value != values[0]: + logging.error('Value mismatch: ' + repr(values)) + failure = True + + if failure: + return ResultType.FAIL, 'Incorrect low-end memory threshold definitions!' + + return ResultType.PASS, '' diff --git a/build/android/pylib/perf/setup.py b/build/android/pylib/perf/setup.py index 74bf79fdd6..39e50980d9 100644 --- a/build/android/pylib/perf/setup.py +++ b/build/android/pylib/perf/setup.py @@ -10,6 +10,7 @@ import logging import os import psutil import signal +import shutil import time from pylib import android_commands @@ -58,8 +59,9 @@ def Setup(test_options): Returns: A tuple of (TestRunnerFactory, tests). """ - if not os.path.exists(constants.PERF_OUTPUT_DIR): - os.makedirs(constants.PERF_OUTPUT_DIR) + if os.path.exists(constants.PERF_OUTPUT_DIR): + shutil.rmtree(constants.PERF_OUTPUT_DIR) + os.makedirs(constants.PERF_OUTPUT_DIR) # Before running the tests, kill any leftover server. _KillPendingServers() diff --git a/build/android/pylib/perf/test_runner.py b/build/android/pylib/perf/test_runner.py index c1ad07f7c5..21f1d4916c 100644 --- a/build/android/pylib/perf/test_runner.py +++ b/build/android/pylib/perf/test_runner.py @@ -2,7 +2,7 @@ # Use of this source code is governed by a BSD-style license that can be # found in the LICENSE file. -"""Runs a perf test on a single device. +"""Runs perf tests. Our buildbot infrastructure requires each slave to run steps serially. This is sub-optimal for android, where these steps can run independently on @@ -37,19 +37,18 @@ be ignored: ] Note that script_to_execute necessarily have to take at least the following -options: +option: --device: the serial number to be passed to all adb commands. - --keep_test_server_ports: indicates it's being run as a shard, and shouldn't - reset test server port allocation. """ import datetime import logging -import pickle import os +import pickle import sys from pylib import constants +from pylib import forwarder from pylib import pexpect from pylib.base import base_test_result from pylib.base import base_test_runner @@ -96,10 +95,23 @@ class TestRunner(base_test_runner.BaseTestRunner): self._flaky_tests = flaky_tests @staticmethod + def _IsBetter(result): + if result['actual_exit_code'] == 0: + return True + pickled = os.path.join(constants.PERF_OUTPUT_DIR, + result['name']) + if not os.path.exists(pickled): + return True + with file(pickled, 'r') as f: + previous = pickle.loads(f.read()) + return result['actual_exit_code'] < previous['actual_exit_code'] + + @staticmethod def _SaveResult(result): - with file(os.path.join(constants.PERF_OUTPUT_DIR, - result['name']), 'w') as f: - f.write(pickle.dumps(result)) + if TestRunner._IsBetter(result): + with file(os.path.join(constants.PERF_OUTPUT_DIR, + result['name']), 'w') as f: + f.write(pickle.dumps(result)) def _LaunchPerfTest(self, test_name): """Runs a perf test. @@ -110,7 +122,14 @@ class TestRunner(base_test_runner.BaseTestRunner): Returns: A tuple containing (Output, base_test_result.ResultType) """ - cmd = ('%s --device %s --keep_test_server_ports' % + try: + logging.warning('Unmapping device ports') + forwarder.Forwarder.UnmapAllDevicePorts(self.adb) + self.adb.RestartAdbdOnDevice() + except Exception as e: + logging.error('Exception when tearing down device %s', e) + + cmd = ('%s --device %s' % (self._tests[test_name], self.device)) logging.info('%s : %s', test_name, cmd) start_time = datetime.datetime.now() @@ -135,6 +154,7 @@ class TestRunner(base_test_runner.BaseTestRunner): result_type = base_test_result.ResultType.FAIL if exit_code == 0: result_type = base_test_result.ResultType.PASS + actual_exit_code = exit_code if test_name in self._flaky_tests: # The exit_code is used at the second stage when printing the # test output. If the test is flaky, force to "0" to get that step green @@ -146,6 +166,7 @@ class TestRunner(base_test_runner.BaseTestRunner): 'name': test_name, 'output': output, 'exit_code': exit_code, + 'actual_exit_code': actual_exit_code, 'result_type': result_type, 'total_time': (end_time - start_time).seconds, 'device': self.device, diff --git a/build/build_config.h b/build/build_config.h index 3ea3ddca4b..4856614050 100644 --- a/build/build_config.h +++ b/build/build_config.h @@ -31,7 +31,7 @@ #elif defined(__linux__) #define OS_LINUX 1 // Use TOOLKIT_GTK on linux if TOOLKIT_VIEWS isn't defined. -#if !defined(TOOLKIT_VIEWS) && defined(USE_X11) +#if !defined(TOOLKIT_VIEWS) && defined(USE_X11) && !defined(USE_AURA) #define TOOLKIT_GTK #endif #if defined(__GLIBC__) && !defined(__UCLIBC__) diff --git a/build/common.gypi b/build/common.gypi index 2cc022421a..4a1c3d89e4 100644 --- a/build/common.gypi +++ b/build/common.gypi @@ -39,6 +39,7 @@ 'use_ash%': '<(use_ash)', 'use_cras%': '<(use_cras)', 'use_ozone%': '<(use_ozone)', + 'use_ozone_evdev%': '<(use_ozone)', # Whether we are using Views Toolkit 'toolkit_views%': 0, @@ -102,6 +103,7 @@ 'use_ash%': '<(use_ash)', 'use_cras%': '<(use_cras)', 'use_ozone%': '<(use_ozone)', + 'use_ozone_evdev%': '<(use_ozone_evdev)', 'use_openssl%': '<(use_openssl)', 'enable_viewport%': '<(enable_viewport)', 'enable_hidpi%': '<(enable_hidpi)', @@ -183,6 +185,7 @@ 'use_ash%': '<(use_ash)', 'use_cras%': '<(use_cras)', 'use_ozone%': '<(use_ozone)', + 'use_ozone_evdev%': '<(use_ozone_evdev)', 'use_openssl%': '<(use_openssl)', 'enable_viewport%': '<(enable_viewport)', 'enable_hidpi%': '<(enable_hidpi)', @@ -350,7 +353,7 @@ # 0: Don't specify the version. This option is for the Finch testing. # 1: Use only CLD1. # 2: Use only CLD2. - 'cld_version%': 0, + 'cld_version%': 2, # Enable spell checker. 'enable_spellcheck%': 1, @@ -724,9 +727,9 @@ # on android_clang, where we're hitting a weird linker error. # TODO(dpranke): http://crbug.com/266155 . ['OS=="android"', { - 'v8_optimized_debug': 1, + 'v8_optimized_debug%': 1, }, { - 'v8_optimized_debug': 2, + 'v8_optimized_debug%': 2, }], ], @@ -797,6 +800,7 @@ 'use_glib%': '<(use_glib)', 'use_pango%': '<(use_pango)', 'use_ozone%': '<(use_ozone)', + 'use_ozone_evdev%': '<(use_ozone_evdev)', 'toolkit_uses_gtk%': '<(toolkit_uses_gtk)', 'desktop_linux%': '<(desktop_linux)', 'use_x11%': '<(use_x11)', @@ -885,7 +889,7 @@ 'data_reduction_proxy_probe_url%': '<(data_reduction_proxy_probe_url)', 'enable_mdns%' : '<(enable_mdns)', 'enable_enhanced_bookmarks%' : '<(enable_enhanced_bookmarks)', - 'v8_optimized_debug': '<(v8_optimized_debug)', + 'v8_optimized_debug%': '<(v8_optimized_debug)', 'proprietary_codecs%': '<(proprietary_codecs)', # Use system nspr instead of the bundled one. @@ -3198,9 +3202,6 @@ # http://crbug.com/255186 '-Wno-deprecated-register', - # TODO(hans): Remove once we've cleaned up the warnings. - '-Wno-unused-const-variable', - # This warns about auto_ptr<>, used in third-party code. '-Wno-deprecated-declarations', ], @@ -3907,9 +3908,6 @@ # http://crbug.com/255186 '-Wno-deprecated-register', - # TODO(hans): Remove once we've cleaned up the warnings. - '-Wno-unused-const-variable', - # This warns about auto_ptr<>, used in third-party code. '-Wno-deprecated-declarations', ], diff --git a/build/filename_rules.gypi b/build/filename_rules.gypi index e7259c6740..7f7a1e6d26 100644 --- a/build/filename_rules.gypi +++ b/build/filename_rules.gypi @@ -102,5 +102,10 @@ ['exclude', '(^|/)ozone/'], ] }], + ['<(use_ozone_evdev)==0 or >(nacl_untrusted_build)==1', { + 'sources/': [ ['exclude', '_evdev(_browsertest|_unittest)?\\.(h|cc)$'], + ['exclude', '(^|/)evdev/'], + ] + }], ] } diff --git a/build/install-build-deps.sh b/build/install-build-deps.sh index d9a7af296b..cda72a6697 100755 --- a/build/install-build-deps.sh +++ b/build/install-build-deps.sh @@ -86,10 +86,10 @@ dev_list="apache2.2-bin bison curl elfutils fakeroot flex g++ gperf libnss3-dev libpam0g-dev libpci-dev libpulse-dev libsctp-dev libspeechd-dev libsqlite3-dev libssl-dev libudev-dev libwww-perl libxslt1-dev libxss-dev libxt-dev libxtst-dev mesa-common-dev - metacity patch perl php5-cgi pkg-config python python-cherrypy3 + openbox patch perl php5-cgi pkg-config python python-cherrypy3 python-dev python-psutil rpm ruby subversion ttf-dejavu-core ttf-indic-fonts ttf-kochi-gothic ttf-kochi-mincho ttf-thai-tlwg - wdiff git-core + wdiff git-core libdrm-dev $chromeos_dev_list" # 64-bit systems need a minimum set of 32-bit compat packages for the pre-built diff --git a/build/ios/grit_whitelist.txt b/build/ios/grit_whitelist.txt index 992daded9a..29fe4a29e2 100644 --- a/build/ios/grit_whitelist.txt +++ b/build/ios/grit_whitelist.txt @@ -42,6 +42,7 @@ IDR_PRERENDER IDR_PRINTER_FAVICON IDR_PRODUCT_LOGO_26 IDR_SAD_TAB +IDR_SSL_BLOCKING_HTML IDR_SSL_ROAD_BLOCK_HTML IDR_SYNC_INTERNALS_ABOUT_JS IDR_SYNC_INTERNALS_CHROME_SYNC_JS @@ -625,6 +626,8 @@ IDS_FLAGS_FORCE_FULLSCREEN_APP_DESCRIPTION IDS_FLAGS_FORCE_FULLSCREEN_APP_NAME IDS_FLAGS_FORCE_HIGH_DPI_DESCRIPTION IDS_FLAGS_FORCE_HIGH_DPI_NAME +IDS_FLAGS_FORCE_UNIVERSAL_ACCELERATED_OVERFLOW_SCROLL_MODE_DESCRIPTION +IDS_FLAGS_FORCE_UNIVERSAL_ACCELERATED_OVERFLOW_SCROLL_MODE_NAME IDS_FLAGS_FULL_HISTORY_SYNC_DESCRIPTION IDS_FLAGS_FULL_HISTORY_SYNC_NAME IDS_FLAGS_HIDE_LAUNCHER_ALIGNMENT_MENU_DESCRIPTION diff --git a/build/java_apk.gypi b/build/java_apk.gypi index 81984472af..de54c76e77 100644 --- a/build/java_apk.gypi +++ b/build/java_apk.gypi @@ -48,7 +48,11 @@ # strings.xml files, if any. # library_manifest_paths'- Paths to additional AndroidManifest.xml files from # libraries. - +# use_content_linker - Enable the content dynamic linker that allows sharing the +# RELRO section of the native libraries between the different processes. +# enable_content_linker_tests - Enable the content dynamic linker test support +# code. This allows a test APK to inject a Linker.TestRunner instance at +# runtime. Should only be used by the content_linker_test_apk target!! { 'variables': { 'additional_input_paths': [], @@ -116,6 +120,8 @@ 'variables': { 'variables': { 'native_lib_target%': '', + 'use_content_linker%': 0, + 'enable_content_linker_tests%': 0, }, 'conditions': [ ['gyp_managed_install == 1 and native_lib_target != ""', { @@ -131,6 +137,8 @@ ], }, 'native_lib_target%': '', + 'use_content_linker%': 0, + 'enable_content_linker_tests%': 0, 'emma_instrument': '<(emma_coverage)', 'apk_package_native_libs_dir': '<(apk_package_native_libs_dir)', 'unsigned_standalone_apk_path': '<(unsigned_standalone_apk_path)', @@ -164,6 +172,11 @@ '<(DEPTH)/build/android/setup.gyp:copy_system_libraries', ], }], + ['use_content_linker == 1', { + 'dependencies': [ + '<(DEPTH)/content/content.gyp:content_android_linker', + ], + }], ['native_lib_target != ""', { 'variables': { 'compile_input_paths': [ '<(native_libraries_java_stamp)' ], @@ -190,9 +203,23 @@ 'actions': [ { 'variables': { + 'conditions': [ + ['use_content_linker == 1', { + 'variables': { + 'linker_input_libraries': [ + '<(SHARED_LIB_DIR)/libcontent_android_linker.>(android_product_extension)', + ], + } + }, { + 'variables': { + 'linker_input_libraries': [], + }, + }], + ], 'input_libraries': [ '<@(native_libs_paths)', '<@(extra_native_libs)', + '<@(linker_input_libraries)', ], }, 'includes': ['../build/android/write_ordered_libraries.gypi'], @@ -217,6 +244,36 @@ }, { 'action_name': 'native_libraries_<(_target_name)', + 'variables': { + 'conditions': [ + ['use_content_linker == 1', { + 'variables': { + 'linker_gcc_preprocess_defines': [ + '--defines', 'ENABLE_CONTENT_LINKER', + ], + } + }, { + 'variables': { + 'linker_gcc_preprocess_defines': [], + }, + }], + ['enable_content_linker_tests == 1', { + 'variables': { + 'linker_tests_gcc_preprocess_defines': [ + '--defines', 'ENABLE_CONTENT_LINKER_TESTS', + ], + } + }, { + 'variables': { + 'linker_tests_gcc_preprocess_defines': [], + }, + }], + ], + 'gcc_preprocess_defines': [ + '<@(linker_gcc_preprocess_defines)', + '<@(linker_tests_gcc_preprocess_defines)', + ], + }, 'message': 'Creating NativeLibraries.java for <(_target_name).', 'inputs': [ '<(DEPTH)/build/android/gyp/util/build_utils.py', @@ -233,6 +290,7 @@ '--output=<(native_libraries_java_file)', '--template=<(native_libraries_template)', '--stamp=<(native_libraries_java_stamp)', + '<@(gcc_preprocess_defines)', ], }, { diff --git a/build/linux/system.gyp b/build/linux/system.gyp index 72f7dc261e..d31172843d 100644 --- a/build/linux/system.gyp +++ b/build/linux/system.gyp @@ -869,5 +869,19 @@ }], ], }, + { + 'target_name': 'dridrm', + 'type': 'none', + 'direct_dependent_settings': { + 'cflags': [ + '<!@(<(pkg-config) --cflags libdrm)', + ], + }, + 'link_settings': { + 'libraries': [ + '<!@(<(pkg-config) --libs-only-l libdrm)', + ], + }, + }, ], } diff --git a/build/linux/unbundle/icu.gyp b/build/linux/unbundle/icu.gyp index 1e84bb2a1c..16c36df5ae 100644 --- a/build/linux/unbundle/icu.gyp +++ b/build/linux/unbundle/icu.gyp @@ -5,35 +5,45 @@ { 'targets': [ { - 'target_name': 'system_icu', + 'target_name': 'icudata', 'type': 'none', - 'toolsets': ['host', 'target'], 'direct_dependent_settings': { + 'cflags': [ + '<!@(pkg-config --cflags icu-uc)', + ], 'defines': [ 'U_USING_ICU_NAMESPACE=0', ], }, 'link_settings': { 'ldflags': [ - '<!@(icu-config --ldflags)', + '<!@(pkg-config --libs-only-L --libs-only-other icu-uc)', ], 'libraries': [ - '<!@(icu-config --ldflags-libsonly)', + '<!@(pkg-config --libs-only-l icu-uc)', ], }, }, { - 'target_name': 'icudata', - 'type': 'none', - 'dependencies': ['system_icu'], - 'export_dependent_settings': ['system_icu'], - }, - { 'target_name': 'icui18n', 'type': 'none', 'toolsets': ['host', 'target'], - 'dependencies': ['system_icu'], - 'export_dependent_settings': ['system_icu'], + 'direct_dependent_settings': { + 'cflags': [ + '<!@(pkg-config --cflags icu-i18n)', + ], + 'defines': [ + 'U_USING_ICU_NAMESPACE=0', + ], + }, + 'link_settings': { + 'ldflags': [ + '<!@(pkg-config --libs-only-L --libs-only-other icu-i18n)', + ], + 'libraries': [ + '<!@(pkg-config --libs-only-l icu-i18n)', + ], + }, 'variables': { 'headers_root_path': 'source/i18n', 'header_filenames': [ @@ -119,8 +129,22 @@ 'target_name': 'icuuc', 'type': 'none', 'toolsets': ['host', 'target'], - 'dependencies': ['system_icu'], - 'export_dependent_settings': ['system_icu'], + 'direct_dependent_settings': { + 'cflags': [ + '<!@(pkg-config --cflags icu-uc)', + ], + 'defines': [ + 'U_USING_ICU_NAMESPACE=0', + ], + }, + 'link_settings': { + 'ldflags': [ + '<!@(pkg-config --libs-only-L --libs-only-other icu-uc)', + ], + 'libraries': [ + '<!@(pkg-config --libs-only-l icu-uc)', + ], + }, 'variables': { 'headers_root_path': 'source/common', 'header_filenames': [ diff --git a/build/mac/strip_save_dsym b/build/mac/strip_save_dsym index c325aa8010..c9cf226637 100755 --- a/build/mac/strip_save_dsym +++ b/build/mac/strip_save_dsym @@ -1,4 +1,4 @@ -#!/usr/bin/python +#!/usr/bin/env python # Copyright (c) 2011 The Chromium Authors. All rights reserved. # Use of this source code is governed by a BSD-style license that can be diff --git a/build/util/LASTCHANGE b/build/util/LASTCHANGE index a4dae2a009..e74f78a0c6 100644 --- a/build/util/LASTCHANGE +++ b/build/util/LASTCHANGE @@ -1 +1 @@ -LASTCHANGE=228962 +LASTCHANGE=230120 diff --git a/build/util/LASTCHANGE.blink b/build/util/LASTCHANGE.blink index fe29cc7221..9f16e015b2 100644 --- a/build/util/LASTCHANGE.blink +++ b/build/util/LASTCHANGE.blink @@ -1 +1 @@ -LASTCHANGE=159695 +LASTCHANGE=160175 diff --git a/build/whitespace_file.txt b/build/whitespace_file.txt index 0c4497ac55..6a50cd210e 100644 --- a/build/whitespace_file.txt +++ b/build/whitespace_file.txt @@ -25,7 +25,7 @@ Silence. Oblivious to his silence, she continued, "Did Mr. Usagi enjoy the waffles you brought him?""You know him, he's not one to forego a waffle, no matter how burnt," he snickered. -The pause was filled with the sound of thunder. +The pause was filled with the sound of compile errors. CHAPTER 2: The jelly was as dark as night, and just as runny. @@ -74,4 +74,5 @@ AN INFLEXIBLE POSITION SOMETIMES IS A SIGN OF PARALYSIS IT IS MANS FATE TO OUTSMART HIMSELF BEING SURE OF YOURSELF MEANS YOU'RE A FOOL AM NOT +ARE TOO IF AT FIRST YOU DON'T SUCCEED: TRY, EXCEPT, FINALLY |