1*6dbdd20aSAndroid Build Coastguard Worker# Copyright (C) 2017 The Android Open Source Project 2*6dbdd20aSAndroid Build Coastguard Worker# 3*6dbdd20aSAndroid Build Coastguard Worker# Licensed under the Apache License, Version 2.0 (the "License"); 4*6dbdd20aSAndroid Build Coastguard Worker# you may not use this file except in compliance with the License. 5*6dbdd20aSAndroid Build Coastguard Worker# You may obtain a copy of the License at 6*6dbdd20aSAndroid Build Coastguard Worker# 7*6dbdd20aSAndroid Build Coastguard Worker# http://www.apache.org/licenses/LICENSE-2.0 8*6dbdd20aSAndroid Build Coastguard Worker# 9*6dbdd20aSAndroid Build Coastguard Worker# Unless required by applicable law or agreed to in writing, software 10*6dbdd20aSAndroid Build Coastguard Worker# distributed under the License is distributed on an "AS IS" BASIS, 11*6dbdd20aSAndroid Build Coastguard Worker# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12*6dbdd20aSAndroid Build Coastguard Worker# See the License for the specific language governing permissions and 13*6dbdd20aSAndroid Build Coastguard Worker# limitations under the License. 14*6dbdd20aSAndroid Build Coastguard Worker 15*6dbdd20aSAndroid Build Coastguard Workerimport("../../gn/gen_perfetto_version_header.gni") 16*6dbdd20aSAndroid Build Coastguard Workerimport("../../gn/perfetto.gni") 17*6dbdd20aSAndroid Build Coastguard Workerimport("../../gn/perfetto_component.gni") 18*6dbdd20aSAndroid Build Coastguard Workerimport("../../gn/test.gni") 19*6dbdd20aSAndroid Build Coastguard Workerimport("../../gn/wasm.gni") 20*6dbdd20aSAndroid Build Coastguard Worker 21*6dbdd20aSAndroid Build Coastguard Worker# On standalone builds this is all the OSes we support. On chromium builds, 22*6dbdd20aSAndroid Build Coastguard Worker# though, this really means !is_fuchsia && !is_nacl. 23*6dbdd20aSAndroid Build Coastguard Worker_subprocess_supported = 24*6dbdd20aSAndroid Build Coastguard Worker is_linux || is_chromeos || is_android || is_mac || is_win 25*6dbdd20aSAndroid Build Coastguard Worker 26*6dbdd20aSAndroid Build Coastguard Workerperfetto_component("base") { 27*6dbdd20aSAndroid Build Coastguard Worker deps = [ 28*6dbdd20aSAndroid Build Coastguard Worker "../../gn:base_platform", 29*6dbdd20aSAndroid Build Coastguard Worker "../../gn:default_deps", 30*6dbdd20aSAndroid Build Coastguard Worker ] 31*6dbdd20aSAndroid Build Coastguard Worker public_deps = [ 32*6dbdd20aSAndroid Build Coastguard Worker "../../include/perfetto/base", 33*6dbdd20aSAndroid Build Coastguard Worker "../../include/perfetto/ext/base", 34*6dbdd20aSAndroid Build Coastguard Worker ] 35*6dbdd20aSAndroid Build Coastguard Worker sources = [ 36*6dbdd20aSAndroid Build Coastguard Worker "android_utils.cc", 37*6dbdd20aSAndroid Build Coastguard Worker "base64.cc", 38*6dbdd20aSAndroid Build Coastguard Worker "crash_keys.cc", 39*6dbdd20aSAndroid Build Coastguard Worker "ctrl_c_handler.cc", 40*6dbdd20aSAndroid Build Coastguard Worker "event_fd.cc", 41*6dbdd20aSAndroid Build Coastguard Worker "file_utils.cc", 42*6dbdd20aSAndroid Build Coastguard Worker "getopt_compat.cc", 43*6dbdd20aSAndroid Build Coastguard Worker "log_ring_buffer.h", 44*6dbdd20aSAndroid Build Coastguard Worker "logging.cc", 45*6dbdd20aSAndroid Build Coastguard Worker "metatrace.cc", 46*6dbdd20aSAndroid Build Coastguard Worker "paged_memory.cc", 47*6dbdd20aSAndroid Build Coastguard Worker "periodic_task.cc", 48*6dbdd20aSAndroid Build Coastguard Worker "pipe.cc", 49*6dbdd20aSAndroid Build Coastguard Worker "scoped_mmap.cc", 50*6dbdd20aSAndroid Build Coastguard Worker "status.cc", 51*6dbdd20aSAndroid Build Coastguard Worker "string_splitter.cc", 52*6dbdd20aSAndroid Build Coastguard Worker "string_utils.cc", 53*6dbdd20aSAndroid Build Coastguard Worker "string_view.cc", 54*6dbdd20aSAndroid Build Coastguard Worker "string_view_splitter.cc", 55*6dbdd20aSAndroid Build Coastguard Worker "temp_file.cc", 56*6dbdd20aSAndroid Build Coastguard Worker "thread_checker.cc", 57*6dbdd20aSAndroid Build Coastguard Worker "thread_utils.cc", 58*6dbdd20aSAndroid Build Coastguard Worker "time.cc", 59*6dbdd20aSAndroid Build Coastguard Worker "utils.cc", 60*6dbdd20aSAndroid Build Coastguard Worker "uuid.cc", 61*6dbdd20aSAndroid Build Coastguard Worker "virtual_destructors.cc", 62*6dbdd20aSAndroid Build Coastguard Worker "waitable_event.cc", 63*6dbdd20aSAndroid Build Coastguard Worker "watchdog_posix.cc", 64*6dbdd20aSAndroid Build Coastguard Worker "weak_runner.cc", 65*6dbdd20aSAndroid Build Coastguard Worker ] 66*6dbdd20aSAndroid Build Coastguard Worker 67*6dbdd20aSAndroid Build Coastguard Worker if (!is_nacl) { 68*6dbdd20aSAndroid Build Coastguard Worker sources += [ 69*6dbdd20aSAndroid Build Coastguard Worker "thread_task_runner.cc", 70*6dbdd20aSAndroid Build Coastguard Worker "unix_task_runner.cc", 71*6dbdd20aSAndroid Build Coastguard Worker ] 72*6dbdd20aSAndroid Build Coastguard Worker } 73*6dbdd20aSAndroid Build Coastguard Worker 74*6dbdd20aSAndroid Build Coastguard Worker if (_subprocess_supported) { 75*6dbdd20aSAndroid Build Coastguard Worker sources += [ 76*6dbdd20aSAndroid Build Coastguard Worker "subprocess.cc", 77*6dbdd20aSAndroid Build Coastguard Worker "subprocess_posix.cc", 78*6dbdd20aSAndroid Build Coastguard Worker "subprocess_windows.cc", 79*6dbdd20aSAndroid Build Coastguard Worker ] 80*6dbdd20aSAndroid Build Coastguard Worker } 81*6dbdd20aSAndroid Build Coastguard Worker 82*6dbdd20aSAndroid Build Coastguard Worker if (enable_perfetto_stderr_crash_dump) { 83*6dbdd20aSAndroid Build Coastguard Worker deps += [ ":debug_crash_stack_trace" ] 84*6dbdd20aSAndroid Build Coastguard Worker } 85*6dbdd20aSAndroid Build Coastguard Worker} 86*6dbdd20aSAndroid Build Coastguard Worker 87*6dbdd20aSAndroid Build Coastguard Workerperfetto_component("clock_snapshots") { 88*6dbdd20aSAndroid Build Coastguard Worker deps = [ "../../gn:default_deps" ] 89*6dbdd20aSAndroid Build Coastguard Worker public_deps = [ 90*6dbdd20aSAndroid Build Coastguard Worker "../../include/perfetto/ext/base", 91*6dbdd20aSAndroid Build Coastguard Worker "../../protos/perfetto/common:zero", 92*6dbdd20aSAndroid Build Coastguard Worker ] 93*6dbdd20aSAndroid Build Coastguard Worker sources = [ "clock_snapshots.cc" ] 94*6dbdd20aSAndroid Build Coastguard Worker} 95*6dbdd20aSAndroid Build Coastguard Worker 96*6dbdd20aSAndroid Build Coastguard Worker# This target needs to be named as such because it's exposed directly in Bazel 97*6dbdd20aSAndroid Build Coastguard Worker# and Android.bp. 98*6dbdd20aSAndroid Build Coastguard Workerperfetto_component("perfetto_base_default_platform") { 99*6dbdd20aSAndroid Build Coastguard Worker deps = [ 100*6dbdd20aSAndroid Build Coastguard Worker "../../gn:default_deps", 101*6dbdd20aSAndroid Build Coastguard Worker "../../include/perfetto/ext/base", 102*6dbdd20aSAndroid Build Coastguard Worker ] 103*6dbdd20aSAndroid Build Coastguard Worker sources = [ "default_platform.cc" ] 104*6dbdd20aSAndroid Build Coastguard Worker} 105*6dbdd20aSAndroid Build Coastguard Worker 106*6dbdd20aSAndroid Build Coastguard Workerperfetto_component("version") { 107*6dbdd20aSAndroid Build Coastguard Worker deps = [ 108*6dbdd20aSAndroid Build Coastguard Worker ":base", 109*6dbdd20aSAndroid Build Coastguard Worker "../../gn:default_deps", 110*6dbdd20aSAndroid Build Coastguard Worker ] 111*6dbdd20aSAndroid Build Coastguard Worker public_deps = [ "../../include/perfetto/ext/base:version" ] 112*6dbdd20aSAndroid Build Coastguard Worker sources = [ "version.cc" ] 113*6dbdd20aSAndroid Build Coastguard Worker 114*6dbdd20aSAndroid Build Coastguard Worker if (enable_perfetto_version_gen) { 115*6dbdd20aSAndroid Build Coastguard Worker deps += [ ":version_gen_h" ] 116*6dbdd20aSAndroid Build Coastguard Worker } 117*6dbdd20aSAndroid Build Coastguard Worker} 118*6dbdd20aSAndroid Build Coastguard Worker 119*6dbdd20aSAndroid Build Coastguard Workerif (enable_perfetto_version_gen) { 120*6dbdd20aSAndroid Build Coastguard Worker config("version_gen_config") { 121*6dbdd20aSAndroid Build Coastguard Worker include_dirs = [ root_gen_dir ] 122*6dbdd20aSAndroid Build Coastguard Worker } 123*6dbdd20aSAndroid Build Coastguard Worker 124*6dbdd20aSAndroid Build Coastguard Worker # Note: the build file translators (tools/gn_utils.py) depend on the hardcoded 125*6dbdd20aSAndroid Build Coastguard Worker # "//src/base:version_gen_h". If you rename this target, update build file 126*6dbdd20aSAndroid Build Coastguard Worker # translators accordingly. 127*6dbdd20aSAndroid Build Coastguard Worker gen_perfetto_version_header("version_gen_h") { 128*6dbdd20aSAndroid Build Coastguard Worker cpp_out = "${root_gen_dir}/perfetto_version.gen.h" 129*6dbdd20aSAndroid Build Coastguard Worker } 130*6dbdd20aSAndroid Build Coastguard Worker} 131*6dbdd20aSAndroid Build Coastguard Worker 132*6dbdd20aSAndroid Build Coastguard Workerif (enable_perfetto_stderr_crash_dump) { 133*6dbdd20aSAndroid Build Coastguard Worker source_set("debug_crash_stack_trace") { 134*6dbdd20aSAndroid Build Coastguard Worker sources = [ "debug_crash_stack_trace.cc" ] 135*6dbdd20aSAndroid Build Coastguard Worker deps = [ 136*6dbdd20aSAndroid Build Coastguard Worker "../../gn:default_deps", 137*6dbdd20aSAndroid Build Coastguard Worker "../../include/perfetto/ext/base", 138*6dbdd20aSAndroid Build Coastguard Worker "../../include/perfetto/ext/base", 139*6dbdd20aSAndroid Build Coastguard Worker ] 140*6dbdd20aSAndroid Build Coastguard Worker if (is_linux || is_android) { 141*6dbdd20aSAndroid Build Coastguard Worker deps += [ "../../gn:libbacktrace" ] 142*6dbdd20aSAndroid Build Coastguard Worker } 143*6dbdd20aSAndroid Build Coastguard Worker cflags = [ "-Wno-deprecated" ] 144*6dbdd20aSAndroid Build Coastguard Worker } 145*6dbdd20aSAndroid Build Coastguard Worker} 146*6dbdd20aSAndroid Build Coastguard Worker 147*6dbdd20aSAndroid Build Coastguard Workerif (enable_perfetto_ipc) { 148*6dbdd20aSAndroid Build Coastguard Worker # This cannot be in :base as it does not build on WASM. 149*6dbdd20aSAndroid Build Coastguard Worker perfetto_component("unix_socket") { 150*6dbdd20aSAndroid Build Coastguard Worker deps = [ 151*6dbdd20aSAndroid Build Coastguard Worker "../../gn:default_deps", 152*6dbdd20aSAndroid Build Coastguard Worker "../../include/perfetto/ext/base", 153*6dbdd20aSAndroid Build Coastguard Worker ] 154*6dbdd20aSAndroid Build Coastguard Worker sources = [ 155*6dbdd20aSAndroid Build Coastguard Worker "unix_socket.cc", 156*6dbdd20aSAndroid Build Coastguard Worker "vm_sockets.h", 157*6dbdd20aSAndroid Build Coastguard Worker ] 158*6dbdd20aSAndroid Build Coastguard Worker if (is_win && perfetto_build_standalone) { 159*6dbdd20aSAndroid Build Coastguard Worker libs = [ "Ws2_32.lib" ] 160*6dbdd20aSAndroid Build Coastguard Worker } 161*6dbdd20aSAndroid Build Coastguard Worker } 162*6dbdd20aSAndroid Build Coastguard Worker} 163*6dbdd20aSAndroid Build Coastguard Worker 164*6dbdd20aSAndroid Build Coastguard Workersource_set("test_support") { 165*6dbdd20aSAndroid Build Coastguard Worker testonly = true 166*6dbdd20aSAndroid Build Coastguard Worker deps = [ 167*6dbdd20aSAndroid Build Coastguard Worker ":base", 168*6dbdd20aSAndroid Build Coastguard Worker "../../gn:default_deps", 169*6dbdd20aSAndroid Build Coastguard Worker "../../gn:gtest_and_gmock", 170*6dbdd20aSAndroid Build Coastguard Worker ] 171*6dbdd20aSAndroid Build Coastguard Worker sources = [ 172*6dbdd20aSAndroid Build Coastguard Worker "test/status_matchers.h", 173*6dbdd20aSAndroid Build Coastguard Worker "test/tmp_dir_tree.cc", 174*6dbdd20aSAndroid Build Coastguard Worker "test/tmp_dir_tree.h", 175*6dbdd20aSAndroid Build Coastguard Worker "test/utils.cc", 176*6dbdd20aSAndroid Build Coastguard Worker "test/utils.h", 177*6dbdd20aSAndroid Build Coastguard Worker "test/vm_test_utils.cc", 178*6dbdd20aSAndroid Build Coastguard Worker "test/vm_test_utils.h", 179*6dbdd20aSAndroid Build Coastguard Worker ] 180*6dbdd20aSAndroid Build Coastguard Worker 181*6dbdd20aSAndroid Build Coastguard Worker if (!is_nacl) { 182*6dbdd20aSAndroid Build Coastguard Worker # test_task_runner depends on unix_task_runner, which isn't available on 183*6dbdd20aSAndroid Build Coastguard Worker # NaCL. 184*6dbdd20aSAndroid Build Coastguard Worker sources += [ 185*6dbdd20aSAndroid Build Coastguard Worker "test/test_task_runner.cc", 186*6dbdd20aSAndroid Build Coastguard Worker "test/test_task_runner.h", 187*6dbdd20aSAndroid Build Coastguard Worker ] 188*6dbdd20aSAndroid Build Coastguard Worker } 189*6dbdd20aSAndroid Build Coastguard Worker} 190*6dbdd20aSAndroid Build Coastguard Worker 191*6dbdd20aSAndroid Build Coastguard Workerperfetto_unittest_source_set("unittests") { 192*6dbdd20aSAndroid Build Coastguard Worker testonly = true 193*6dbdd20aSAndroid Build Coastguard Worker deps = [ 194*6dbdd20aSAndroid Build Coastguard Worker ":base", 195*6dbdd20aSAndroid Build Coastguard Worker ":test_support", 196*6dbdd20aSAndroid Build Coastguard Worker "../../gn:default_deps", 197*6dbdd20aSAndroid Build Coastguard Worker "../../gn:gtest_and_gmock", 198*6dbdd20aSAndroid Build Coastguard Worker ] 199*6dbdd20aSAndroid Build Coastguard Worker 200*6dbdd20aSAndroid Build Coastguard Worker if (enable_perfetto_ipc) { 201*6dbdd20aSAndroid Build Coastguard Worker deps += [ "http:unittests" ] 202*6dbdd20aSAndroid Build Coastguard Worker } 203*6dbdd20aSAndroid Build Coastguard Worker 204*6dbdd20aSAndroid Build Coastguard Worker sources = [ 205*6dbdd20aSAndroid Build Coastguard Worker "base64_unittest.cc", 206*6dbdd20aSAndroid Build Coastguard Worker "circular_queue_unittest.cc", 207*6dbdd20aSAndroid Build Coastguard Worker "flat_hash_map_unittest.cc", 208*6dbdd20aSAndroid Build Coastguard Worker "flat_set_unittest.cc", 209*6dbdd20aSAndroid Build Coastguard Worker "getopt_compat_unittest.cc", 210*6dbdd20aSAndroid Build Coastguard Worker "hash_unittest.cc", 211*6dbdd20aSAndroid Build Coastguard Worker "logging_unittest.cc", 212*6dbdd20aSAndroid Build Coastguard Worker "no_destructor_unittest.cc", 213*6dbdd20aSAndroid Build Coastguard Worker "paged_memory_unittest.cc", 214*6dbdd20aSAndroid Build Coastguard Worker "periodic_task_unittest.cc", 215*6dbdd20aSAndroid Build Coastguard Worker "scoped_file_unittest.cc", 216*6dbdd20aSAndroid Build Coastguard Worker "scoped_mmap_unittest.cc", 217*6dbdd20aSAndroid Build Coastguard Worker "small_vector_unittest.cc", 218*6dbdd20aSAndroid Build Coastguard Worker "status_or_unittest.cc", 219*6dbdd20aSAndroid Build Coastguard Worker "status_unittest.cc", 220*6dbdd20aSAndroid Build Coastguard Worker "string_splitter_unittest.cc", 221*6dbdd20aSAndroid Build Coastguard Worker "string_utils_unittest.cc", 222*6dbdd20aSAndroid Build Coastguard Worker "string_view_splitter_unittest.cc", 223*6dbdd20aSAndroid Build Coastguard Worker "string_view_unittest.cc", 224*6dbdd20aSAndroid Build Coastguard Worker "string_writer_unittest.cc", 225*6dbdd20aSAndroid Build Coastguard Worker "task_runner_unittest.cc", 226*6dbdd20aSAndroid Build Coastguard Worker "temp_file_unittest.cc", 227*6dbdd20aSAndroid Build Coastguard Worker "thread_checker_unittest.cc", 228*6dbdd20aSAndroid Build Coastguard Worker "time_unittest.cc", 229*6dbdd20aSAndroid Build Coastguard Worker "utils_unittest.cc", 230*6dbdd20aSAndroid Build Coastguard Worker "uuid_unittest.cc", 231*6dbdd20aSAndroid Build Coastguard Worker "weak_ptr_unittest.cc", 232*6dbdd20aSAndroid Build Coastguard Worker ] 233*6dbdd20aSAndroid Build Coastguard Worker if (_subprocess_supported) { 234*6dbdd20aSAndroid Build Coastguard Worker # Don't run on Fuchsia, NaCL. They pretend to be POSIX but then give up on 235*6dbdd20aSAndroid Build Coastguard Worker # execve(2). 236*6dbdd20aSAndroid Build Coastguard Worker sources += [ "subprocess_unittest.cc" ] 237*6dbdd20aSAndroid Build Coastguard Worker } 238*6dbdd20aSAndroid Build Coastguard Worker 239*6dbdd20aSAndroid Build Coastguard Worker # TODO: Enable these for Windows when possible. 240*6dbdd20aSAndroid Build Coastguard Worker if (!is_win) { 241*6dbdd20aSAndroid Build Coastguard Worker sources += [ 242*6dbdd20aSAndroid Build Coastguard Worker "metatrace_unittest.cc", 243*6dbdd20aSAndroid Build Coastguard Worker "thread_task_runner_unittest.cc", 244*6dbdd20aSAndroid Build Coastguard Worker "watchdog_posix_unittest.cc", 245*6dbdd20aSAndroid Build Coastguard Worker ] 246*6dbdd20aSAndroid Build Coastguard Worker } 247*6dbdd20aSAndroid Build Coastguard Worker if (is_fuchsia) { 248*6dbdd20aSAndroid Build Coastguard Worker deps += [ "//third_party/fuchsia-sdk/sdk/pkg/fdio" ] # nogncheck 249*6dbdd20aSAndroid Build Coastguard Worker } 250*6dbdd20aSAndroid Build Coastguard Worker if (perfetto_build_standalone || perfetto_build_with_android) { 251*6dbdd20aSAndroid Build Coastguard Worker sources += [ "unix_socket_unittest.cc" ] 252*6dbdd20aSAndroid Build Coastguard Worker deps += [ ":unix_socket" ] 253*6dbdd20aSAndroid Build Coastguard Worker 254*6dbdd20aSAndroid Build Coastguard Worker # This causes some problems on the chromium waterfall. 255*6dbdd20aSAndroid Build Coastguard Worker if (is_linux || is_android) { 256*6dbdd20aSAndroid Build Coastguard Worker sources += [ "watchdog_unittest.cc" ] 257*6dbdd20aSAndroid Build Coastguard Worker } 258*6dbdd20aSAndroid Build Coastguard Worker } 259*6dbdd20aSAndroid Build Coastguard Worker} 260*6dbdd20aSAndroid Build Coastguard Worker 261*6dbdd20aSAndroid Build Coastguard Workerif (enable_perfetto_benchmarks) { 262*6dbdd20aSAndroid Build Coastguard Worker declare_args() { 263*6dbdd20aSAndroid Build Coastguard Worker perfetto_benchmark_3p_libs_prefix = "" 264*6dbdd20aSAndroid Build Coastguard Worker } 265*6dbdd20aSAndroid Build Coastguard Worker source_set("benchmarks") { 266*6dbdd20aSAndroid Build Coastguard Worker # If you intend to reproduce the comparison with {Absl, Folly, Tessil} 267*6dbdd20aSAndroid Build Coastguard Worker # you need to manually install those libraries and then set the GN arg 268*6dbdd20aSAndroid Build Coastguard Worker # perfetto_benchmark_3p_libs_prefix = "/usr/local" 269*6dbdd20aSAndroid Build Coastguard Worker testonly = true 270*6dbdd20aSAndroid Build Coastguard Worker deps = [ 271*6dbdd20aSAndroid Build Coastguard Worker ":base", 272*6dbdd20aSAndroid Build Coastguard Worker "../../gn:benchmark", 273*6dbdd20aSAndroid Build Coastguard Worker "../../gn:default_deps", 274*6dbdd20aSAndroid Build Coastguard Worker ] 275*6dbdd20aSAndroid Build Coastguard Worker if (perfetto_benchmark_3p_libs_prefix != "") { 276*6dbdd20aSAndroid Build Coastguard Worker defines = [ "PERFETTO_HASH_MAP_COMPARE_THIRD_PARTY_LIBS" ] 277*6dbdd20aSAndroid Build Coastguard Worker cflags = [ "-isystem${perfetto_benchmark_3p_libs_prefix}/include" ] 278*6dbdd20aSAndroid Build Coastguard Worker libs = [ 279*6dbdd20aSAndroid Build Coastguard Worker "${perfetto_benchmark_3p_libs_prefix}/lib/libfolly.a", 280*6dbdd20aSAndroid Build Coastguard Worker "${perfetto_benchmark_3p_libs_prefix}/lib/libabsl_raw_hash_set.a", 281*6dbdd20aSAndroid Build Coastguard Worker "${perfetto_benchmark_3p_libs_prefix}/lib/libabsl_hash.a", 282*6dbdd20aSAndroid Build Coastguard Worker ] 283*6dbdd20aSAndroid Build Coastguard Worker } 284*6dbdd20aSAndroid Build Coastguard Worker sources = [ 285*6dbdd20aSAndroid Build Coastguard Worker "flat_hash_map_benchmark.cc", 286*6dbdd20aSAndroid Build Coastguard Worker "flat_set_benchmark.cc", 287*6dbdd20aSAndroid Build Coastguard Worker ] 288*6dbdd20aSAndroid Build Coastguard Worker } 289*6dbdd20aSAndroid Build Coastguard Worker} 290