blob: dc452ec151b34a032db6494bdda7bc4dcf026be4 [file] [log] [blame]
# 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 ]
}
}