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