| # Copyright 2023 The ANGLE Project Authors. All rights reserved. |
| # Use of this source code is governed by a BSD-style license that can be |
| # found in the LICENSE file. |
| import("../../gni/angle.gni") |
| |
| declare_args() { |
| angle_enable_tracegz = false |
| } |
| |
| template("angle_trace") { |
| angle_shared_library(target_name) { |
| testonly = true |
| |
| data = invoker.data |
| defines = [ "ANGLE_REPLAY_IMPLEMENTATION" ] |
| suppressed_configs += [ "$angle_root:constructor_and_destructor_warnings" ] |
| |
| _trace_data = read_file(invoker.json_file_name, "json") |
| parsed_json = _trace_data.TraceMetadata |
| |
| if (defined(invoker.rebased_path)) { |
| sources = rebase_path(_trace_data.TraceFiles, ".", invoker.rebased_path) |
| } else { |
| sources = _trace_data.TraceFiles |
| } |
| |
| # Dummy statement to enable the use of defined(parsed_json.IsOpenCL) |
| if (parsed_json.IsBinaryDataCompressed) { |
| } |
| |
| if (defined(parsed_json.IsOpenCL) && parsed_json.IsOpenCL && |
| angle_enable_cl) { |
| deps = [ "$angle_root/util:angle_trace_fixture_cl" ] |
| } else { |
| deps = [ "$angle_root/util:angle_trace_fixture" ] |
| } |
| |
| deps += [ "$angle_root/util:angle_trace_loader" ] |
| |
| if (defined(invoker.deps)) { |
| deps += invoker.deps |
| } |
| |
| if (is_android) { |
| libs = [ "log" ] |
| } |
| |
| # Disable optimization in the trace perf tests to avoid optimizing huge files. |
| if (!is_debug && !is_ubsan) { |
| suppressed_configs += [ |
| "//build/config/compiler:afdo", |
| "//build/config/compiler:afdo_optimize_size", |
| "//build/config/compiler:optimize_max", |
| "//build/config/compiler/pgo:default_pgo_flags", |
| ] |
| configs += [ "//build/config/compiler:no_optimize" ] |
| } |
| |
| include_dirs = [ "." ] |
| |
| if (defined(invoker.output_name)) { |
| output_name = invoker.output_name |
| } |
| } |
| } |
| |
| set_defaults("angle_trace_libs") { |
| # Uses a short name to work around file path limits on Windows. |
| short_names = false |
| } |
| |
| template("angle_trace_libs") { |
| _trace_list = [] |
| _trace_targets = [] |
| _trace_lib_files = [] |
| |
| if (invoker.short_names) { |
| _trace_counter = 1 |
| } |
| |
| foreach(_trace_and_version, invoker.trace_list) { |
| _trace_and_version_arr = [] |
| _trace_and_version_arr = string_split(_trace_and_version) |
| _trace = _trace_and_version_arr[0] |
| _trace_list += [ _trace ] |
| if (defined(invoker.trace_dir)) { |
| _trace_dir = invoker.trace_dir |
| } else { |
| _trace_dir = _trace |
| } |
| _trace_json_path = "$_trace_dir/$_trace.json" |
| json_file_name = _trace_json_path |
| rebased_path = _trace_dir |
| |
| if (invoker.short_names) { |
| _target = "cr_trace_${_trace_counter}" |
| _trace_counter += 1 |
| } else { |
| _target = "${target_name}_$_trace" |
| } |
| |
| if (angle_enable_tracegz) { |
| _gen_tracegz_target = "gen${target_name}_$_trace" |
| action(_gen_tracegz_target) { |
| script = "//scripts/tracegz.py" |
| args = [ |
| _trace, |
| rebase_path(_trace_dir, root_build_dir), |
| ] |
| outputs = [ "$root_gen_dir/tracegz_$_trace.gz" ] |
| } |
| } |
| |
| angle_trace(_target) { |
| data = [ |
| "$_trace_dir/$_trace.json", |
| "$_trace_dir/$_trace.angledata.gz", |
| ] |
| |
| deps = [] |
| |
| if (angle_enable_cl) { |
| deps += [ "$angle_root/src/libOpenCL:OpenCL_ANGLE" ] |
| } |
| |
| if (angle_enable_tracegz) { |
| deps += [ ":$_gen_tracegz_target" ] |
| data += [ "$root_gen_dir/tracegz_$_trace.gz" ] |
| } |
| |
| if (invoker.short_names) { |
| output_name = _trace |
| } |
| } |
| |
| _trace_targets += [ ":$_target" ] |
| _trace_lib_files += [ "${root_out_dir}/lib${_target}.so" ] |
| } |
| |
| angle_shared_library(target_name) { |
| testonly = true |
| data = [ invoker.json_path ] |
| data_deps = _trace_targets |
| deps = [ "$angle_root:angle_common" ] |
| public_deps = [ "$angle_root/util:angle_trace_loader" ] |
| } |
| |
| if (restricted_traces_outside_of_apk) { |
| group("${target_name}__unpacked_libs") { |
| testonly = true |
| deps = [ |
| ":angle_restricted_traces", |
| "$angle_root/util:angle_trace_interpreter", |
| ] |
| |
| # Also need files listed as data to be picked up by isolate |
| data = |
| _trace_lib_files + [ "${root_out_dir}/libangle_trace_interpreter.so" ] |
| } |
| } |
| |
| group("gen_trace_list_json") { |
| _output_json_path = "$root_gen_dir/trace_list.json" |
| write_file(_output_json_path, _trace_list, "json") |
| |
| data = [ _output_json_path ] |
| } |
| } |