mirror of
https://github.com/mollyim/webrtc.git
synced 2025-05-14 14:20:45 +01:00

After recently changing .pylintrc (see [1]) we discovered that the presubmit check always checks all the python files when just one python file gets updated. This CL moves all these files one step closer to what the linter wants. Autogenerated with: # Added all the files under pylint control to ~/Desktop/to-reformat cat ~/Desktop/to-reformat | xargs sed -i '1i\\' git cl format --python --full This is part 1 out of 2. The second part will fix function names and will not be automated. [1] - https://webrtc-review.googlesource.com/c/src/+/186664 No-Presubmit: True Bug: webrtc:12114 Change-Id: Idfec4d759f209a2090440d0af2413a1ddc01b841 Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/190980 Commit-Queue: Mirko Bonadei <mbonadei@webrtc.org> Reviewed-by: Karl Wiberg <kwiberg@webrtc.org> Cr-Commit-Position: refs/heads/master@{#32530}
166 lines
5.6 KiB
Python
166 lines
5.6 KiB
Python
#!/usr/bin/env python
|
|
# Copyright (c) 2018 The WebRTC project authors. All Rights Reserved.
|
|
#
|
|
# Use of this source code is governed by a BSD-style license
|
|
# that can be found in the LICENSE file in the root of the source
|
|
# tree. An additional intellectual property rights grant can be found
|
|
# in the file PATENTS. All contributing project authors may
|
|
# be found in the AUTHORS file in the root of the source tree.
|
|
"""Generates command-line instructions to produce one-time iOS coverage using
|
|
coverage.py.
|
|
|
|
This script is usable for both real devices and simulator.
|
|
But for real devices actual execution should be done manually from Xcode
|
|
and coverage.profraw files should be also copied manually from the device.
|
|
|
|
Additional prerequisites:
|
|
|
|
1. Xcode 10+ with iPhone Simulator SDK. Can be installed by command:
|
|
$ mac_toolchain install -kind ios -xcode-version 10l232m \
|
|
-output-dir build/mac_files/Xcode.app
|
|
|
|
2. For computing coverage on real device you probably also need to apply
|
|
following patch to code_coverage/coverage.py script:
|
|
|
|
========== BEGINNING OF PATCH ==========
|
|
--- a/code_coverage/coverage.py
|
|
+++ b/code_coverage/coverage.py
|
|
@@ -693,8 +693,7 @@ def _AddArchArgumentForIOSIfNeeded(cmd_list, num_archs):
|
|
to use, and one architecture needs to be specified for each binary.
|
|
"" "
|
|
if _IsIOS():
|
|
- cmd_list.extend(['-arch=x86_64'] * num_archs)
|
|
+ cmd_list.extend(['-arch=arm64'] * num_archs)
|
|
|
|
|
|
def _GetBinaryPath(command):
|
|
@@ -836,8 +835,8 @@ def _GetBinaryPathsFromTargets(targets, build_dir):
|
|
binary_path = os.path.join(build_dir, target)
|
|
if coverage_utils.GetHostPlatform() == 'win':
|
|
binary_path += '.exe'
|
|
+ elif coverage_utils.GetHostPlatform() == 'mac':
|
|
+ binary_path += '.app/%s' % target
|
|
|
|
if os.path.exists(binary_path):
|
|
binary_paths.append(binary_path)
|
|
========== ENDING OF PATCH ==========
|
|
|
|
"""
|
|
|
|
import sys
|
|
|
|
DIRECTORY = 'out/coverage'
|
|
|
|
TESTS = [
|
|
'audio_decoder_unittests',
|
|
'common_audio_unittests',
|
|
'common_video_unittests',
|
|
'modules_tests',
|
|
'modules_unittests',
|
|
'rtc_media_unittests',
|
|
'rtc_pc_unittests',
|
|
'rtc_stats_unittests',
|
|
'rtc_unittests',
|
|
'slow_tests',
|
|
'system_wrappers_unittests',
|
|
'test_support_unittests',
|
|
'tools_unittests',
|
|
'video_capture_tests',
|
|
'video_engine_tests',
|
|
'webrtc_nonparallel_tests',
|
|
]
|
|
|
|
XC_TESTS = [
|
|
'apprtcmobile_tests',
|
|
'sdk_framework_unittests',
|
|
'sdk_unittests',
|
|
]
|
|
|
|
|
|
def FormatIossimTest(test_name, is_xctest=False):
|
|
args = ['%s/%s.app' % (DIRECTORY, test_name)]
|
|
if is_xctest:
|
|
args += ['%s/%s_module.xctest' % (DIRECTORY, test_name)]
|
|
|
|
return '-c \'%s/iossim %s\'' % (DIRECTORY, ' '.join(args))
|
|
|
|
|
|
def GetGNArgs(is_simulator):
|
|
target_cpu = 'x64' if is_simulator else 'arm64'
|
|
return ([] + ['target_os="ios"'] + ['target_cpu="%s"' % target_cpu] +
|
|
['use_clang_coverage=true'] + ['is_component_build=false'] +
|
|
['dcheck_always_on=true'])
|
|
|
|
|
|
def GenerateIOSSimulatorCommand():
|
|
gn_args_string = ' '.join(GetGNArgs(is_simulator=True))
|
|
gn_cmd = ['gn', 'gen', DIRECTORY, '--args=\'%s\'' % gn_args_string]
|
|
|
|
coverage_cmd = ([sys.executable, 'tools/code_coverage/coverage.py'] +
|
|
["%s.app" % t for t in XC_TESTS + TESTS] +
|
|
['-b %s' % DIRECTORY, '-o out/report'] +
|
|
['-i=\'.*/out/.*|.*/third_party/.*|.*test.*\''] +
|
|
[FormatIossimTest(t, is_xctest=True) for t in XC_TESTS] +
|
|
[FormatIossimTest(t, is_xctest=False) for t in TESTS])
|
|
|
|
print 'To get code coverage using iOS simulator just run following commands:'
|
|
print ''
|
|
print ' '.join(gn_cmd)
|
|
print ''
|
|
print ' '.join(coverage_cmd)
|
|
return 0
|
|
|
|
|
|
def GenerateIOSDeviceCommand():
|
|
gn_args_string = ' '.join(GetGNArgs(is_simulator=False))
|
|
|
|
coverage_report_cmd = (
|
|
[sys.executable, 'tools/code_coverage/coverage.py'] +
|
|
['%s.app' % t for t in TESTS] + ['-b %s' % DIRECTORY] +
|
|
['-o out/report'] + ['-p %s/merged.profdata' % DIRECTORY] +
|
|
['-i=\'.*/out/.*|.*/third_party/.*|.*test.*\''])
|
|
|
|
print 'Computing code coverage for real iOS device is a little bit tedious.'
|
|
print ''
|
|
print 'You will need:'
|
|
print ''
|
|
print '1. Generate xcode project and open it with Xcode 10+:'
|
|
print ' gn gen %s --ide=xcode --args=\'%s\'' % (DIRECTORY, gn_args_string)
|
|
print ' open %s/all.xcworkspace' % DIRECTORY
|
|
print ''
|
|
print '2. Execute these Run targets manually with Xcode Run button and '
|
|
print 'manually save generated coverage.profraw file to %s:' % DIRECTORY
|
|
print '\n'.join('- %s' % t for t in TESTS)
|
|
print ''
|
|
print '3. Execute these Test targets manually with Xcode Test button and '
|
|
print 'manually save generated coverage.profraw file to %s:' % DIRECTORY
|
|
print '\n'.join('- %s' % t for t in XC_TESTS)
|
|
print ''
|
|
print '4. Merge *.profraw files to *.profdata using llvm-profdata tool:'
|
|
print(' build/mac_files/Xcode.app/Contents/Developer/Toolchains/' +
|
|
'XcodeDefault.xctoolchain/usr/bin/llvm-profdata merge ' +
|
|
'-o %s/merged.profdata ' % DIRECTORY +
|
|
'-sparse=true %s/*.profraw' % DIRECTORY)
|
|
print ''
|
|
print '5. Generate coverage report:'
|
|
print ' ' + ' '.join(coverage_report_cmd)
|
|
return 0
|
|
|
|
|
|
def Main():
|
|
if len(sys.argv) < 2:
|
|
print 'Please specify type of coverage:'
|
|
print ' %s simulator' % sys.argv[0]
|
|
print ' %s device' % sys.argv[0]
|
|
elif sys.argv[1] == 'simulator':
|
|
GenerateIOSSimulatorCommand()
|
|
elif sys.argv[1] == 'device':
|
|
GenerateIOSDeviceCommand()
|
|
else:
|
|
print 'Unsupported type of coverage'
|
|
|
|
return 0
|
|
|
|
|
|
if __name__ == '__main__':
|
|
sys.exit(Main())
|