1# Copyright (C) 2018 The Android Open Source Project 2# 3# Licensed under the Apache License, Version 2.0 (the "License"); 4# you may not use this file except in compliance with the License. 5# You may obtain a copy of the License at 6# 7# http://www.apache.org/licenses/LICENSE-2.0 8# 9# Unless required by applicable law or agreed to in writing, software 10# distributed under the License is distributed on an "AS IS" BASIS, 11# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12# See the License for the specific language governing permissions and 13# limitations under the License. 14 15import("../../gn/perfetto.gni") 16import("../../gn/perfetto_cc_proto_descriptor.gni") 17import("../../gn/proto_library.gni") 18import("../../gn/test.gni") 19 20# The command line client for Perfetto. Allows to configure / start / stop 21# tracing, acting as a Consumer. 22executable("perfetto") { 23 deps = [ 24 ":perfetto_cmd", 25 "../../gn:default_deps", 26 ] 27 sources = [ "main.cc" ] 28} 29 30# Tool to finalize long running traces. 31# This connects to traced as a producer and sends the triggers passed on the 32# commandline. This is a subset of what the perfetto binary can do but we 33# need a separate binary for programs that cannot (for good reason) use the 34# additional functionality (for example starting traces via consumer socket) 35# due to selinux rules. 36executable("trigger_perfetto") { 37 deps = [ 38 ":trigger_perfetto_cmd", 39 "../../gn:default_deps", 40 ] 41 sources = [ "trigger_perfetto_main.cc" ] 42} 43 44# Contains all the implementation but not the main() entry point. This target 45# is shared both by the executable and tests. 46source_set("perfetto_cmd") { 47 public_deps = [ 48 ":protos", 49 "../../include/perfetto/ext/traced", 50 ] 51 deps = [ 52 ":gen_cc_config_descriptor", 53 ":trigger_producer", 54 "../../gn:default_deps", 55 "../../protos/perfetto/common:cpp", 56 "../../protos/perfetto/config:cpp", 57 "../../protos/perfetto/config/ftrace:cpp", 58 "../android_stats", 59 "../base", 60 "../protozero", 61 "../tracing/ipc/consumer", 62 ] 63 if (enable_perfetto_zlib) { 64 deps += [ "../../gn:zlib" ] 65 } 66 sources = [ 67 "config.cc", 68 "config.h", 69 "packet_writer.cc", 70 "packet_writer.h", 71 "pbtxt_to_pb.cc", 72 "pbtxt_to_pb.h", 73 "perfetto_cmd.cc", 74 "perfetto_cmd.h", 75 "rate_limiter.cc", 76 "rate_limiter.h", 77 ] 78 if (is_android) { 79 deps += [ "../android_internal:lazy_library_loader" ] 80 sources += [ "perfetto_cmd_android.cc" ] 81 } 82} 83 84perfetto_cc_proto_descriptor("gen_cc_config_descriptor") { 85 descriptor_name = "perfetto_config.descriptor" 86 descriptor_target = "../../protos/perfetto/config:perfetto_config_descriptor" 87} 88 89source_set("trigger_perfetto_cmd") { 90 public_deps = [ 91 ":protos", 92 "../../include/perfetto/ext/traced", 93 ] 94 deps = [ 95 ":trigger_producer", 96 "../../gn:default_deps", 97 "../android_stats", 98 "../base", 99 "../tracing/ipc/producer", 100 ] 101 sources = [ "trigger_perfetto.cc" ] 102} 103 104source_set("trigger_producer") { 105 sources = [ 106 "trigger_producer.cc", 107 "trigger_producer.h", 108 ] 109 deps = [ 110 "../../gn:default_deps", 111 "../base", 112 "../tracing/ipc/producer", 113 ] 114} 115 116perfetto_proto_library("protos") { 117 proto_generators = [ "cpp" ] 118 sources = [ "perfetto_cmd_state.proto" ] 119 proto_path = perfetto_root_path 120} 121 122perfetto_unittest_source_set("unittests") { 123 testonly = true 124 public_deps = [] 125 deps = [ 126 ":perfetto_cmd", 127 "../../gn:default_deps", 128 "../../gn:gtest_and_gmock", 129 "../../include/perfetto/base", 130 "../../include/perfetto/ext/base", 131 "../../protos/perfetto/config:cpp", 132 "../../protos/perfetto/config/ftrace:cpp", 133 "../../protos/perfetto/trace:cpp", 134 "../tracing/core", 135 ] 136 if (enable_perfetto_zlib) { 137 deps += [ "../../gn:zlib" ] 138 } 139 sources = [ 140 "config_unittest.cc", 141 "packet_writer_unittest.cc", 142 "pbtxt_to_pb_unittest.cc", 143 "rate_limiter_unittest.cc", 144 ] 145} 146