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:default_optimization", 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 if (is_android && is_component_build) { 63 _cr_suffix = ".cr" 64 } else { 65 _cr_suffix = "" 66 } 67 68 foreach(_trace_and_version, invoker.trace_list) { 69 _trace_and_version_arr = [] 70 _trace_and_version_arr = string_split(_trace_and_version) 71 _trace = _trace_and_version_arr[0] 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 _gen_target = "gen${target_name}_$_trace" 89 action(_gen_target) { 90 script = "//scripts/tracegz.py" 91 args = [ 92 _trace, 93 rebase_path(_trace_dir, root_build_dir), 94 ] 95 outputs = [ "$root_gen_dir/tracegz_$_trace.gz" ] 96 } 97 98 angle_trace(_target) { 99 sources = rebase_path(_trace_data.TraceFiles, ".", _trace_dir) 100 101 data = [ 102 "$_trace_dir/$_trace.json", 103 "$_trace_dir/$_trace.angledata.gz", 104 "$root_gen_dir/tracegz_$_trace.gz", 105 ] 106 107 deps = [ ":$_gen_target" ] 108 109 if (invoker.short_names) { 110 output_name = _trace 111 } 112 } 113 114 _trace_targets += [ ":$_target" ] 115 _trace_lib_files += [ "${root_out_dir}/lib${_target}${_cr_suffix}.so" ] 116 } 117 118 angle_shared_library(target_name) { 119 testonly = true 120 data = [ invoker.json_path ] 121 data_deps = _trace_targets 122 deps = [ "$angle_root:angle_common" ] 123 public_deps = [ "$angle_root/util:angle_trace_loader" ] 124 } 125 126 if (restricted_traces_outside_of_apk) { 127 group("${target_name}__unpacked_libs") { 128 testonly = true 129 deps = [ 130 ":angle_restricted_traces", 131 "$angle_root/util:angle_trace_interpreter", 132 ] 133 134 # Also need files listed as data to be picked up by isolate 135 data = _trace_lib_files + 136 [ "${root_out_dir}/libangle_trace_interpreter${_cr_suffix}.so" ] 137 } 138 } 139} 140