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/fuzzer.gni") 16*6dbdd20aSAndroid Build Coastguard Workerimport("../../gn/perfetto.gni") 17*6dbdd20aSAndroid Build Coastguard Workerimport("../../gn/test.gni") 18*6dbdd20aSAndroid Build Coastguard Worker 19*6dbdd20aSAndroid Build Coastguard Worker# Full version of the client API. Supports both the in-process backend and the 20*6dbdd20aSAndroid Build Coastguard Worker# system backend (on posix systems and if enabled by the enable_perfetto_ipc). 21*6dbdd20aSAndroid Build Coastguard Worker# The backends are designed to be dead-code-eliminated via linker's gc-section 22*6dbdd20aSAndroid Build Coastguard Worker# when not use. See comments in Tracing::Initialize() in tracing.h. 23*6dbdd20aSAndroid Build Coastguard Workergroup("client_api") { 24*6dbdd20aSAndroid Build Coastguard Worker public_deps = [ 25*6dbdd20aSAndroid Build Coastguard Worker ":client_api_without_backends", 26*6dbdd20aSAndroid Build Coastguard Worker ":in_process_backend", 27*6dbdd20aSAndroid Build Coastguard Worker "../../gn:default_deps", 28*6dbdd20aSAndroid Build Coastguard Worker "../../include/perfetto/tracing", 29*6dbdd20aSAndroid Build Coastguard Worker "../../include/perfetto/tracing/core", 30*6dbdd20aSAndroid Build Coastguard Worker ] 31*6dbdd20aSAndroid Build Coastguard Worker if (enable_perfetto_ipc) { 32*6dbdd20aSAndroid Build Coastguard Worker public_deps += [ ":system_backend" ] 33*6dbdd20aSAndroid Build Coastguard Worker } else { 34*6dbdd20aSAndroid Build Coastguard Worker public_deps += [ ":system_backend_fake" ] 35*6dbdd20aSAndroid Build Coastguard Worker } 36*6dbdd20aSAndroid Build Coastguard Worker} 37*6dbdd20aSAndroid Build Coastguard Worker 38*6dbdd20aSAndroid Build Coastguard Worker# This target checks that the client API builds without backends. This is to 39*6dbdd20aSAndroid Build Coastguard Worker# check that no references to the backends are leaked from the implementation 40*6dbdd20aSAndroid Build Coastguard Worker# internals. In turn, this allows to dead-code-eliminate unused backends when 41*6dbdd20aSAndroid Build Coastguard Worker# using linker's gc-sections (or similar mechanism). 42*6dbdd20aSAndroid Build Coastguard Workerif (perfetto_build_standalone) { 43*6dbdd20aSAndroid Build Coastguard Worker shared_library("client_api_no_backends_compile_test") { 44*6dbdd20aSAndroid Build Coastguard Worker deps = [ 45*6dbdd20aSAndroid Build Coastguard Worker ":client_api_without_backends", 46*6dbdd20aSAndroid Build Coastguard Worker ":platform_fake", 47*6dbdd20aSAndroid Build Coastguard Worker "../../gn:default_deps", 48*6dbdd20aSAndroid Build Coastguard Worker ] 49*6dbdd20aSAndroid Build Coastguard Worker } 50*6dbdd20aSAndroid Build Coastguard Worker} 51*6dbdd20aSAndroid Build Coastguard Worker 52*6dbdd20aSAndroid Build Coastguard Worker# Separate target because the embedder might not want this. 53*6dbdd20aSAndroid Build Coastguard Workersource_set("platform_impl") { 54*6dbdd20aSAndroid Build Coastguard Worker deps = [ 55*6dbdd20aSAndroid Build Coastguard Worker "../../gn:default_deps", 56*6dbdd20aSAndroid Build Coastguard Worker "../../include/perfetto/tracing", 57*6dbdd20aSAndroid Build Coastguard Worker "../base", 58*6dbdd20aSAndroid Build Coastguard Worker ] 59*6dbdd20aSAndroid Build Coastguard Worker sources = [ 60*6dbdd20aSAndroid Build Coastguard Worker "platform_posix.cc", 61*6dbdd20aSAndroid Build Coastguard Worker "platform_windows.cc", 62*6dbdd20aSAndroid Build Coastguard Worker ] 63*6dbdd20aSAndroid Build Coastguard Worker} 64*6dbdd20aSAndroid Build Coastguard Worker 65*6dbdd20aSAndroid Build Coastguard Worker# Fake platform that allows buiding the client lib on all OSes. You can only use 66*6dbdd20aSAndroid Build Coastguard Worker# those parts of the client lib that do not use the platform. 67*6dbdd20aSAndroid Build Coastguard Workersource_set("platform_fake") { 68*6dbdd20aSAndroid Build Coastguard Worker deps = [ 69*6dbdd20aSAndroid Build Coastguard Worker "../../gn:default_deps", 70*6dbdd20aSAndroid Build Coastguard Worker "../../include/perfetto/tracing", 71*6dbdd20aSAndroid Build Coastguard Worker ] 72*6dbdd20aSAndroid Build Coastguard Worker sources = [ "platform_fake.cc" ] 73*6dbdd20aSAndroid Build Coastguard Worker} 74*6dbdd20aSAndroid Build Coastguard Worker 75*6dbdd20aSAndroid Build Coastguard Worker# Code that both public headers and other non-public sources (e.g. 76*6dbdd20aSAndroid Build Coastguard Worker# src/tracing/core) need to depend on. It cannot be in the root :tracing target 77*6dbdd20aSAndroid Build Coastguard Worker# otherwise there would be a cyclic dependency because public itself needs to 78*6dbdd20aSAndroid Build Coastguard Worker# depend on tracing. 79*6dbdd20aSAndroid Build Coastguard Workersource_set("common") { 80*6dbdd20aSAndroid Build Coastguard Worker deps = [ 81*6dbdd20aSAndroid Build Coastguard Worker "../../gn:default_deps", 82*6dbdd20aSAndroid Build Coastguard Worker "../../include/perfetto/tracing", 83*6dbdd20aSAndroid Build Coastguard Worker ] 84*6dbdd20aSAndroid Build Coastguard Worker sources = [ "trace_writer_base.cc" ] 85*6dbdd20aSAndroid Build Coastguard Worker} 86*6dbdd20aSAndroid Build Coastguard Worker 87*6dbdd20aSAndroid Build Coastguard Worker# Base target for the client API. On its own doesn't provide any backend other 88*6dbdd20aSAndroid Build Coastguard Worker# than the unsupported one. 89*6dbdd20aSAndroid Build Coastguard Workersource_set("client_api_without_backends") { 90*6dbdd20aSAndroid Build Coastguard Worker deps = [ 91*6dbdd20aSAndroid Build Coastguard Worker "../../include/perfetto/tracing/core", 92*6dbdd20aSAndroid Build Coastguard Worker "../../protos/perfetto/common:zero", 93*6dbdd20aSAndroid Build Coastguard Worker "../../protos/perfetto/config:cpp", 94*6dbdd20aSAndroid Build Coastguard Worker "../../protos/perfetto/config/interceptors:cpp", 95*6dbdd20aSAndroid Build Coastguard Worker "../../protos/perfetto/config/track_event:cpp", 96*6dbdd20aSAndroid Build Coastguard Worker "../base", 97*6dbdd20aSAndroid Build Coastguard Worker "core", 98*6dbdd20aSAndroid Build Coastguard Worker ] 99*6dbdd20aSAndroid Build Coastguard Worker public_deps = [ 100*6dbdd20aSAndroid Build Coastguard Worker "../../gn:default_deps", 101*6dbdd20aSAndroid Build Coastguard Worker "../../include/perfetto/tracing", 102*6dbdd20aSAndroid Build Coastguard Worker ] 103*6dbdd20aSAndroid Build Coastguard Worker sources = [ 104*6dbdd20aSAndroid Build Coastguard Worker "console_interceptor.cc", 105*6dbdd20aSAndroid Build Coastguard Worker "data_source.cc", 106*6dbdd20aSAndroid Build Coastguard Worker "debug_annotation.cc", 107*6dbdd20aSAndroid Build Coastguard Worker "event_context.cc", 108*6dbdd20aSAndroid Build Coastguard Worker "interceptor.cc", 109*6dbdd20aSAndroid Build Coastguard Worker "internal/checked_scope.cc", 110*6dbdd20aSAndroid Build Coastguard Worker "internal/interceptor_trace_writer.cc", 111*6dbdd20aSAndroid Build Coastguard Worker "internal/tracing_backend_fake.cc", 112*6dbdd20aSAndroid Build Coastguard Worker "internal/tracing_muxer_fake.cc", 113*6dbdd20aSAndroid Build Coastguard Worker "internal/tracing_muxer_fake.h", 114*6dbdd20aSAndroid Build Coastguard Worker "internal/tracing_muxer_impl.cc", 115*6dbdd20aSAndroid Build Coastguard Worker "internal/tracing_muxer_impl.h", 116*6dbdd20aSAndroid Build Coastguard Worker "internal/track_event_internal.cc", 117*6dbdd20aSAndroid Build Coastguard Worker "internal/track_event_interned_fields.cc", 118*6dbdd20aSAndroid Build Coastguard Worker "platform.cc", 119*6dbdd20aSAndroid Build Coastguard Worker "traced_value.cc", 120*6dbdd20aSAndroid Build Coastguard Worker "tracing.cc", 121*6dbdd20aSAndroid Build Coastguard Worker "tracing_policy.cc", 122*6dbdd20aSAndroid Build Coastguard Worker "track.cc", 123*6dbdd20aSAndroid Build Coastguard Worker "track_event_category_registry.cc", 124*6dbdd20aSAndroid Build Coastguard Worker "track_event_legacy.cc", 125*6dbdd20aSAndroid Build Coastguard Worker "track_event_state_tracker.cc", 126*6dbdd20aSAndroid Build Coastguard Worker "virtual_destructors.cc", 127*6dbdd20aSAndroid Build Coastguard Worker ] 128*6dbdd20aSAndroid Build Coastguard Worker assert_no_deps = [ "service" ] 129*6dbdd20aSAndroid Build Coastguard Worker if (enable_perfetto_ipc) { 130*6dbdd20aSAndroid Build Coastguard Worker assert_no_deps += [ 131*6dbdd20aSAndroid Build Coastguard Worker "../ipc:common", 132*6dbdd20aSAndroid Build Coastguard Worker "ipc/common", 133*6dbdd20aSAndroid Build Coastguard Worker ] 134*6dbdd20aSAndroid Build Coastguard Worker } 135*6dbdd20aSAndroid Build Coastguard Worker} 136*6dbdd20aSAndroid Build Coastguard Worker 137*6dbdd20aSAndroid Build Coastguard Worker# Separate target because the embedder might not want this. 138*6dbdd20aSAndroid Build Coastguard Workersource_set("integrationtests") { 139*6dbdd20aSAndroid Build Coastguard Worker testonly = true 140*6dbdd20aSAndroid Build Coastguard Worker deps = [ 141*6dbdd20aSAndroid Build Coastguard Worker "../../gn:default_deps", 142*6dbdd20aSAndroid Build Coastguard Worker "../../gn:gtest_and_gmock", 143*6dbdd20aSAndroid Build Coastguard Worker "../../include/perfetto/ext/tracing/ipc", 144*6dbdd20aSAndroid Build Coastguard Worker "../../include/perfetto/tracing", 145*6dbdd20aSAndroid Build Coastguard Worker "../../protos/perfetto/trace:cpp", 146*6dbdd20aSAndroid Build Coastguard Worker "../base", 147*6dbdd20aSAndroid Build Coastguard Worker "../base:test_support", 148*6dbdd20aSAndroid Build Coastguard Worker ] 149*6dbdd20aSAndroid Build Coastguard Worker sources = [ "internal/tracing_muxer_impl_integrationtest.cc" ] 150*6dbdd20aSAndroid Build Coastguard Worker} 151*6dbdd20aSAndroid Build Coastguard Worker 152*6dbdd20aSAndroid Build Coastguard Workerperfetto_unittest_source_set("unittests") { 153*6dbdd20aSAndroid Build Coastguard Worker testonly = true 154*6dbdd20aSAndroid Build Coastguard Worker deps = [ 155*6dbdd20aSAndroid Build Coastguard Worker "../../gn:default_deps", 156*6dbdd20aSAndroid Build Coastguard Worker "../../gn:gtest_and_gmock", 157*6dbdd20aSAndroid Build Coastguard Worker "../../protos/perfetto/trace:lite", 158*6dbdd20aSAndroid Build Coastguard Worker "../../protos/perfetto/trace/track_event:lite", 159*6dbdd20aSAndroid Build Coastguard Worker "../base", 160*6dbdd20aSAndroid Build Coastguard Worker "../base:test_support", 161*6dbdd20aSAndroid Build Coastguard Worker "test:test_support", 162*6dbdd20aSAndroid Build Coastguard Worker ] 163*6dbdd20aSAndroid Build Coastguard Worker 164*6dbdd20aSAndroid Build Coastguard Worker sources = [] 165*6dbdd20aSAndroid Build Coastguard Worker 166*6dbdd20aSAndroid Build Coastguard Worker # TODO(primiano): remove the build_with_chromium conditional once the root 167*6dbdd20aSAndroid Build Coastguard Worker # //BUILD.gn:libperfetto (in chromium) stops adding tracing:platform_fake. 168*6dbdd20aSAndroid Build Coastguard Worker # The problem is the following: in chrome builds we end up with duplicate 169*6dbdd20aSAndroid Build Coastguard Worker # symbol definitions in the test because both platforms (impl and fake) are 170*6dbdd20aSAndroid Build Coastguard Worker # present: impl added here and fake coming from chromium's base (full path: 171*6dbdd20aSAndroid Build Coastguard Worker # perfetto_unittests -> //(chromium)base:test_support -> //(chromium)base 172*6dbdd20aSAndroid Build Coastguard Worker # -> libperfetto -> platform_fake. 173*6dbdd20aSAndroid Build Coastguard Worker if (!build_with_chromium) { 174*6dbdd20aSAndroid Build Coastguard Worker deps += [ 175*6dbdd20aSAndroid Build Coastguard Worker ":client_api_without_backends", 176*6dbdd20aSAndroid Build Coastguard Worker ":platform_impl", 177*6dbdd20aSAndroid Build Coastguard Worker ] 178*6dbdd20aSAndroid Build Coastguard Worker 179*6dbdd20aSAndroid Build Coastguard Worker sources += [ 180*6dbdd20aSAndroid Build Coastguard Worker "internal/interceptor_trace_writer_unittest.cc", 181*6dbdd20aSAndroid Build Coastguard Worker "traced_proto_unittest.cc", 182*6dbdd20aSAndroid Build Coastguard Worker "traced_value_unittest.cc", 183*6dbdd20aSAndroid Build Coastguard Worker ] 184*6dbdd20aSAndroid Build Coastguard Worker } 185*6dbdd20aSAndroid Build Coastguard Worker} 186*6dbdd20aSAndroid Build Coastguard Worker 187*6dbdd20aSAndroid Build Coastguard Worker# System backend: connects to an external "traced" instance via a UNIX socket. 188*6dbdd20aSAndroid Build Coastguard Worker# Requires the IPC layer and is supported only on posix systems. 189*6dbdd20aSAndroid Build Coastguard Workerif (enable_perfetto_ipc) { 190*6dbdd20aSAndroid Build Coastguard Worker source_set("system_backend") { 191*6dbdd20aSAndroid Build Coastguard Worker public_deps = [ "../../include/perfetto/tracing" ] 192*6dbdd20aSAndroid Build Coastguard Worker deps = [ 193*6dbdd20aSAndroid Build Coastguard Worker ":client_api_without_backends", 194*6dbdd20aSAndroid Build Coastguard Worker "../../gn:default_deps", 195*6dbdd20aSAndroid Build Coastguard Worker "../../include/perfetto/tracing/core", 196*6dbdd20aSAndroid Build Coastguard Worker "../base", 197*6dbdd20aSAndroid Build Coastguard Worker "ipc:common", 198*6dbdd20aSAndroid Build Coastguard Worker "ipc/producer", 199*6dbdd20aSAndroid Build Coastguard Worker "ipc/service", 200*6dbdd20aSAndroid Build Coastguard Worker ] 201*6dbdd20aSAndroid Build Coastguard Worker if (enable_perfetto_system_consumer) { 202*6dbdd20aSAndroid Build Coastguard Worker deps += [ "ipc/consumer" ] 203*6dbdd20aSAndroid Build Coastguard Worker } 204*6dbdd20aSAndroid Build Coastguard Worker sources = [ "internal/system_tracing_backend.cc" ] 205*6dbdd20aSAndroid Build Coastguard Worker } 206*6dbdd20aSAndroid Build Coastguard Worker} else { 207*6dbdd20aSAndroid Build Coastguard Worker source_set("system_backend_fake") { 208*6dbdd20aSAndroid Build Coastguard Worker public_deps = [ "../../include/perfetto/tracing" ] 209*6dbdd20aSAndroid Build Coastguard Worker deps = [ 210*6dbdd20aSAndroid Build Coastguard Worker "../../gn:default_deps", 211*6dbdd20aSAndroid Build Coastguard Worker "../base", 212*6dbdd20aSAndroid Build Coastguard Worker ] 213*6dbdd20aSAndroid Build Coastguard Worker sources = [ "internal/system_tracing_backend_fake.cc" ] 214*6dbdd20aSAndroid Build Coastguard Worker } 215*6dbdd20aSAndroid Build Coastguard Worker} 216*6dbdd20aSAndroid Build Coastguard Worker 217*6dbdd20aSAndroid Build Coastguard Worker# In-process backend: starts the tracing service in-process on a dedicated 218*6dbdd20aSAndroid Build Coastguard Worker# thread. It depends only on having a valid "platform" target. It has a larger 219*6dbdd20aSAndroid Build Coastguard Worker# binary size cost because links in all the service code. 220*6dbdd20aSAndroid Build Coastguard Workersource_set("in_process_backend") { 221*6dbdd20aSAndroid Build Coastguard Worker public_deps = [ "../../include/perfetto/tracing" ] 222*6dbdd20aSAndroid Build Coastguard Worker deps = [ 223*6dbdd20aSAndroid Build Coastguard Worker ":client_api_without_backends", 224*6dbdd20aSAndroid Build Coastguard Worker "../../gn:default_deps", 225*6dbdd20aSAndroid Build Coastguard Worker "../../include/perfetto/tracing/core", 226*6dbdd20aSAndroid Build Coastguard Worker "../base", 227*6dbdd20aSAndroid Build Coastguard Worker "core", 228*6dbdd20aSAndroid Build Coastguard Worker "service", 229*6dbdd20aSAndroid Build Coastguard Worker ] 230*6dbdd20aSAndroid Build Coastguard Worker sources = [ "internal/in_process_tracing_backend.cc" ] 231*6dbdd20aSAndroid Build Coastguard Worker} 232*6dbdd20aSAndroid Build Coastguard Worker 233*6dbdd20aSAndroid Build Coastguard Workerif (enable_perfetto_benchmarks) { 234*6dbdd20aSAndroid Build Coastguard Worker source_set("benchmarks") { 235*6dbdd20aSAndroid Build Coastguard Worker testonly = true 236*6dbdd20aSAndroid Build Coastguard Worker deps = [ 237*6dbdd20aSAndroid Build Coastguard Worker ":platform_impl", 238*6dbdd20aSAndroid Build Coastguard Worker "../..:libperfetto_client_experimental", 239*6dbdd20aSAndroid Build Coastguard Worker "../../gn:benchmark", 240*6dbdd20aSAndroid Build Coastguard Worker "../../gn:default_deps", 241*6dbdd20aSAndroid Build Coastguard Worker ] 242*6dbdd20aSAndroid Build Coastguard Worker sources = [ "api_benchmark.cc" ] 243*6dbdd20aSAndroid Build Coastguard Worker } 244*6dbdd20aSAndroid Build Coastguard Worker} 245