1# Copyright 2023 The ANGLE Project Authors. All rights reserved. 2# Use of this source code is governed by a BSD-style license that can be 3# found in the LICENSE file. 4import("../../gni/angle.gni") 5 6declare_args() { 7 angle_enable_tracegz = false 8} 9 10template("angle_trace") { 11 angle_shared_library(target_name) { 12 testonly = true 13 14 # Similar to capture replay sample, use the file index for sources 15 sources = invoker.sources 16 17 data = invoker.data 18 defines = [ "ANGLE_REPLAY_IMPLEMENTATION" ] 19 suppressed_configs += [ "$angle_root:constructor_and_destructor_warnings" ] 20 21 deps = [ 22 "$angle_root/util:angle_trace_fixture", 23 "$angle_root/util:angle_trace_loader", 24 ] 25 26 if (defined(invoker.deps)) { 27 deps += invoker.deps 28 } 29 30 if (is_android) { 31 libs = [ "log" ] 32 } 33 34 # Disable optimization in the trace perf tests to avoid optimizing huge files. 35 if (!is_debug && !is_ubsan) { 36 suppressed_configs += [ 37 "//build/config/compiler:afdo", 38 "//build/config/compiler:afdo_optimize_size", 39 "//build/config/compiler:optimize_max", 40 "//build/config/compiler/pgo:default_pgo_flags", 41 ] 42 configs += [ "//build/config/compiler:no_optimize" ] 43 } 44 45 include_dirs = [ "." ] 46 47 if (defined(invoker.output_name)) { 48 output_name = invoker.output_name 49 } 50 } 51} 52 53set_defaults("angle_trace_libs") { 54 # Uses a short name to work around file path limits on Windows. 55 short_names = false 56} 57 58template("angle_trace_libs") { 59 _trace_list = [] 60 _trace_targets = [] 61 _trace_lib_files = [] 62 63 if (invoker.short_names) { 64 _trace_counter = 1 65 } 66 67 foreach(_trace_and_version, invoker.trace_list) { 68 _trace_and_version_arr = [] 69 _trace_and_version_arr = string_split(_trace_and_version) 70 _trace = _trace_and_version_arr[0] 71 _trace_list += [ _trace ] 72 if (defined(invoker.trace_dir)) { 73 _trace_dir = invoker.trace_dir 74 } else { 75 _trace_dir = _trace 76 } 77 _trace_json_path = "$_trace_dir/$_trace.json" 78 _trace_data = [] 79 _trace_data = read_file(_trace_json_path, "json") 80 81 if (invoker.short_names) { 82 _target = "cr_trace_${_trace_counter}" 83 _trace_counter += 1 84 } else { 85 _target = "${target_name}_$_trace" 86 } 87 88 if (angle_enable_tracegz) { 89 _gen_tracegz_target = "gen${target_name}_$_trace" 90 action(_gen_tracegz_target) { 91 script = "//scripts/tracegz.py" 92 args = [ 93 _trace, 94 rebase_path(_trace_dir, root_build_dir), 95 ] 96 outputs = [ "$root_gen_dir/tracegz_$_trace.gz" ] 97 } 98 } 99 100 angle_trace(_target) { 101 sources = rebase_path(_trace_data.TraceFiles, ".", _trace_dir) 102 103 data = [ 104 "$_trace_dir/$_trace.json", 105 "$_trace_dir/$_trace.angledata.gz", 106 ] 107 108 if (angle_enable_tracegz) { 109 deps = [ ":$_gen_tracegz_target" ] 110 data += [ "$root_gen_dir/tracegz_$_trace.gz" ] 111 } 112 113 if (invoker.short_names) { 114 output_name = _trace 115 } 116 } 117 118 _trace_targets += [ ":$_target" ] 119 _trace_lib_files += [ "${root_out_dir}/lib${_target}.so" ] 120 } 121 122 angle_shared_library(target_name) { 123 testonly = true 124 data = [ invoker.json_path ] 125 data_deps = _trace_targets 126 deps = [ "$angle_root:angle_common" ] 127 public_deps = [ "$angle_root/util:angle_trace_loader" ] 128 } 129 130 if (restricted_traces_outside_of_apk) { 131 group("${target_name}__unpacked_libs") { 132 testonly = true 133 deps = [ 134 ":angle_restricted_traces", 135 "$angle_root/util:angle_trace_interpreter", 136 ] 137 138 # Also need files listed as data to be picked up by isolate 139 data = 140 _trace_lib_files + [ "${root_out_dir}/libangle_trace_interpreter.so" ] 141 } 142 } 143 144 group("gen_trace_list_json") { 145 _output_json_path = "$root_gen_dir/trace_list.json" 146 write_file(_output_json_path, _trace_list, "json") 147 148 data = [ _output_json_path ] 149 } 150} 151