xref: /aosp_15_r20/external/angle/src/tests/angle_traces.gni (revision 8975f5c5ed3d1c378011245431ada316dfb6f244)
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    # Similar to capture replay sample, use the file index for sources
15    sources = invoker.sources
16
17    data = invoker.data
18    defines = [ "ANGLE_REPLAY_IMPLEMENTATION" ]
19    suppressed_configs += [ "$angle_root:constructor_and_destructor_warnings" ]
20
21    deps = [
22      "$angle_root/util:angle_trace_fixture",
23      "$angle_root/util:angle_trace_loader",
24    ]
25
26    if (defined(invoker.deps)) {
27      deps += invoker.deps
28    }
29
30    if (is_android) {
31      libs = [ "log" ]
32    }
33
34    # Disable optimization in the trace perf tests to avoid optimizing huge files.
35    if (!is_debug && !is_ubsan) {
36      suppressed_configs += [
37        "//build/config/compiler:afdo",
38        "//build/config/compiler:afdo_optimize_size",
39        "//build/config/compiler:optimize_max",
40        "//build/config/compiler/pgo:default_pgo_flags",
41      ]
42      configs += [ "//build/config/compiler:no_optimize" ]
43    }
44
45    include_dirs = [ "." ]
46
47    if (defined(invoker.output_name)) {
48      output_name = invoker.output_name
49    }
50  }
51}
52
53set_defaults("angle_trace_libs") {
54  # Uses a short name to work around file path limits on Windows.
55  short_names = false
56}
57
58template("angle_trace_libs") {
59  _trace_list = []
60  _trace_targets = []
61  _trace_lib_files = []
62
63  if (invoker.short_names) {
64    _trace_counter = 1
65  }
66
67  foreach(_trace_and_version, invoker.trace_list) {
68    _trace_and_version_arr = []
69    _trace_and_version_arr = string_split(_trace_and_version)
70    _trace = _trace_and_version_arr[0]
71    _trace_list += [ _trace ]
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    if (angle_enable_tracegz) {
89      _gen_tracegz_target = "gen${target_name}_$_trace"
90      action(_gen_tracegz_target) {
91        script = "//scripts/tracegz.py"
92        args = [
93          _trace,
94          rebase_path(_trace_dir, root_build_dir),
95        ]
96        outputs = [ "$root_gen_dir/tracegz_$_trace.gz" ]
97      }
98    }
99
100    angle_trace(_target) {
101      sources = rebase_path(_trace_data.TraceFiles, ".", _trace_dir)
102
103      data = [
104        "$_trace_dir/$_trace.json",
105        "$_trace_dir/$_trace.angledata.gz",
106      ]
107
108      if (angle_enable_tracegz) {
109        deps = [ ":$_gen_tracegz_target" ]
110        data += [ "$root_gen_dir/tracegz_$_trace.gz" ]
111      }
112
113      if (invoker.short_names) {
114        output_name = _trace
115      }
116    }
117
118    _trace_targets += [ ":$_target" ]
119    _trace_lib_files += [ "${root_out_dir}/lib${_target}.so" ]
120  }
121
122  angle_shared_library(target_name) {
123    testonly = true
124    data = [ invoker.json_path ]
125    data_deps = _trace_targets
126    deps = [ "$angle_root:angle_common" ]
127    public_deps = [ "$angle_root/util:angle_trace_loader" ]
128  }
129
130  if (restricted_traces_outside_of_apk) {
131    group("${target_name}__unpacked_libs") {
132      testonly = true
133      deps = [
134        ":angle_restricted_traces",
135        "$angle_root/util:angle_trace_interpreter",
136      ]
137
138      # Also need files listed as data to be picked up by isolate
139      data =
140          _trace_lib_files + [ "${root_out_dir}/libangle_trace_interpreter.so" ]
141    }
142  }
143
144  group("gen_trace_list_json") {
145    _output_json_path = "$root_gen_dir/trace_list.json"
146    write_file(_output_json_path, _trace_list, "json")
147
148    data = [ _output_json_path ]
149  }
150}
151