aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--tools/internal_ci/helper_scripts/prepare_build_macos_rc8
-rwxr-xr-xtools/internal_ci/macos/grpc_ios_binary_size.sh32
-rw-r--r--tools/internal_ci/macos/pull_request/grpc_ios_binary_size.cfg26
-rwxr-xr-xtools/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