Add CanvasKit build

Building CanvasKit uses very similar logic to PathKit, so there
was a fair amount of copy/paste/customize.

Fixes the name of skia.js/wasm -> canvaskit.js/wasm and
adds a package.json to formally track versions.

Also move PathKit helper scripts to align better.

Docs-Preview: https://skia.org/?cl=160463
Bug: skia:
Change-Id: Ie75b30592dcc4d520dca41f6f5579006aaa8849b
Reviewed-on: https://skia-review.googlesource.com/c/160463
Reviewed-by: Eric Boren <borenet@google.com>
This commit is contained in:
Kevin Lubick 2018-10-09 09:36:35 -04:00
parent 915b80bf39
commit 8e9750d3c5
30 changed files with 944 additions and 65 deletions

View File

@ -7,15 +7,15 @@ release:
# Does an incremental build where possible.
./compile.sh
mkdir -p ./canvas-kit/bin
cp ../../out/canvaskit_wasm/skia.js ./canvas-kit/bin
cp ../../out/canvaskit_wasm/skia.wasm ./canvas-kit/bin
cp ../../out/canvaskit_wasm/canvaskit.js ./canvas-kit/bin
cp ../../out/canvaskit_wasm/canvaskit.wasm ./canvas-kit/bin
debug:
# Does an incremental build where possible.
./compile.sh debug
mkdir -p ./canvas-kit/bin
cp ../../out/canvaskit_wasm/skia.js ./canvas-kit/bin
cp ../../out/canvaskit_wasm/skia.wasm ./canvas-kit/bin
cp ../../out/canvaskit_wasm/canvaskit.js ./canvas-kit/bin
cp ../../out/canvaskit_wasm/canvaskit.wasm ./canvas-kit/bin
local-example:
rm -rf node_modules/canvas-kit

View File

@ -30,7 +30,7 @@
<!-- Doesn't work yet. -->
<button id=lego_btn>Take a picture of the legos</button>
<script type="text/javascript" src="/node_modules/canvas-kit/bin/skia.js"></script>
<script type="text/javascript" src="/node_modules/canvas-kit/bin/canvaskit.js"></script>
<script type="text/javascript" charset="utf-8">

View File

@ -0,0 +1,11 @@
{
"name": "canvaskit-wasm",
"version": "0.1.0",
"description": "A WASM version of Skia's Canvas API",
"main": "bin/canvaskit.js",
"homepage": "https://github.com/google/skia/tree/master/experimental/canvaskit",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"license": "Apache-2.0"
}

View File

@ -14,11 +14,13 @@ if [[ ! -d $EMSDK ]]; then
fi
BUILD_DIR=${BUILD_DIR:="out/canvaskit_wasm"}
mkdir -p $BUILD_DIR
# Navigate to SKIA_HOME from where this file is located.
pushd $BASE_DIR/../..
source $EMSDK/emsdk_env.sh
EMCC=`which emcc`
EMCXX=`which em++`
RELEASE_CONF="-Oz --closure 1 --llvm-lto 3 -DSK_RELEASE"
EXTRA_CFLAGS="\"-DSK_RELEASE\""
@ -28,12 +30,18 @@ if [[ $@ == *debug* ]]; then
RELEASE_CONF="-O0 --js-opts 0 -s SAFE_HEAP=1 -s ASSERTIONS=1 -g3 -DPATHKIT_TESTING -DSK_DEBUG"
fi
# Turn off exiting while we check for ninja (which may not be on PATH)
set +e
NINJA=`which ninja`
if [[ -z $NINJA ]]; then
git clone "https://chromium.googlesource.com/chromium/tools/depot_tools.git" --depth 1 $BUILD_DIR/depot_tools
NINJA=$BUILD_DIR/depot_tools/ninja
fi
# Re-enable error checking
set -e
echo "Compiling bitcode"
EMCC=`which emcc`
EMCXX=`which em++`
# Inspired by https://github.com/Zubnix/skia-wasm-port/blob/master/build_bindings.sh
./bin/gn gen ${BUILD_DIR} \
--args="cc=\"${EMCC}\" \
@ -68,7 +76,7 @@ EMCXX=`which em++`
skia_enable_fontmgr_empty=false \
skia_enable_pdf=false"
ninja -C ${BUILD_DIR} libskia.a
${NINJA} -C ${BUILD_DIR} libskia.a
export EMCC_CLOSURE_ARGS="--externs $BASE_DIR/externs.js "
@ -132,4 +140,4 @@ ${EMCC} \
-s USE_FREETYPE=1 \
-s USE_LIBPNG=1 \
-s WASM=1 \
-o $BUILD_DIR/skia.js
-o $BUILD_DIR/canvaskit.js

View File

@ -0,0 +1,22 @@
{
"name": "canvaskit-local",
"version": "0.0.0",
"description": "private",
"private": true,
"main": "index.js",
"dependencies": {
},
"devDependencies": {
"is-docker": "^1.1.0",
"jasmine-core": "^3.1.0",
"karma": "^2.0.5",
"karma-chrome-launcher": "^2.2.0",
"karma-jasmine": "^1.1.2",
"requirejs": "^2.3.5"
},
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"author": "",
"license": "ISC"
}

View File

@ -312,7 +312,7 @@ func kitchenTask(name, recipe, isolate, serviceAccount string, dimensions []stri
Dependencies: []string{BUNDLE_RECIPES_NAME},
Dimensions: dimensions,
EnvPrefixes: map[string][]string{
"PATH": []string{"cipd_bin_packages", "cipd_bin_packages/bin"},
"PATH": []string{"cipd_bin_packages", "cipd_bin_packages/bin"},
"VPYTHON_VIRTUALENV_ROOT": []string{"cache/vpython"},
},
ExtraTags: map[string]string{
@ -401,6 +401,9 @@ func deriveCompileTaskName(jobName string, parts map[string]string) string {
if strings.Contains(jobName, "PathKit") {
ec = []string{"PathKit"}
}
if strings.Contains(jobName, "CanvasKit") {
ec = []string{"CanvasKit"}
}
if len(ec) > 0 {
jobNameMap["extra_config"] = strings.Join(ec, "_")
}
@ -608,7 +611,7 @@ func defaultSwarmDimensions(parts map[string]string) []string {
} else {
d["gpu"] = "none"
if d["os"] == DEFAULT_OS_DEBIAN {
if strings.Contains(parts["extra_config"], "PathKit") {
if strings.Contains(parts["extra_config"], "PathKit") || strings.Contains(parts["extra_config"], "CanvasKit") {
// The build isn't really parallelized for pathkit, so
// the bulky machines don't buy us much. All we really need is
// docker, which was manually installed on the MEDIUM and LARGE
@ -1077,6 +1080,8 @@ func test(b *specs.TasksCfgBuilder, name string, parts map[string]string, compil
recipe = "compute_test"
} else if strings.Contains(name, "PathKit") {
recipe = "test_pathkit"
} else if strings.Contains(name, "CanvasKit") {
recipe = "test_canvaskit"
} else if strings.Contains(name, "LottieWeb") {
recipe = "test_lottie_web"
}
@ -1088,7 +1093,7 @@ func test(b *specs.TasksCfgBuilder, name string, parts map[string]string, compil
extraProps["internal_hardware_label"] = strconv.Itoa(*iid)
}
isolate := "test_skia_bundled.isolate"
if strings.Contains(name, "PathKit") || strings.Contains(name, "LottieWeb") || strings.Contains(name, "Emulator") {
if strings.Contains(name, "CanvasKit") || strings.Contains(name, "Emulator") || strings.Contains(name, "LottieWeb") || strings.Contains(name, "PathKit") {
isolate = "swarm_recipe.isolate"
}
task := kitchenTask(name, recipe, isolate, "", swarmDimensions(parts), extraProps, OUTPUT_TEST)
@ -1363,7 +1368,7 @@ func process(b *specs.TasksCfgBuilder, name string) {
if strings.Contains(name, "ProcDump") {
pkgs = append(pkgs, b.MustGetCipdPackageFromAsset("procdump_win"))
}
if strings.Contains(name, "PathKit") || strings.Contains(name, "LottieWeb") {
if strings.Contains(name, "CanvasKit") || strings.Contains(name, "LottieWeb") || strings.Contains(name, "PathKit") {
// Docker-based tests that don't need the standard CIPD assets
pkgs = []*specs.CipdPackage{}
}

View File

@ -56,7 +56,9 @@
"Build-Debian9-Clang-x86_64-Release-Vulkan",
"Build-Debian9-EMCC-asmjs-Debug-PathKit",
"Build-Debian9-EMCC-asmjs-Release-PathKit",
"Build-Debian9-EMCC-wasm-Debug-CanvasKit",
"Build-Debian9-EMCC-wasm-Debug-PathKit",
"Build-Debian9-EMCC-wasm-Release-CanvasKit",
"Build-Debian9-EMCC-wasm-Release-PathKit",
"Build-Debian9-GCC-loongson3a-Debug",
"Build-Debian9-GCC-loongson3a-Release",
@ -108,6 +110,7 @@
"Build-Win-MSVC-x86_64-Release",
"Build-Win-MSVC-x86_64-Release-Vulkan",
"BuildStats-Debian9-EMCC-asmjs-Release-PathKit",
"BuildStats-Debian9-EMCC-wasm-Release-CanvasKit",
"BuildStats-Debian9-EMCC-wasm-Release-PathKit",
"Calmbench-Debian9-Clang-GCE-CPU-AVX2-x86_64-Release-All",
"Calmbench-Ubuntu17-Clang-Golo-GPU-QuadroP400-x86_64-Release-All",

View File

@ -9,6 +9,7 @@
from recipe_engine import recipe_api
from . import android
from . import canvaskit
from . import chromebook
from . import chromecast
from . import default
@ -37,8 +38,12 @@ class BuildApi(recipe_api.RecipeApi):
self.compile_fn = flutter.compile_fn
self.copy_fn = flutter.copy_extra_build_products
elif 'EMCC' in b:
self.compile_fn = pathkit.compile_fn
self.copy_fn = pathkit.copy_extra_build_products
if 'PathKit' in b:
self.compile_fn = pathkit.compile_fn
self.copy_fn = pathkit.copy_extra_build_products
else:
self.compile_fn = canvaskit.compile_fn
self.copy_fn = canvaskit.copy_extra_build_products
else:
self.compile_fn = default.compile_fn
self.copy_fn = default.copy_extra_build_products

View File

@ -0,0 +1,86 @@
# Copyright 2018 The Chromium Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
DOCKER_IMAGE = 'gcr.io/skia-public/emsdk-release:1.38.6_jre'
INNER_BUILD_SCRIPT = '/SRC/skia/infra/canvaskit/build_canvaskit.sh'
BUILD_PRODUCTS_ISOLATE_WHITELIST_WASM = [
'canvaskit.*'
]
def compile_fn(api, checkout_root, _ignore):
out_dir = api.vars.cache_dir.join('docker', 'canvaskit')
configuration = api.vars.builder_cfg.get('configuration', '')
# We want to make sure the directories exist and were created by chrome-bot,
# because if that isn't the case, docker will make them and they will be
# owned by root, which causes mysterious failures. To mitigate this risk
# further, we don't use the same out_dir as everyone else (thus the _ignore)
# param. Instead, we use a "wasm" subdirectory in the "docker" named_cache.
api.file.ensure_directory('mkdirs out_dir', out_dir, mode=0777)
# This uses the emscriptem sdk docker image and says "run the
# build_pathkit.sh helper script in there". Additionally, it binds two
# folders: the Skia checkout to /SRC and the output directory to /OUT
# The called helper script will make the compile happen and put the
# output in the right spot. The neat thing is that since the Skia checkout
# (and, by extension, the build script) is not a part of the image, but
# bound in at runtime, we don't have to re-build the image, except when the
# toolchain changes.
# Of note, the wasm build doesn't re-use any intermediate steps from the
# previous builds, so it's essentially a build from scratch every time.
cmd = ['docker', 'run', '--rm', '-v', '%s:/SRC' % checkout_root,
'-v', '%s:/OUT' % out_dir,
DOCKER_IMAGE, INNER_BUILD_SCRIPT]
if configuration == 'Debug':
cmd.append('debug') # It defaults to Release
api.run(
api.step,
'Build CanvasKit with Docker',
cmd=cmd)
def copy_extra_build_products(api, _ignore, dst):
out_dir = api.vars.cache_dir.join('docker', 'canvaskit')
# We don't use the normal copy_build_products because it uses
# shutil.move, which attempts to delete the previous file, which
# doesn't work because the docker created outputs are read-only and
# owned by root (aka only docker images). It's likely safe to change
# the shutil.move in the original script to a non-deleting thing
# (like copy or copyfile), but there's some subtle behavior differences
# especially with directories, that kjlubick felt it best not to risk it.
api.python.inline(
name='copy wasm output',
program='''import errno
import glob
import os
import shutil
import sys
src = sys.argv[1]
dst = sys.argv[2]
build_products_whitelist = %s
try:
os.makedirs(dst)
except OSError as e:
if e.errno != errno.EEXIST:
raise
for pattern in build_products_whitelist:
path = os.path.join(src, pattern)
for f in glob.glob(path):
dst_path = os.path.join(dst, os.path.relpath(f, src))
if not os.path.isdir(os.path.dirname(dst_path)):
os.makedirs(os.path.dirname(dst_path))
print 'Copying build product %%s to %%s' %% (f, dst_path)
# Because Docker usually has some strange permissions (like root
# ownership), we'd rather not keep those around. copyfile doesn't
# keep the metadata around, so that helps us.
shutil.copyfile(f, dst_path)
''' % str(BUILD_PRODUCTS_ISOLATE_WHITELIST_WASM),
args=[out_dir, dst],
infra_step=True)

View File

@ -9,7 +9,7 @@
"ensure-directory",
"--mode",
"0777",
"[START_DIR]/cache/docker/wasm"
"[START_DIR]/cache/docker/pathkit"
],
"infra_step": true,
"name": "mkdirs out_dir"
@ -22,9 +22,9 @@
"-v",
"[START_DIR]/cache/work:/SRC",
"-v",
"[START_DIR]/cache/docker/wasm:/OUT",
"[START_DIR]/cache/docker/pathkit:/OUT",
"gcr.io/skia-public/emsdk-release:1.38.6_jre",
"/SRC/skia/infra/pathkit/docker/build_pathkit.sh",
"/SRC/skia/infra/pathkit/build_pathkit.sh",
"debug",
"asm.js"
],
@ -77,7 +77,7 @@
"python",
"-u",
"import errno\nimport glob\nimport os\nimport shutil\nimport sys\n\nsrc = sys.argv[1]\ndst = sys.argv[2]\nbuild_products_whitelist = ['pathkit.*']\n\ntry:\n os.makedirs(dst)\nexcept OSError as e:\n if e.errno != errno.EEXIST:\n raise\n\nfor pattern in build_products_whitelist:\n path = os.path.join(src, pattern)\n for f in glob.glob(path):\n dst_path = os.path.join(dst, os.path.relpath(f, src))\n if not os.path.isdir(os.path.dirname(dst_path)):\n os.makedirs(os.path.dirname(dst_path))\n print 'Copying build product %s to %s' % (f, dst_path)\n # Because Docker usually has some strange permissions (like root\n # ownership), we'd rather not keep those around. copyfile doesn't\n # keep the metadata around, so that helps us.\n shutil.copyfile(f, dst_path)\n",
"[START_DIR]/cache/docker/wasm",
"[START_DIR]/cache/docker/pathkit",
"[START_DIR]/[SWARM_OUT_DIR]/out/Debug"
],
"infra_step": true,

View File

@ -9,7 +9,7 @@
"ensure-directory",
"--mode",
"0777",
"[START_DIR]/cache/docker/wasm"
"[START_DIR]/cache/docker/pathkit"
],
"infra_step": true,
"name": "mkdirs out_dir"
@ -22,9 +22,9 @@
"-v",
"[START_DIR]/cache/work:/SRC",
"-v",
"[START_DIR]/cache/docker/wasm:/OUT",
"[START_DIR]/cache/docker/pathkit:/OUT",
"gcr.io/skia-public/emsdk-release:1.38.6_jre",
"/SRC/skia/infra/pathkit/docker/build_pathkit.sh",
"/SRC/skia/infra/pathkit/build_pathkit.sh",
"asm.js"
],
"env": {
@ -76,7 +76,7 @@
"python",
"-u",
"import errno\nimport glob\nimport os\nimport shutil\nimport sys\n\nsrc = sys.argv[1]\ndst = sys.argv[2]\nbuild_products_whitelist = ['pathkit.*']\n\ntry:\n os.makedirs(dst)\nexcept OSError as e:\n if e.errno != errno.EEXIST:\n raise\n\nfor pattern in build_products_whitelist:\n path = os.path.join(src, pattern)\n for f in glob.glob(path):\n dst_path = os.path.join(dst, os.path.relpath(f, src))\n if not os.path.isdir(os.path.dirname(dst_path)):\n os.makedirs(os.path.dirname(dst_path))\n print 'Copying build product %s to %s' % (f, dst_path)\n # Because Docker usually has some strange permissions (like root\n # ownership), we'd rather not keep those around. copyfile doesn't\n # keep the metadata around, so that helps us.\n shutil.copyfile(f, dst_path)\n",
"[START_DIR]/cache/docker/wasm",
"[START_DIR]/cache/docker/pathkit",
"[START_DIR]/[SWARM_OUT_DIR]/out/Release"
],
"infra_step": true,

View File

@ -0,0 +1,120 @@
[
{
"cmd": [
"python",
"-u",
"RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
"--json-output",
"/path/to/tmp/json",
"ensure-directory",
"--mode",
"0777",
"[START_DIR]/cache/docker/canvaskit"
],
"infra_step": true,
"name": "mkdirs out_dir"
},
{
"cmd": [
"docker",
"run",
"--rm",
"-v",
"[START_DIR]/cache/work:/SRC",
"-v",
"[START_DIR]/cache/docker/canvaskit:/OUT",
"gcr.io/skia-public/emsdk-release:1.38.6_jre",
"/SRC/skia/infra/canvaskit/build_canvaskit.sh",
"debug"
],
"env": {
"CHROME_HEADLESS": "1",
"PATH": "<PATH>:RECIPE_PACKAGE_REPO[depot_tools]"
},
"name": "Build CanvasKit with Docker"
},
{
"cmd": [
"python",
"-u",
"import errno\nimport glob\nimport os\nimport shutil\nimport sys\n\nsrc = sys.argv[1]\ndst = sys.argv[2]\nbuild_products_whitelist = ['bookmaker', 'dm', 'dm.exe', 'dm.app', 'nanobench.app', 'get_images_from_skps', 'get_images_from_skps.exe', 'hello-opencl', 'hello-opencl.exe', 'nanobench', 'nanobench.exe', 'skpbench', 'skpbench.exe', '*.so', '*.dll', '*.dylib', 'skia_launcher', 'skiaserve', 'lib/*.so', 'run_testlab', 'skqp-universal-debug.apk', 'whitelist_devices.json']\n\ntry:\n os.makedirs(dst)\nexcept OSError as e:\n if e.errno != errno.EEXIST:\n raise\n\nfor pattern in build_products_whitelist:\n path = os.path.join(src, pattern)\n for f in glob.glob(path):\n dst_path = os.path.join(dst, os.path.relpath(f, src))\n if not os.path.isdir(os.path.dirname(dst_path)):\n os.makedirs(os.path.dirname(dst_path))\n print 'Copying build product %s to %s' % (f, dst_path)\n shutil.move(f, dst_path)\n",
"[START_DIR]/cache/work/skia/out/Build-Debian9-EMCC-wasm-Debug-CanvasKit/Debug",
"[START_DIR]/[SWARM_OUT_DIR]/out/Debug"
],
"infra_step": true,
"name": "copy build products",
"~followup_annotations": [
"@@@STEP_LOG_LINE@python.inline@import errno@@@",
"@@@STEP_LOG_LINE@python.inline@import glob@@@",
"@@@STEP_LOG_LINE@python.inline@import os@@@",
"@@@STEP_LOG_LINE@python.inline@import shutil@@@",
"@@@STEP_LOG_LINE@python.inline@import sys@@@",
"@@@STEP_LOG_LINE@python.inline@@@@",
"@@@STEP_LOG_LINE@python.inline@src = sys.argv[1]@@@",
"@@@STEP_LOG_LINE@python.inline@dst = sys.argv[2]@@@",
"@@@STEP_LOG_LINE@python.inline@build_products_whitelist = ['bookmaker', 'dm', 'dm.exe', 'dm.app', 'nanobench.app', 'get_images_from_skps', 'get_images_from_skps.exe', 'hello-opencl', 'hello-opencl.exe', 'nanobench', 'nanobench.exe', 'skpbench', 'skpbench.exe', '*.so', '*.dll', '*.dylib', 'skia_launcher', 'skiaserve', 'lib/*.so', 'run_testlab', 'skqp-universal-debug.apk', 'whitelist_devices.json']@@@",
"@@@STEP_LOG_LINE@python.inline@@@@",
"@@@STEP_LOG_LINE@python.inline@try:@@@",
"@@@STEP_LOG_LINE@python.inline@ os.makedirs(dst)@@@",
"@@@STEP_LOG_LINE@python.inline@except OSError as e:@@@",
"@@@STEP_LOG_LINE@python.inline@ if e.errno != errno.EEXIST:@@@",
"@@@STEP_LOG_LINE@python.inline@ raise@@@",
"@@@STEP_LOG_LINE@python.inline@@@@",
"@@@STEP_LOG_LINE@python.inline@for pattern in build_products_whitelist:@@@",
"@@@STEP_LOG_LINE@python.inline@ path = os.path.join(src, pattern)@@@",
"@@@STEP_LOG_LINE@python.inline@ for f in glob.glob(path):@@@",
"@@@STEP_LOG_LINE@python.inline@ dst_path = os.path.join(dst, os.path.relpath(f, src))@@@",
"@@@STEP_LOG_LINE@python.inline@ if not os.path.isdir(os.path.dirname(dst_path)):@@@",
"@@@STEP_LOG_LINE@python.inline@ os.makedirs(os.path.dirname(dst_path))@@@",
"@@@STEP_LOG_LINE@python.inline@ print 'Copying build product %s to %s' % (f, dst_path)@@@",
"@@@STEP_LOG_LINE@python.inline@ shutil.move(f, dst_path)@@@",
"@@@STEP_LOG_END@python.inline@@@"
]
},
{
"cmd": [
"python",
"-u",
"import errno\nimport glob\nimport os\nimport shutil\nimport sys\n\nsrc = sys.argv[1]\ndst = sys.argv[2]\nbuild_products_whitelist = ['canvaskit.*']\n\ntry:\n os.makedirs(dst)\nexcept OSError as e:\n if e.errno != errno.EEXIST:\n raise\n\nfor pattern in build_products_whitelist:\n path = os.path.join(src, pattern)\n for f in glob.glob(path):\n dst_path = os.path.join(dst, os.path.relpath(f, src))\n if not os.path.isdir(os.path.dirname(dst_path)):\n os.makedirs(os.path.dirname(dst_path))\n print 'Copying build product %s to %s' % (f, dst_path)\n # Because Docker usually has some strange permissions (like root\n # ownership), we'd rather not keep those around. copyfile doesn't\n # keep the metadata around, so that helps us.\n shutil.copyfile(f, dst_path)\n",
"[START_DIR]/cache/docker/canvaskit",
"[START_DIR]/[SWARM_OUT_DIR]/out/Debug"
],
"infra_step": true,
"name": "copy wasm output",
"~followup_annotations": [
"@@@STEP_LOG_LINE@python.inline@import errno@@@",
"@@@STEP_LOG_LINE@python.inline@import glob@@@",
"@@@STEP_LOG_LINE@python.inline@import os@@@",
"@@@STEP_LOG_LINE@python.inline@import shutil@@@",
"@@@STEP_LOG_LINE@python.inline@import sys@@@",
"@@@STEP_LOG_LINE@python.inline@@@@",
"@@@STEP_LOG_LINE@python.inline@src = sys.argv[1]@@@",
"@@@STEP_LOG_LINE@python.inline@dst = sys.argv[2]@@@",
"@@@STEP_LOG_LINE@python.inline@build_products_whitelist = ['canvaskit.*']@@@",
"@@@STEP_LOG_LINE@python.inline@@@@",
"@@@STEP_LOG_LINE@python.inline@try:@@@",
"@@@STEP_LOG_LINE@python.inline@ os.makedirs(dst)@@@",
"@@@STEP_LOG_LINE@python.inline@except OSError as e:@@@",
"@@@STEP_LOG_LINE@python.inline@ if e.errno != errno.EEXIST:@@@",
"@@@STEP_LOG_LINE@python.inline@ raise@@@",
"@@@STEP_LOG_LINE@python.inline@@@@",
"@@@STEP_LOG_LINE@python.inline@for pattern in build_products_whitelist:@@@",
"@@@STEP_LOG_LINE@python.inline@ path = os.path.join(src, pattern)@@@",
"@@@STEP_LOG_LINE@python.inline@ for f in glob.glob(path):@@@",
"@@@STEP_LOG_LINE@python.inline@ dst_path = os.path.join(dst, os.path.relpath(f, src))@@@",
"@@@STEP_LOG_LINE@python.inline@ if not os.path.isdir(os.path.dirname(dst_path)):@@@",
"@@@STEP_LOG_LINE@python.inline@ os.makedirs(os.path.dirname(dst_path))@@@",
"@@@STEP_LOG_LINE@python.inline@ print 'Copying build product %s to %s' % (f, dst_path)@@@",
"@@@STEP_LOG_LINE@python.inline@ # Because Docker usually has some strange permissions (like root@@@",
"@@@STEP_LOG_LINE@python.inline@ # ownership), we'd rather not keep those around. copyfile doesn't@@@",
"@@@STEP_LOG_LINE@python.inline@ # keep the metadata around, so that helps us.@@@",
"@@@STEP_LOG_LINE@python.inline@ shutil.copyfile(f, dst_path)@@@",
"@@@STEP_LOG_END@python.inline@@@"
]
},
{
"name": "$result",
"recipe_result": null,
"status_code": 0
}
]

View File

@ -9,7 +9,7 @@
"ensure-directory",
"--mode",
"0777",
"[START_DIR]/cache/docker/wasm"
"[START_DIR]/cache/docker/pathkit"
],
"infra_step": true,
"name": "mkdirs out_dir"
@ -22,9 +22,9 @@
"-v",
"[START_DIR]/cache/work:/SRC",
"-v",
"[START_DIR]/cache/docker/wasm:/OUT",
"[START_DIR]/cache/docker/pathkit:/OUT",
"gcr.io/skia-public/emsdk-release:1.38.6_jre",
"/SRC/skia/infra/pathkit/docker/build_pathkit.sh",
"/SRC/skia/infra/pathkit/build_pathkit.sh",
"debug"
],
"env": {
@ -76,7 +76,7 @@
"python",
"-u",
"import errno\nimport glob\nimport os\nimport shutil\nimport sys\n\nsrc = sys.argv[1]\ndst = sys.argv[2]\nbuild_products_whitelist = ['pathkit.*']\n\ntry:\n os.makedirs(dst)\nexcept OSError as e:\n if e.errno != errno.EEXIST:\n raise\n\nfor pattern in build_products_whitelist:\n path = os.path.join(src, pattern)\n for f in glob.glob(path):\n dst_path = os.path.join(dst, os.path.relpath(f, src))\n if not os.path.isdir(os.path.dirname(dst_path)):\n os.makedirs(os.path.dirname(dst_path))\n print 'Copying build product %s to %s' % (f, dst_path)\n # Because Docker usually has some strange permissions (like root\n # ownership), we'd rather not keep those around. copyfile doesn't\n # keep the metadata around, so that helps us.\n shutil.copyfile(f, dst_path)\n",
"[START_DIR]/cache/docker/wasm",
"[START_DIR]/cache/docker/pathkit",
"[START_DIR]/[SWARM_OUT_DIR]/out/Debug"
],
"infra_step": true,

View File

@ -0,0 +1,119 @@
[
{
"cmd": [
"python",
"-u",
"RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
"--json-output",
"/path/to/tmp/json",
"ensure-directory",
"--mode",
"0777",
"[START_DIR]/cache/docker/canvaskit"
],
"infra_step": true,
"name": "mkdirs out_dir"
},
{
"cmd": [
"docker",
"run",
"--rm",
"-v",
"[START_DIR]/cache/work:/SRC",
"-v",
"[START_DIR]/cache/docker/canvaskit:/OUT",
"gcr.io/skia-public/emsdk-release:1.38.6_jre",
"/SRC/skia/infra/canvaskit/build_canvaskit.sh"
],
"env": {
"CHROME_HEADLESS": "1",
"PATH": "<PATH>:RECIPE_PACKAGE_REPO[depot_tools]"
},
"name": "Build CanvasKit with Docker"
},
{
"cmd": [
"python",
"-u",
"import errno\nimport glob\nimport os\nimport shutil\nimport sys\n\nsrc = sys.argv[1]\ndst = sys.argv[2]\nbuild_products_whitelist = ['bookmaker', 'dm', 'dm.exe', 'dm.app', 'nanobench.app', 'get_images_from_skps', 'get_images_from_skps.exe', 'hello-opencl', 'hello-opencl.exe', 'nanobench', 'nanobench.exe', 'skpbench', 'skpbench.exe', '*.so', '*.dll', '*.dylib', 'skia_launcher', 'skiaserve', 'lib/*.so', 'run_testlab', 'skqp-universal-debug.apk', 'whitelist_devices.json']\n\ntry:\n os.makedirs(dst)\nexcept OSError as e:\n if e.errno != errno.EEXIST:\n raise\n\nfor pattern in build_products_whitelist:\n path = os.path.join(src, pattern)\n for f in glob.glob(path):\n dst_path = os.path.join(dst, os.path.relpath(f, src))\n if not os.path.isdir(os.path.dirname(dst_path)):\n os.makedirs(os.path.dirname(dst_path))\n print 'Copying build product %s to %s' % (f, dst_path)\n shutil.move(f, dst_path)\n",
"[START_DIR]/cache/work/skia/out/Build-Debian9-EMCC-wasm-Release-CanvasKit/Release",
"[START_DIR]/[SWARM_OUT_DIR]/out/Release"
],
"infra_step": true,
"name": "copy build products",
"~followup_annotations": [
"@@@STEP_LOG_LINE@python.inline@import errno@@@",
"@@@STEP_LOG_LINE@python.inline@import glob@@@",
"@@@STEP_LOG_LINE@python.inline@import os@@@",
"@@@STEP_LOG_LINE@python.inline@import shutil@@@",
"@@@STEP_LOG_LINE@python.inline@import sys@@@",
"@@@STEP_LOG_LINE@python.inline@@@@",
"@@@STEP_LOG_LINE@python.inline@src = sys.argv[1]@@@",
"@@@STEP_LOG_LINE@python.inline@dst = sys.argv[2]@@@",
"@@@STEP_LOG_LINE@python.inline@build_products_whitelist = ['bookmaker', 'dm', 'dm.exe', 'dm.app', 'nanobench.app', 'get_images_from_skps', 'get_images_from_skps.exe', 'hello-opencl', 'hello-opencl.exe', 'nanobench', 'nanobench.exe', 'skpbench', 'skpbench.exe', '*.so', '*.dll', '*.dylib', 'skia_launcher', 'skiaserve', 'lib/*.so', 'run_testlab', 'skqp-universal-debug.apk', 'whitelist_devices.json']@@@",
"@@@STEP_LOG_LINE@python.inline@@@@",
"@@@STEP_LOG_LINE@python.inline@try:@@@",
"@@@STEP_LOG_LINE@python.inline@ os.makedirs(dst)@@@",
"@@@STEP_LOG_LINE@python.inline@except OSError as e:@@@",
"@@@STEP_LOG_LINE@python.inline@ if e.errno != errno.EEXIST:@@@",
"@@@STEP_LOG_LINE@python.inline@ raise@@@",
"@@@STEP_LOG_LINE@python.inline@@@@",
"@@@STEP_LOG_LINE@python.inline@for pattern in build_products_whitelist:@@@",
"@@@STEP_LOG_LINE@python.inline@ path = os.path.join(src, pattern)@@@",
"@@@STEP_LOG_LINE@python.inline@ for f in glob.glob(path):@@@",
"@@@STEP_LOG_LINE@python.inline@ dst_path = os.path.join(dst, os.path.relpath(f, src))@@@",
"@@@STEP_LOG_LINE@python.inline@ if not os.path.isdir(os.path.dirname(dst_path)):@@@",
"@@@STEP_LOG_LINE@python.inline@ os.makedirs(os.path.dirname(dst_path))@@@",
"@@@STEP_LOG_LINE@python.inline@ print 'Copying build product %s to %s' % (f, dst_path)@@@",
"@@@STEP_LOG_LINE@python.inline@ shutil.move(f, dst_path)@@@",
"@@@STEP_LOG_END@python.inline@@@"
]
},
{
"cmd": [
"python",
"-u",
"import errno\nimport glob\nimport os\nimport shutil\nimport sys\n\nsrc = sys.argv[1]\ndst = sys.argv[2]\nbuild_products_whitelist = ['canvaskit.*']\n\ntry:\n os.makedirs(dst)\nexcept OSError as e:\n if e.errno != errno.EEXIST:\n raise\n\nfor pattern in build_products_whitelist:\n path = os.path.join(src, pattern)\n for f in glob.glob(path):\n dst_path = os.path.join(dst, os.path.relpath(f, src))\n if not os.path.isdir(os.path.dirname(dst_path)):\n os.makedirs(os.path.dirname(dst_path))\n print 'Copying build product %s to %s' % (f, dst_path)\n # Because Docker usually has some strange permissions (like root\n # ownership), we'd rather not keep those around. copyfile doesn't\n # keep the metadata around, so that helps us.\n shutil.copyfile(f, dst_path)\n",
"[START_DIR]/cache/docker/canvaskit",
"[START_DIR]/[SWARM_OUT_DIR]/out/Release"
],
"infra_step": true,
"name": "copy wasm output",
"~followup_annotations": [
"@@@STEP_LOG_LINE@python.inline@import errno@@@",
"@@@STEP_LOG_LINE@python.inline@import glob@@@",
"@@@STEP_LOG_LINE@python.inline@import os@@@",
"@@@STEP_LOG_LINE@python.inline@import shutil@@@",
"@@@STEP_LOG_LINE@python.inline@import sys@@@",
"@@@STEP_LOG_LINE@python.inline@@@@",
"@@@STEP_LOG_LINE@python.inline@src = sys.argv[1]@@@",
"@@@STEP_LOG_LINE@python.inline@dst = sys.argv[2]@@@",
"@@@STEP_LOG_LINE@python.inline@build_products_whitelist = ['canvaskit.*']@@@",
"@@@STEP_LOG_LINE@python.inline@@@@",
"@@@STEP_LOG_LINE@python.inline@try:@@@",
"@@@STEP_LOG_LINE@python.inline@ os.makedirs(dst)@@@",
"@@@STEP_LOG_LINE@python.inline@except OSError as e:@@@",
"@@@STEP_LOG_LINE@python.inline@ if e.errno != errno.EEXIST:@@@",
"@@@STEP_LOG_LINE@python.inline@ raise@@@",
"@@@STEP_LOG_LINE@python.inline@@@@",
"@@@STEP_LOG_LINE@python.inline@for pattern in build_products_whitelist:@@@",
"@@@STEP_LOG_LINE@python.inline@ path = os.path.join(src, pattern)@@@",
"@@@STEP_LOG_LINE@python.inline@ for f in glob.glob(path):@@@",
"@@@STEP_LOG_LINE@python.inline@ dst_path = os.path.join(dst, os.path.relpath(f, src))@@@",
"@@@STEP_LOG_LINE@python.inline@ if not os.path.isdir(os.path.dirname(dst_path)):@@@",
"@@@STEP_LOG_LINE@python.inline@ os.makedirs(os.path.dirname(dst_path))@@@",
"@@@STEP_LOG_LINE@python.inline@ print 'Copying build product %s to %s' % (f, dst_path)@@@",
"@@@STEP_LOG_LINE@python.inline@ # Because Docker usually has some strange permissions (like root@@@",
"@@@STEP_LOG_LINE@python.inline@ # ownership), we'd rather not keep those around. copyfile doesn't@@@",
"@@@STEP_LOG_LINE@python.inline@ # keep the metadata around, so that helps us.@@@",
"@@@STEP_LOG_LINE@python.inline@ shutil.copyfile(f, dst_path)@@@",
"@@@STEP_LOG_END@python.inline@@@"
]
},
{
"name": "$result",
"recipe_result": null,
"status_code": 0
}
]

View File

@ -9,7 +9,7 @@
"ensure-directory",
"--mode",
"0777",
"[START_DIR]/cache/docker/wasm"
"[START_DIR]/cache/docker/pathkit"
],
"infra_step": true,
"name": "mkdirs out_dir"
@ -22,9 +22,9 @@
"-v",
"[START_DIR]/cache/work:/SRC",
"-v",
"[START_DIR]/cache/docker/wasm:/OUT",
"[START_DIR]/cache/docker/pathkit:/OUT",
"gcr.io/skia-public/emsdk-release:1.38.6_jre",
"/SRC/skia/infra/pathkit/docker/build_pathkit.sh"
"/SRC/skia/infra/pathkit/build_pathkit.sh"
],
"env": {
"CHROME_HEADLESS": "1",
@ -75,7 +75,7 @@
"python",
"-u",
"import errno\nimport glob\nimport os\nimport shutil\nimport sys\n\nsrc = sys.argv[1]\ndst = sys.argv[2]\nbuild_products_whitelist = ['pathkit.*']\n\ntry:\n os.makedirs(dst)\nexcept OSError as e:\n if e.errno != errno.EEXIST:\n raise\n\nfor pattern in build_products_whitelist:\n path = os.path.join(src, pattern)\n for f in glob.glob(path):\n dst_path = os.path.join(dst, os.path.relpath(f, src))\n if not os.path.isdir(os.path.dirname(dst_path)):\n os.makedirs(os.path.dirname(dst_path))\n print 'Copying build product %s to %s' % (f, dst_path)\n # Because Docker usually has some strange permissions (like root\n # ownership), we'd rather not keep those around. copyfile doesn't\n # keep the metadata around, so that helps us.\n shutil.copyfile(f, dst_path)\n",
"[START_DIR]/cache/docker/wasm",
"[START_DIR]/cache/docker/pathkit",
"[START_DIR]/[SWARM_OUT_DIR]/out/Release"
],
"infra_step": true,

View File

@ -44,7 +44,9 @@ TEST_BUILDERS = [
'Build-Debian9-Clang-x86_64-Release-Vulkan',
'Build-Debian9-EMCC-asmjs-Debug-PathKit',
'Build-Debian9-EMCC-asmjs-Release-PathKit',
'Build-Debian9-EMCC-wasm-Debug-CanvasKit',
'Build-Debian9-EMCC-wasm-Debug-PathKit',
'Build-Debian9-EMCC-wasm-Release-CanvasKit',
'Build-Debian9-EMCC-wasm-Release-PathKit',
'Build-Debian9-GCC-arm-Release-Chromecast',
'Build-Debian9-GCC-loongson3a-Release',

View File

@ -3,7 +3,7 @@
# found in the LICENSE file.
DOCKER_IMAGE = 'gcr.io/skia-public/emsdk-release:1.38.6_jre'
INNER_BUILD_SCRIPT = '/SRC/skia/infra/pathkit/docker/build_pathkit.sh'
INNER_BUILD_SCRIPT = '/SRC/skia/infra/pathkit/build_pathkit.sh'
BUILD_PRODUCTS_ISOLATE_WHITELIST_WASM = [
'pathkit.*'
@ -11,7 +11,7 @@ BUILD_PRODUCTS_ISOLATE_WHITELIST_WASM = [
def compile_fn(api, checkout_root, _ignore):
out_dir = api.vars.cache_dir.join('docker', 'wasm')
out_dir = api.vars.cache_dir.join('docker', 'pathkit')
configuration = api.vars.builder_cfg.get('configuration', '')
target_arch = api.vars.builder_cfg.get('target_arch', '')
@ -19,12 +19,12 @@ def compile_fn(api, checkout_root, _ignore):
# because if that isn't the case, docker will make them and they will be
# owned by root, which causes mysterious failures. To mitigate this risk
# further, we don't use the same out_dir as everyone else (thus the _ignore)
# param. Instead, we use a "wasm" subdirectory in the "docker" named_cache.
# param. Instead, we use a "pathkit" subdirectory in the "docker" named_cache.
api.file.ensure_directory('mkdirs out_dir', out_dir, mode=0777)
# This uses the emscriptem sdk docker image and says "run the
# build_pathkit.sh helper script in there". Additionally, it binds two
# folders: the skia checkout to /SRC and the output directory to /OUT
# folders: the Skia checkout to /SRC and the output directory to /OUT
# The called helper script will make the compile happen and put the
# output in the right spot. The neat thing is that since the Skia checkout
# (and, by extension, the build script) is not a part of the image, but
@ -36,7 +36,7 @@ def compile_fn(api, checkout_root, _ignore):
'-v', '%s:/OUT' % out_dir,
DOCKER_IMAGE, INNER_BUILD_SCRIPT]
if configuration == 'Debug':
cmd.append('debug') # It defaults to Relesae
cmd.append('debug') # It defaults to Release
if target_arch == 'asmjs':
cmd.append('asm.js') # It defaults to WASM
api.run(
@ -46,7 +46,7 @@ def compile_fn(api, checkout_root, _ignore):
def copy_extra_build_products(api, _ignore, dst):
out_dir = api.vars.cache_dir.join('docker', 'wasm')
out_dir = api.vars.cache_dir.join('docker', 'pathkit')
# We don't use the normal copy_build_products because it uses
# shutil.move, which attempts to delete the previous file, which
# doesn't work because the docker created outputs are read-only and

View File

@ -203,7 +203,7 @@
"-e",
"ASM_JS=1",
"gcr.io/skia-public/gold-karma-chrome-tests:68.0.3440.106_v4",
"/SRC/skia/infra/pathkit/docker/test_pathkit.sh",
"/SRC/skia/infra/pathkit/test_pathkit.sh",
"--builder",
"Test-Debian9-EMCC-GCE-CPU-AVX2-asmjs-Debug-All-PathKit",
"--git_hash",

View File

@ -203,7 +203,7 @@
"-e",
"ASM_JS=1",
"gcr.io/skia-public/gold-karma-chrome-tests:68.0.3440.106_v4",
"/SRC/skia/infra/pathkit/docker/test_pathkit.sh",
"/SRC/skia/infra/pathkit/test_pathkit.sh",
"--builder",
"Test-Debian9-EMCC-GCE-CPU-AVX2-asmjs-Release-All-PathKit",
"--git_hash",

View File

@ -201,7 +201,7 @@
"-v",
"[START_DIR]/[SWARM_OUT_DIR]:/OUT",
"gcr.io/skia-public/gold-karma-chrome-tests:68.0.3440.106_v4",
"/SRC/skia/infra/pathkit/docker/test_pathkit.sh",
"/SRC/skia/infra/pathkit/test_pathkit.sh",
"--builder",
"Test-Debian9-EMCC-GCE-CPU-AVX2-wasm-Debug-All-PathKit",
"--git_hash",

View File

@ -203,7 +203,7 @@
"-v",
"[START_DIR]/[SWARM_OUT_DIR]:/OUT",
"gcr.io/skia-public/gold-karma-chrome-tests:68.0.3440.106_v4",
"/SRC/skia/infra/pathkit/docker/test_pathkit.sh",
"/SRC/skia/infra/pathkit/test_pathkit.sh",
"--builder",
"Test-Debian9-EMCC-GCE-CPU-AVX2-wasm-Debug-All-PathKit",
"--git_hash",

View File

@ -18,7 +18,7 @@ DEPS = [
DOCKER_IMAGE = 'gcr.io/skia-public/gold-karma-chrome-tests:68.0.3440.106_v4'
INNER_KARMA_SCRIPT = '/SRC/skia/infra/pathkit/docker/test_pathkit.sh'
INNER_KARMA_SCRIPT = '/SRC/skia/infra/pathkit/test_pathkit.sh'
def RunSteps(api):

View File

@ -286,11 +286,21 @@
"Build-Debian9-EMCC-asmjs-Release-PathKit"
]
},
"Build-Debian9-EMCC-wasm-Debug-CanvasKit": {
"tasks": [
"Build-Debian9-EMCC-wasm-Debug-CanvasKit"
]
},
"Build-Debian9-EMCC-wasm-Debug-PathKit": {
"tasks": [
"Build-Debian9-EMCC-wasm-Debug-PathKit"
]
},
"Build-Debian9-EMCC-wasm-Release-CanvasKit": {
"tasks": [
"Build-Debian9-EMCC-wasm-Release-CanvasKit"
]
},
"Build-Debian9-EMCC-wasm-Release-PathKit": {
"tasks": [
"Build-Debian9-EMCC-wasm-Release-PathKit"
@ -549,6 +559,11 @@
"Upload-BuildStats-Debian9-EMCC-asmjs-Release-PathKit"
]
},
"BuildStats-Debian9-EMCC-wasm-Release-CanvasKit": {
"tasks": [
"Upload-BuildStats-Debian9-EMCC-wasm-Release-CanvasKit"
]
},
"BuildStats-Debian9-EMCC-wasm-Release-PathKit": {
"tasks": [
"Upload-BuildStats-Debian9-EMCC-wasm-Release-PathKit"
@ -10232,6 +10247,134 @@
],
"service_account": "skia-external-compile-tasks@skia-swarming-bots.iam.gserviceaccount.com"
},
"Build-Debian9-EMCC-wasm-Debug-CanvasKit": {
"caches": [
{
"name": "vpython",
"path": "cache/vpython"
},
{
"name": "git",
"path": "cache/git"
},
{
"name": "git_cache",
"path": "cache/git_cache"
},
{
"name": "work",
"path": "cache/work"
},
{
"name": "docker",
"path": "cache/docker"
}
],
"cipd_packages": [
{
"name": "infra/tools/luci/kitchen/${platform}",
"path": ".",
"version": "git_revision:546aae39f1fb9dce9add528e2011afa574535ecd"
},
{
"name": "infra/tools/luci-auth/${platform}",
"path": "cipd_bin_packages",
"version": "git_revision:e1abc57be62d198b5c2f487bfb2fa2d2eb0e867c"
},
{
"name": "infra/tools/luci/vpython/${platform}",
"path": "cipd_bin_packages",
"version": "git_revision:b6cdec8586c9f8d3d728b1bc0bd4331330ba66fc"
},
{
"name": "infra/git/${platform}",
"path": "cipd_bin_packages",
"version": "version:2.17.1.chromium15"
},
{
"name": "infra/tools/git/${platform}",
"path": "cipd_bin_packages",
"version": "git_revision:0ae21738597e5601ba90372315145fec18582fc4"
},
{
"name": "infra/tools/luci/git-credential-luci/${platform}",
"path": "cipd_bin_packages",
"version": "git_revision:e1abc57be62d198b5c2f487bfb2fa2d2eb0e867c"
}
],
"command": [
"./kitchen${EXECUTABLE_SUFFIX}",
"cook",
"-checkout-dir",
"recipe_bundle",
"-mode",
"swarming",
"-luci-system-account",
"system",
"-cache-dir",
"cache",
"-temp-dir",
"tmp",
"-known-gerrit-host",
"android.googlesource.com",
"-known-gerrit-host",
"boringssl.googlesource.com",
"-known-gerrit-host",
"chromium.googlesource.com",
"-known-gerrit-host",
"dart.googlesource.com",
"-known-gerrit-host",
"fuchsia.googlesource.com",
"-known-gerrit-host",
"go.googlesource.com",
"-known-gerrit-host",
"llvm.googlesource.com",
"-known-gerrit-host",
"skia.googlesource.com",
"-known-gerrit-host",
"webrtc.googlesource.com",
"-output-result-json",
"${ISOLATED_OUTDIR}/build_result_filename",
"-workdir",
".",
"-recipe",
"compile",
"-properties",
"{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Build-Debian9-EMCC-wasm-Debug-CanvasKit\",\"patch_issue\":\"<(ISSUE)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"build\"}",
"-logdog-annotation-url",
"logdog://logs.chromium.org/skia/<(TASK_ID)/+/annotations"
],
"dependencies": [
"Housekeeper-PerCommit-BundleRecipes"
],
"dimensions": [
"cpu:x86-64-Haswell_GCE",
"gpu:none",
"machine_type:n1-standard-16",
"os:Debian-9.4",
"pool:Skia"
],
"env_prefixes": {
"PATH": [
"cipd_bin_packages",
"cipd_bin_packages/bin"
],
"VPYTHON_VIRTUALENV_ROOT": [
"cache/vpython"
]
},
"execution_timeout_ns": 3600000000000,
"extra_tags": {
"log_location": "logdog://logs.chromium.org/skia/<(TASK_ID)/+/annotations"
},
"io_timeout_ns": 3600000000000,
"isolate": "swarm_recipe.isolate",
"max_attempts": 1,
"outputs": [
"build"
],
"service_account": "skia-external-compile-tasks@skia-swarming-bots.iam.gserviceaccount.com"
},
"Build-Debian9-EMCC-wasm-Debug-PathKit": {
"caches": [
{
@ -10360,6 +10503,134 @@
],
"service_account": "skia-external-compile-tasks@skia-swarming-bots.iam.gserviceaccount.com"
},
"Build-Debian9-EMCC-wasm-Release-CanvasKit": {
"caches": [
{
"name": "vpython",
"path": "cache/vpython"
},
{
"name": "git",
"path": "cache/git"
},
{
"name": "git_cache",
"path": "cache/git_cache"
},
{
"name": "work",
"path": "cache/work"
},
{
"name": "docker",
"path": "cache/docker"
}
],
"cipd_packages": [
{
"name": "infra/tools/luci/kitchen/${platform}",
"path": ".",
"version": "git_revision:546aae39f1fb9dce9add528e2011afa574535ecd"
},
{
"name": "infra/tools/luci-auth/${platform}",
"path": "cipd_bin_packages",
"version": "git_revision:e1abc57be62d198b5c2f487bfb2fa2d2eb0e867c"
},
{
"name": "infra/tools/luci/vpython/${platform}",
"path": "cipd_bin_packages",
"version": "git_revision:b6cdec8586c9f8d3d728b1bc0bd4331330ba66fc"
},
{
"name": "infra/git/${platform}",
"path": "cipd_bin_packages",
"version": "version:2.17.1.chromium15"
},
{
"name": "infra/tools/git/${platform}",
"path": "cipd_bin_packages",
"version": "git_revision:0ae21738597e5601ba90372315145fec18582fc4"
},
{
"name": "infra/tools/luci/git-credential-luci/${platform}",
"path": "cipd_bin_packages",
"version": "git_revision:e1abc57be62d198b5c2f487bfb2fa2d2eb0e867c"
}
],
"command": [
"./kitchen${EXECUTABLE_SUFFIX}",
"cook",
"-checkout-dir",
"recipe_bundle",
"-mode",
"swarming",
"-luci-system-account",
"system",
"-cache-dir",
"cache",
"-temp-dir",
"tmp",
"-known-gerrit-host",
"android.googlesource.com",
"-known-gerrit-host",
"boringssl.googlesource.com",
"-known-gerrit-host",
"chromium.googlesource.com",
"-known-gerrit-host",
"dart.googlesource.com",
"-known-gerrit-host",
"fuchsia.googlesource.com",
"-known-gerrit-host",
"go.googlesource.com",
"-known-gerrit-host",
"llvm.googlesource.com",
"-known-gerrit-host",
"skia.googlesource.com",
"-known-gerrit-host",
"webrtc.googlesource.com",
"-output-result-json",
"${ISOLATED_OUTDIR}/build_result_filename",
"-workdir",
".",
"-recipe",
"compile",
"-properties",
"{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Build-Debian9-EMCC-wasm-Release-CanvasKit\",\"patch_issue\":\"<(ISSUE)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"build\"}",
"-logdog-annotation-url",
"logdog://logs.chromium.org/skia/<(TASK_ID)/+/annotations"
],
"dependencies": [
"Housekeeper-PerCommit-BundleRecipes"
],
"dimensions": [
"cpu:x86-64-Haswell_GCE",
"gpu:none",
"machine_type:n1-standard-16",
"os:Debian-9.4",
"pool:Skia"
],
"env_prefixes": {
"PATH": [
"cipd_bin_packages",
"cipd_bin_packages/bin"
],
"VPYTHON_VIRTUALENV_ROOT": [
"cache/vpython"
]
},
"execution_timeout_ns": 3600000000000,
"extra_tags": {
"log_location": "logdog://logs.chromium.org/skia/<(TASK_ID)/+/annotations"
},
"io_timeout_ns": 3600000000000,
"isolate": "swarm_recipe.isolate",
"max_attempts": 1,
"outputs": [
"build"
],
"service_account": "skia-external-compile-tasks@skia-swarming-bots.iam.gserviceaccount.com"
},
"Build-Debian9-EMCC-wasm-Release-PathKit": {
"caches": [
{
@ -17029,6 +17300,102 @@
"perf"
]
},
"BuildStats-Debian9-EMCC-wasm-Release-CanvasKit": {
"caches": [
{
"name": "vpython",
"path": "cache/vpython"
}
],
"cipd_packages": [
{
"name": "infra/tools/luci/kitchen/${platform}",
"path": ".",
"version": "git_revision:546aae39f1fb9dce9add528e2011afa574535ecd"
},
{
"name": "infra/tools/luci-auth/${platform}",
"path": "cipd_bin_packages",
"version": "git_revision:e1abc57be62d198b5c2f487bfb2fa2d2eb0e867c"
},
{
"name": "infra/tools/luci/vpython/${platform}",
"path": "cipd_bin_packages",
"version": "git_revision:b6cdec8586c9f8d3d728b1bc0bd4331330ba66fc"
}
],
"command": [
"./kitchen${EXECUTABLE_SUFFIX}",
"cook",
"-checkout-dir",
"recipe_bundle",
"-mode",
"swarming",
"-luci-system-account",
"system",
"-cache-dir",
"cache",
"-temp-dir",
"tmp",
"-known-gerrit-host",
"android.googlesource.com",
"-known-gerrit-host",
"boringssl.googlesource.com",
"-known-gerrit-host",
"chromium.googlesource.com",
"-known-gerrit-host",
"dart.googlesource.com",
"-known-gerrit-host",
"fuchsia.googlesource.com",
"-known-gerrit-host",
"go.googlesource.com",
"-known-gerrit-host",
"llvm.googlesource.com",
"-known-gerrit-host",
"skia.googlesource.com",
"-known-gerrit-host",
"webrtc.googlesource.com",
"-output-result-json",
"${ISOLATED_OUTDIR}/build_result_filename",
"-workdir",
".",
"-recipe",
"compute_buildstats",
"-properties",
"{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"BuildStats-Debian9-EMCC-wasm-Release-CanvasKit\",\"patch_issue\":\"<(ISSUE)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"perf\"}",
"-logdog-annotation-url",
"logdog://logs.chromium.org/skia/<(TASK_ID)/+/annotations"
],
"dependencies": [
"Housekeeper-PerCommit-BundleRecipes",
"Build-Debian9-EMCC-wasm-Release-CanvasKit"
],
"dimensions": [
"cpu:x86-64-Haswell_GCE",
"gpu:none",
"machine_type:n1-standard-16",
"os:Debian-9.4",
"pool:Skia"
],
"env_prefixes": {
"PATH": [
"cipd_bin_packages",
"cipd_bin_packages/bin"
],
"VPYTHON_VIRTUALENV_ROOT": [
"cache/vpython"
]
},
"execution_timeout_ns": 3600000000000,
"extra_tags": {
"log_location": "logdog://logs.chromium.org/skia/<(TASK_ID)/+/annotations"
},
"io_timeout_ns": 3600000000000,
"isolate": "swarm_recipe.isolate",
"outputs": [
"perf"
]
},
"BuildStats-Debian9-EMCC-wasm-Release-PathKit": {
"caches": [
{
@ -68797,6 +69164,105 @@
"isolate": "swarm_recipe.isolate",
"service_account": "skia-external-nano-uploader@skia-swarming-bots.iam.gserviceaccount.com"
},
"Upload-BuildStats-Debian9-EMCC-wasm-Release-CanvasKit": {
"caches": [
{
"name": "vpython",
"path": "cache/vpython"
}
],
"cipd_packages": [
{
"name": "infra/tools/luci/kitchen/${platform}",
"path": ".",
"version": "git_revision:546aae39f1fb9dce9add528e2011afa574535ecd"
},
{
"name": "infra/tools/luci-auth/${platform}",
"path": "cipd_bin_packages",
"version": "git_revision:e1abc57be62d198b5c2f487bfb2fa2d2eb0e867c"
},
{
"name": "infra/tools/luci/vpython/${platform}",
"path": "cipd_bin_packages",
"version": "git_revision:b6cdec8586c9f8d3d728b1bc0bd4331330ba66fc"
},
{
"name": "infra/gsutil",
"path": "cipd_bin_packages",
"version": "version:4.28"
}
],
"command": [
"./kitchen${EXECUTABLE_SUFFIX}",
"cook",
"-checkout-dir",
"recipe_bundle",
"-mode",
"swarming",
"-luci-system-account",
"system",
"-cache-dir",
"cache",
"-temp-dir",
"tmp",
"-known-gerrit-host",
"android.googlesource.com",
"-known-gerrit-host",
"boringssl.googlesource.com",
"-known-gerrit-host",
"chromium.googlesource.com",
"-known-gerrit-host",
"dart.googlesource.com",
"-known-gerrit-host",
"fuchsia.googlesource.com",
"-known-gerrit-host",
"go.googlesource.com",
"-known-gerrit-host",
"llvm.googlesource.com",
"-known-gerrit-host",
"skia.googlesource.com",
"-known-gerrit-host",
"webrtc.googlesource.com",
"-output-result-json",
"${ISOLATED_OUTDIR}/build_result_filename",
"-workdir",
".",
"-recipe",
"upload_buildstats_results",
"-properties",
"{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"BuildStats-Debian9-EMCC-wasm-Release-CanvasKit\",\"gs_bucket\":\"skia-perf\",\"patch_issue\":\"<(ISSUE)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\"}",
"-logdog-annotation-url",
"logdog://logs.chromium.org/skia/<(TASK_ID)/+/annotations"
],
"dependencies": [
"Housekeeper-PerCommit-BundleRecipes",
"BuildStats-Debian9-EMCC-wasm-Release-CanvasKit"
],
"dimensions": [
"cpu:x86-64-Haswell_GCE",
"gpu:none",
"machine_type:n1-highmem-2",
"os:Debian-9.4",
"pool:Skia"
],
"env_prefixes": {
"PATH": [
"cipd_bin_packages",
"cipd_bin_packages/bin"
],
"VPYTHON_VIRTUALENV_ROOT": [
"cache/vpython"
]
},
"execution_timeout_ns": 3600000000000,
"extra_tags": {
"log_location": "logdog://logs.chromium.org/skia/<(TASK_ID)/+/annotations"
},
"io_timeout_ns": 3600000000000,
"isolate": "swarm_recipe.isolate",
"service_account": "skia-external-nano-uploader@skia-swarming-bots.iam.gserviceaccount.com"
},
"Upload-BuildStats-Debian9-EMCC-wasm-Release-PathKit": {
"caches": [
{

View File

@ -0,0 +1,25 @@
#!/bin/bash
# Copyright 2018 Google LLC
#
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
# This assumes it is being run inside a docker container of emsdk-base
# and a Skia checkout has been mounted at /SRC and the output directory
# is mounted at /OUT
# For example:
# docker run -v $SKIA_ROOT:/SRC -v $SKIA_ROOT/out/canvaskit:/OUT gcr.io/skia-public/emsdk-release:1.38.6_jre /SRC/infra/canvaskit/build_canvaskit.sh
set +e
set -x
# Clean out previous builds (ignoring any errors for things like folders)
# (e.g. we don't want to delete /OUT/depot_tools/)
rm -f /OUT/*
set -e
#BASE_DIR is the dir this script is in ($SKIA_ROOT/infra/canvaskit)
BASE_DIR=`cd $(dirname ${BASH_SOURCE[0]}) && pwd`
CANVASKIT_DIR=$BASE_DIR/../../experimental/canvaskit
BUILD_DIR=/OUT $CANVASKIT_DIR/compile.sh $@

View File

@ -9,13 +9,17 @@
# is mounted at /OUT
# For example:
# docker run -v $SKIA_ROOT:/SRC -v $SKIA_ROOT/out/dockerpathkit:/OUT gcr.io/skia-public/emsdk-release:1.38.6_jre /SRC/infra/pathkit/docker/build_pathkit.sh
# docker run -v $SKIA_ROOT:/SRC -v $SKIA_ROOT/out/dockerpathkit:/OUT gcr.io/skia-public/emsdk-release:1.38.6_jre /SRC/infra/pathkit/build_pathkit.sh
#BASE_DIR is the dir this script is in ($SKIA_ROOT/infra/pathkit/docker)
set +e
set -x
# Clean out previous builds (ignoring any errors for things like folders)
# (e.g. we don't want to delete /OUT/depot_tools/)
rm -f /OUT/*
set -e
#BASE_DIR is the dir this script is in ($SKIA_ROOT/infra/pathkit)
BASE_DIR=`cd $(dirname ${BASH_SOURCE[0]}) && pwd`
PATHKIT_DIR=$BASE_DIR/../../../modules/pathkit
# Clean out previous builds
rm /OUT/*
PATHKIT_DIR=$BASE_DIR/../../modules/pathkit
BUILD_DIR=/OUT $PATHKIT_DIR/compile.sh $@

View File

@ -26,7 +26,7 @@ For testing the image locally, the following flow can be helpful:
# Run bash in it to poke around and make sure things are properly installed
docker run -it emsdk-release /bin/bash
# Compile PathKit with the local image
docker run -v $SKIA_ROOT:/SRC -v $SKIA_ROOT/out/dockerpathkit:/OUT emsdk-base /SRC/infra/pathkit/docker/build_pathkit.sh
docker run -v $SKIA_ROOT:/SRC -v $SKIA_ROOT/out/dockerpathkit:/OUT emsdk-base /SRC/infra/pathkit/build_pathkit.sh
karma-chrome-tests
------------------
@ -91,4 +91,4 @@ For testing the image locally, the following can be helpful:
docker run -it --shm-size=2gb gold-karma-chrome-tests /bin/bash
# Run the tests and collect Gold output with the local source repo
mkdir -p -m 0777 /tmp/dockergold
docker run --shm-size=2gb -v $SKIA_ROOT:/SRC -v /tmp/dockergold:/OUT gold-karma-chrome-tests /SRC/infra/pathkit/docker/test_pathkit.sh
docker run --shm-size=2gb -v $SKIA_ROOT:/SRC -v /tmp/dockergold:/OUT gold-karma-chrome-tests /SRC/infra/pathkit/test_pathkit.sh

View File

@ -9,13 +9,13 @@
# is mounted at /OUT
# For example:
# docker run -v $SKIA_ROOT:/SRC -v /tmp/dockerout:/OUT gcr.io/skia-public/gold-karma-chrome-tests:68.0.3440.106_v1 /SRC/infra/pathkit/docker/test_pathkit.sh
# docker run -v $SKIA_ROOT:/SRC -v /tmp/dockerout:/OUT gcr.io/skia-public/gold-karma-chrome-tests:68.0.3440.106_v1 /SRC/infra/pathkit/test_pathkit.sh
set -ex
#BASE_DIR is the dir this script is in ($SKIA_ROOT/infra/pathkit/docker)
#BASE_DIR is the dir this script is in ($SKIA_ROOT/infra/pathkit)
BASE_DIR=`cd $(dirname ${BASH_SOURCE[0]}) && pwd`
PATHKIT_DIR=$BASE_DIR/../../../modules/pathkit
PATHKIT_DIR=$BASE_DIR/../../modules/pathkit
# Start the aggregator in the background
/opt/gold-aggregator $@ &

View File

@ -57,12 +57,12 @@ test-docker:
mkdir -p $$SKIA_ROOT/out/dockerbuild
docker run --rm -v $$SKIA_ROOT:/SRC -v $$SKIA_ROOT/out/dockerbuild:/OUT \
gcr.io/skia-public/emsdk-release:1.38.6_jre /SRC/infra/pathkit/docker/build_pathkit.sh
gcr.io/skia-public/emsdk-release:1.38.6_jre /SRC/infra/pathkit/build_pathkit.sh
cp ../../out/dockerbuild/pathkit.js ./npm-wasm/bin/test/pathkit.js
cp ../../out/dockerbuild/pathkit.wasm ./npm-wasm/bin/test/pathkit.wasm
docker run --rm -v $$SKIA_ROOT:/SRC -v $$SKIA_ROOT/out/dockerbuild:/OUT \
gcr.io/skia-public/emsdk-release:1.38.6_jre /SRC/infra/pathkit/docker/build_pathkit.sh asm.js
gcr.io/skia-public/emsdk-release:1.38.6_jre /SRC/infra/pathkit/build_pathkit.sh asm.js
cp ../../out/dockerbuild/pathkit.js ./npm-asmjs/bin/test/pathkit.js
cp ../../out/dockerbuild/pathkit.js.mem ./npm-asmjs/bin/test/pathkit.js.mem

View File

@ -4,10 +4,12 @@
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
set -ex
BASE_DIR=`cd $(dirname ${BASH_SOURCE[0]}) && pwd`
HTML_SHELL=$BASE_DIR/shell.html
BUILD_DIR=${BUILD_DIR:="out/pathkit"}
mkdir -p $BUILD_DIR
# This expects the environment variable EMSDK to be set
if [[ ! -d $EMSDK ]]; then
@ -67,20 +69,21 @@ if [[ $@ == *asm.js* ]]; then
fi
OUTPUT="-o $BUILD_DIR/pathkit.js"
source $EMSDK/emsdk_env.sh
NINJA=`which ninja`
EMCC=`which emcc`
EMCXX=`which em++`
mkdir -p $BUILD_DIR
# Turn off exiting while we check for ninja (which may not be on PATH)
set +e
NINJA=`which ninja`
if [[ -z $NINJA ]]; then
git clone "https://chromium.googlesource.com/chromium/tools/depot_tools.git" --depth 1 $BUILD_DIR/depot_tools
NINJA=$BUILD_DIR/depot_tools/ninja
fi
set -ex
# Re-enable error checking
set -e
echo "Compiling bitcode"
@ -119,7 +122,7 @@ ${NINJA} -C ${BUILD_DIR} libpathkit.a
echo "Generating WASM"
em++ $RELEASE_CONF -std=c++14 \
${EMCXX} $RELEASE_CONF -std=c++14 \
-Iinclude/config \
-Iinclude/core \
-Iinclude/effects \

View File

@ -96,13 +96,13 @@ Samples
var locate_file = '';
if (window.WebAssembly && typeof window.WebAssembly.compile === 'function') {
console.log('WebAssembly is supported!');
locate_file = 'https://storage.googleapis.com/skia-cdn/canvaskit-wasm/0.0.3/bin/';
locate_file = 'https://storage.googleapis.com/skia-cdn/canvaskit-wasm/0.1.0/bin/';
} else {
console.log('WebAssembly is not supported (yet) on this browser.');
document.getElementById('demo').innerHTML = "<div>WASM not supported by your browser. Try a recent version of Chrome, Firefox, Edge, or Safari.</div>";
return;
}
s.src = locate_file + 'skia.js';
s.src = locate_file + 'canvaskit.js';
s.onload = () => {
var CanvasKit = null;
var legoJSON = null;