1*c8dee2aaSAndroid Build Coastguard Worker#!/bin/sh 2*c8dee2aaSAndroid Build Coastguard Worker# Copyright 2016 Google Inc. 3*c8dee2aaSAndroid Build Coastguard Worker# 4*c8dee2aaSAndroid Build Coastguard Worker# Use of this source code is governed by a BSD-style license that can be 5*c8dee2aaSAndroid Build Coastguard Worker# found in the LICENSE file. 6*c8dee2aaSAndroid Build Coastguard Worker 7*c8dee2aaSAndroid Build Coastguard Workerif [ -z "$1" ]; then 8*c8dee2aaSAndroid Build Coastguard Worker cat <<-EOM 9*c8dee2aaSAndroid Build Coastguard Worker Usage: 10*c8dee2aaSAndroid Build Coastguard Worker $0 SKIA_EXECUTABLE [ARGUMENTS_FOR_EXECUTABLE...] 11*c8dee2aaSAndroid Build Coastguard Worker 12*c8dee2aaSAndroid Build Coastguard Worker Run something like this: 13*c8dee2aaSAndroid Build Coastguard Worker $0 dm --src tests 14*c8dee2aaSAndroid Build Coastguard Worker or 15*c8dee2aaSAndroid Build Coastguard Worker $0 dm --src gm skp 16*c8dee2aaSAndroid Build Coastguard Worker 17*c8dee2aaSAndroid Build Coastguard Worker EOM 18*c8dee2aaSAndroid Build Coastguard Worker exit 1 19*c8dee2aaSAndroid Build Coastguard Workerfi 20*c8dee2aaSAndroid Build Coastguard Worker 21*c8dee2aaSAndroid Build Coastguard Workerset -x 22*c8dee2aaSAndroid Build Coastguard Workerset -e 23*c8dee2aaSAndroid Build Coastguard Worker 24*c8dee2aaSAndroid Build Coastguard Workercd "$(dirname "$0")/.." 25*c8dee2aaSAndroid Build Coastguard Worker 26*c8dee2aaSAndroid Build Coastguard WorkerEXECUTABLE="$1" 27*c8dee2aaSAndroid Build Coastguard Workershift 28*c8dee2aaSAndroid Build Coastguard Worker 29*c8dee2aaSAndroid Build Coastguard WorkerDIR="$(mktemp -d "${TMPDIR:-/tmp}/skia_coverage_XXXXXXXXXX")" 30*c8dee2aaSAndroid Build Coastguard WorkerBUILD=out/coverage 31*c8dee2aaSAndroid Build Coastguard Worker 32*c8dee2aaSAndroid Build Coastguard Worker# Build $EXECUTABLE 33*c8dee2aaSAndroid Build Coastguard Workerbin/sync 34*c8dee2aaSAndroid Build Coastguard Workerbin/fetch-gn 35*c8dee2aaSAndroid Build Coastguard Worker 36*c8dee2aaSAndroid Build Coastguard Worker#TODO: make this work with Clang. 37*c8dee2aaSAndroid Build Coastguard WorkerARGS='cc="gcc" cxx="g++" extra_cflags=["--coverage"] extra_ldflags=["--coverage"]' 38*c8dee2aaSAndroid Build Coastguard Workergn gen --args="$ARGS" "$BUILD" 39*c8dee2aaSAndroid Build Coastguard Worker 40*c8dee2aaSAndroid Build Coastguard Workerninja -C "$BUILD" "$EXECUTABLE" 41*c8dee2aaSAndroid Build Coastguard Worker 42*c8dee2aaSAndroid Build Coastguard WorkerGCOV="$(realpath tools/gcov_shim)" 43*c8dee2aaSAndroid Build Coastguard Worker 44*c8dee2aaSAndroid Build Coastguard Worker# Generate a zero-baseline so files not covered by $EXECUTABLE $@ will 45*c8dee2aaSAndroid Build Coastguard Worker# still show up in the report. This reads the .gcno files that are 46*c8dee2aaSAndroid Build Coastguard Worker# created at compile time. 47*c8dee2aaSAndroid Build Coastguard Workerlcov -q --gcov-tool="$GCOV" -c -b "$BUILD" -d "$BUILD" -o "$DIR"/baseline -i 48*c8dee2aaSAndroid Build Coastguard Worker 49*c8dee2aaSAndroid Build Coastguard Worker# Running the binary generates the real coverage information, the .gcda files. 50*c8dee2aaSAndroid Build Coastguard Worker"$BUILD"/"$EXECUTABLE" "$@" 51*c8dee2aaSAndroid Build Coastguard Worker 52*c8dee2aaSAndroid Build Coastguard Workerlcov -q --gcov-tool="$GCOV" -c -b "$BUILD" -d "$BUILD" -o "$DIR"/coverage 53*c8dee2aaSAndroid Build Coastguard Worker 54*c8dee2aaSAndroid Build Coastguard Workerlcov -q -a "$DIR"/baseline -a "$DIR"/coverage -o "$DIR"/merged 55*c8dee2aaSAndroid Build Coastguard Worker 56*c8dee2aaSAndroid Build Coastguard Workergenhtml -q "$DIR"/merged --legend -o "$DIR"/coverage_report --ignore-errors source 57*c8dee2aaSAndroid Build Coastguard Worker 58*c8dee2aaSAndroid Build Coastguard Workerxdg-open "$DIR"/coverage_report/index.html 59