diff options
-rw-r--r-- | tools/internal_ci/helper_scripts/prepare_build_macos_rc | 8 | ||||
-rwxr-xr-x | tools/internal_ci/macos/grpc_ios_binary_size.sh | 32 | ||||
-rw-r--r-- | tools/internal_ci/macos/pull_request/grpc_ios_binary_size.cfg | 26 | ||||
-rwxr-xr-x | tools/profiling/ios_bin/binary_size.py (renamed from tools/profiling/ios_bin/binary_diff.py) | 42 |
4 files changed, 96 insertions, 12 deletions
diff --git a/tools/internal_ci/helper_scripts/prepare_build_macos_rc b/tools/internal_ci/helper_scripts/prepare_build_macos_rc index 7cdb2e0cf7..bc7fff1b14 100644 --- a/tools/internal_ci/helper_scripts/prepare_build_macos_rc +++ b/tools/internal_ci/helper_scripts/prepare_build_macos_rc @@ -39,11 +39,17 @@ pip install google-api-python-client==1.6.7 --user python export GOOGLE_APPLICATION_CREDENTIALS=${KOKORO_GFILE_DIR}/GrpcTesting-d0eeee2db331.json # If this is a PR using RUN_TESTS_FLAGS var, then add flags to filter tests -if [ -n "$KOKORO_GITHUB_PULL_REQUEST_NUMBER" ] && [ -n "$RUN_TESTS_FLAGS" ]; then +if [ -n "$KOKORO_GITHUB_PULL_REQUEST_NUMBER" ]; then + set +x brew update brew install jq ghprbTargetBranch=$(curl -s https://api.github.com/repos/grpc/grpc/pulls/$KOKORO_GITHUB_PULL_REQUEST_NUMBER | jq -r .base.ref) export RUN_TESTS_FLAGS="$RUN_TESTS_FLAGS --filter_pr_tests --base_branch origin/$ghprbTargetBranch" + + # TODO(matt-kwong): rename this to GITHUB_OAUTH_TOKEN after Jenkins deprecation + export JENKINS_OAUTH_TOKEN=$(cat ${KOKORO_GFILE_DIR}/oauth_token.txt) + export ghprbPullId=$KOKORO_GITHUB_PULL_REQUEST_NUMBER + set -x fi set +ex # rvm script is very verbose and exits with errorcode diff --git a/tools/internal_ci/macos/grpc_ios_binary_size.sh b/tools/internal_ci/macos/grpc_ios_binary_size.sh new file mode 100755 index 0000000000..370c2f0b63 --- /dev/null +++ b/tools/internal_ci/macos/grpc_ios_binary_size.sh @@ -0,0 +1,32 @@ +#!/usr/bin/env bash +# Copyright 2018 gRPC authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +# This script is invoked by Jenkins and runs a diff on the microbenchmarks +set -ex + +# List of benchmarks that provide good signal for analyzing performance changes in pull requests + +# Enter the gRPC repo root +cd $(dirname $0)/../../.. + +source tools/internal_ci/helper_scripts/prepare_build_macos_rc + +tools/profiling/ios_bin/binary_size.py \ + -d origin/$ghprbTargetBranch || FAILED="true" + +if [ "$FAILED" != "" ] +then + exit 1 +fi diff --git a/tools/internal_ci/macos/pull_request/grpc_ios_binary_size.cfg b/tools/internal_ci/macos/pull_request/grpc_ios_binary_size.cfg new file mode 100644 index 0000000000..8942bc7ba7 --- /dev/null +++ b/tools/internal_ci/macos/pull_request/grpc_ios_binary_size.cfg @@ -0,0 +1,26 @@ +# Copyright 2018 gRPC authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# Config file for the internal CI (in protobuf text format) + +# Location of the continuous shell script in repository. +build_file: "grpc/tools/internal_ci/macos/grpc_ios_binary_size.sh" +timeout_mins: 60 +gfile_resources: "/bigstore/grpc-testing-secrets/github_credentials/oauth_token.txt" +action { + define_artifacts { + regex: "**/*sponge_log.xml" + regex: "github/grpc/reports/**" + } +} diff --git a/tools/profiling/ios_bin/binary_diff.py b/tools/profiling/ios_bin/binary_size.py index 6d5ae65e46..693b3c4d2e 100755 --- a/tools/profiling/ios_bin/binary_diff.py +++ b/tools/profiling/ios_bin/binary_size.py @@ -28,6 +28,9 @@ sys.path.append( os.path.dirname(sys.argv[0]), '..', '..', 'run_tests', 'python_utils')) import comment_on_pr +# Only show diff 1KB or greater +diff_threshold = 1000 + size_labels = ('Core', 'ObjC', 'BoringSSL', 'Protobuf', 'Total') argp = argparse.ArgumentParser( @@ -104,22 +107,39 @@ for frameworks in [False, True]: subprocess.check_call(['git', 'checkout', where_am_i]) subprocess.check_call(['git', 'submodule', 'update']) - text += ('****************FRAMEWORKS*****************\n' - if frameworks else '******************STATIC*******************\n') + text += ('***************FRAMEWORKS****************\n' + if frameworks else '*****************STATIC******************\n') row_format = "{:>10}{:>15}{:>15}" + '\n' text += row_format.format('New size', '', 'Old size') - for i in range(0, len(size_labels)): - if old_size == None: - diff_sign = ' ' - elif new_size[i] == old_size[i]: - diff_sign = ' (=)' - elif new_size[i] > old_size[i]: + if old_size == None: + for i in range(0, len(size_labels)): + text += ('\n' if i == len(size_labels) - 1 else '') + row_format.format( + '{:,}'.format(new_size[i]), size_labels[i], '') + else: + has_diff = False + for i in range(0, len(size_labels) - 1): + if abs(new_size[i] - old_size[i]) < diff_threshold: + continue + if new_size[i] > old_size[i]: + diff_sign = ' (>)' + else: + diff_sign = ' (<)' + has_diff = True + text += row_format.format( + '{:,}'.format(new_size[i]), size_labels[i] + diff_sign, + '{:,}'.format(old_size[i])) + i = len(size_labels) - 1 + if new_size[i] > old_size[i]: diff_sign = ' (>)' - else: + elif new_size[i] < old_size[i]: diff_sign = ' (<)' - text += ('\n' if i == len(size_labels) - 1 else '') + row_format.format( + else: + diff_sign = ' (=)' + text += ('\n' if has_diff else '') + row_format.format( '{:,}'.format(new_size[i]), size_labels[i] + diff_sign, - '{:,}'.format(old_size[i]) if old_size != None else '') + '{:,}'.format(old_size[i])) + if not has_diff: + text += '\n No significant differences in binary sizes\n' text += '\n' print text |