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 data = invoker.data 15 defines = [ "ANGLE_REPLAY_IMPLEMENTATION" ] 16 suppressed_configs += [ "$angle_root:constructor_and_destructor_warnings" ] 17 18 _trace_data = read_file(invoker.json_file_name, "json") 19 parsed_json = _trace_data.TraceMetadata 20 21 if (defined(invoker.rebased_path)) { 22 sources = rebase_path(_trace_data.TraceFiles, ".", invoker.rebased_path) 23 } else { 24 sources = _trace_data.TraceFiles 25 } 26 27 # Dummy statement to enable the use of defined(parsed_json.IsOpenCL) 28 if (parsed_json.IsBinaryDataCompressed) { 29 } 30 31 if (defined(parsed_json.IsOpenCL) && parsed_json.IsOpenCL && 32 angle_enable_cl) { 33 deps = [ "$angle_root/util:angle_trace_fixture_cl" ] 34 } else { 35 deps = [ "$angle_root/util:angle_trace_fixture" ] 36 } 37 38 deps += [ "$angle_root/util:angle_trace_loader" ] 39 40 if (defined(invoker.deps)) { 41 deps += invoker.deps 42 } 43 44 if (is_android) { 45 libs = [ "log" ] 46 } 47 48 # Disable optimization in the trace perf tests to avoid optimizing huge files. 49 if (!is_debug && !is_ubsan) { 50 suppressed_configs += [ 51 "//build/config/compiler:afdo", 52 "//build/config/compiler:afdo_optimize_size", 53 "//build/config/compiler:optimize_max", 54 "//build/config/compiler/pgo:default_pgo_flags", 55 ] 56 configs += [ "//build/config/compiler:no_optimize" ] 57 } 58 59 include_dirs = [ "." ] 60 61 if (defined(invoker.output_name)) { 62 output_name = invoker.output_name 63 } 64 } 65} 66 67set_defaults("angle_trace_libs") { 68 # Uses a short name to work around file path limits on Windows. 69 short_names = false 70} 71 72template("angle_trace_libs") { 73 _trace_list = [] 74 _trace_targets = [] 75 _trace_lib_files = [] 76 77 if (invoker.short_names) { 78 _trace_counter = 1 79 } 80 81 foreach(_trace_and_version, invoker.trace_list) { 82 _trace_and_version_arr = [] 83 _trace_and_version_arr = string_split(_trace_and_version) 84 _trace = _trace_and_version_arr[0] 85 _trace_list += [ _trace ] 86 if (defined(invoker.trace_dir)) { 87 _trace_dir = invoker.trace_dir 88 } else { 89 _trace_dir = _trace 90 } 91 _trace_json_path = "$_trace_dir/$_trace.json" 92 json_file_name = _trace_json_path 93 rebased_path = _trace_dir 94 95 if (invoker.short_names) { 96 _target = "cr_trace_${_trace_counter}" 97 _trace_counter += 1 98 } else { 99 _target = "${target_name}_$_trace" 100 } 101 102 if (angle_enable_tracegz) { 103 _gen_tracegz_target = "gen${target_name}_$_trace" 104 action(_gen_tracegz_target) { 105 script = "//scripts/tracegz.py" 106 args = [ 107 _trace, 108 rebase_path(_trace_dir, root_build_dir), 109 ] 110 outputs = [ "$root_gen_dir/tracegz_$_trace.gz" ] 111 } 112 } 113 114 angle_trace(_target) { 115 data = [ 116 "$_trace_dir/$_trace.json", 117 "$_trace_dir/$_trace.angledata.gz", 118 ] 119 120 deps = [] 121 122 if (angle_enable_cl) { 123 deps += [ "$angle_root/src/libOpenCL:OpenCL_ANGLE" ] 124 } 125 126 if (angle_enable_tracegz) { 127 deps += [ ":$_gen_tracegz_target" ] 128 data += [ "$root_gen_dir/tracegz_$_trace.gz" ] 129 } 130 131 if (invoker.short_names) { 132 output_name = _trace 133 } 134 } 135 136 _trace_targets += [ ":$_target" ] 137 _trace_lib_files += [ "${root_out_dir}/lib${_target}.so" ] 138 } 139 140 angle_shared_library(target_name) { 141 testonly = true 142 data = [ invoker.json_path ] 143 data_deps = _trace_targets 144 deps = [ "$angle_root:angle_common" ] 145 public_deps = [ "$angle_root/util:angle_trace_loader" ] 146 } 147 148 if (restricted_traces_outside_of_apk) { 149 group("${target_name}__unpacked_libs") { 150 testonly = true 151 deps = [ 152 ":angle_restricted_traces", 153 "$angle_root/util:angle_trace_interpreter", 154 ] 155 156 # Also need files listed as data to be picked up by isolate 157 data = 158 _trace_lib_files + [ "${root_out_dir}/libangle_trace_interpreter.so" ] 159 } 160 } 161 162 group("gen_trace_list_json") { 163 _output_json_path = "$root_gen_dir/trace_list.json" 164 write_file(_output_json_path, _trace_list, "json") 165 166 data = [ _output_json_path ] 167 } 168} 169