xref: /aosp_15_r20/external/angle/src/tests/angle_traces.gni (revision 8975f5c5ed3d1c378011245431ada316dfb6f244)
1*8975f5c5SAndroid Build Coastguard Worker# Copyright 2023 The ANGLE Project Authors. All rights reserved.
2*8975f5c5SAndroid Build Coastguard Worker# Use of this source code is governed by a BSD-style license that can be
3*8975f5c5SAndroid Build Coastguard Worker# found in the LICENSE file.
4*8975f5c5SAndroid Build Coastguard Workerimport("../../gni/angle.gni")
5*8975f5c5SAndroid Build Coastguard Worker
6*8975f5c5SAndroid Build Coastguard Workerdeclare_args() {
7*8975f5c5SAndroid Build Coastguard Worker  angle_enable_tracegz = false
8*8975f5c5SAndroid Build Coastguard Worker}
9*8975f5c5SAndroid Build Coastguard Worker
10*8975f5c5SAndroid Build Coastguard Workertemplate("angle_trace") {
11*8975f5c5SAndroid Build Coastguard Worker  angle_shared_library(target_name) {
12*8975f5c5SAndroid Build Coastguard Worker    testonly = true
13*8975f5c5SAndroid Build Coastguard Worker
14*8975f5c5SAndroid Build Coastguard Worker    # Similar to capture replay sample, use the file index for sources
15*8975f5c5SAndroid Build Coastguard Worker    sources = invoker.sources
16*8975f5c5SAndroid Build Coastguard Worker
17*8975f5c5SAndroid Build Coastguard Worker    data = invoker.data
18*8975f5c5SAndroid Build Coastguard Worker    defines = [ "ANGLE_REPLAY_IMPLEMENTATION" ]
19*8975f5c5SAndroid Build Coastguard Worker    suppressed_configs += [ "$angle_root:constructor_and_destructor_warnings" ]
20*8975f5c5SAndroid Build Coastguard Worker
21*8975f5c5SAndroid Build Coastguard Worker    deps = [
22*8975f5c5SAndroid Build Coastguard Worker      "$angle_root/util:angle_trace_fixture",
23*8975f5c5SAndroid Build Coastguard Worker      "$angle_root/util:angle_trace_loader",
24*8975f5c5SAndroid Build Coastguard Worker    ]
25*8975f5c5SAndroid Build Coastguard Worker
26*8975f5c5SAndroid Build Coastguard Worker    if (defined(invoker.deps)) {
27*8975f5c5SAndroid Build Coastguard Worker      deps += invoker.deps
28*8975f5c5SAndroid Build Coastguard Worker    }
29*8975f5c5SAndroid Build Coastguard Worker
30*8975f5c5SAndroid Build Coastguard Worker    if (is_android) {
31*8975f5c5SAndroid Build Coastguard Worker      libs = [ "log" ]
32*8975f5c5SAndroid Build Coastguard Worker    }
33*8975f5c5SAndroid Build Coastguard Worker
34*8975f5c5SAndroid Build Coastguard Worker    # Disable optimization in the trace perf tests to avoid optimizing huge files.
35*8975f5c5SAndroid Build Coastguard Worker    if (!is_debug && !is_ubsan) {
36*8975f5c5SAndroid Build Coastguard Worker      suppressed_configs += [
37*8975f5c5SAndroid Build Coastguard Worker        "//build/config/compiler:afdo",
38*8975f5c5SAndroid Build Coastguard Worker        "//build/config/compiler:afdo_optimize_size",
39*8975f5c5SAndroid Build Coastguard Worker        "//build/config/compiler:optimize_max",
40*8975f5c5SAndroid Build Coastguard Worker        "//build/config/compiler/pgo:default_pgo_flags",
41*8975f5c5SAndroid Build Coastguard Worker      ]
42*8975f5c5SAndroid Build Coastguard Worker      configs += [ "//build/config/compiler:no_optimize" ]
43*8975f5c5SAndroid Build Coastguard Worker    }
44*8975f5c5SAndroid Build Coastguard Worker
45*8975f5c5SAndroid Build Coastguard Worker    include_dirs = [ "." ]
46*8975f5c5SAndroid Build Coastguard Worker
47*8975f5c5SAndroid Build Coastguard Worker    if (defined(invoker.output_name)) {
48*8975f5c5SAndroid Build Coastguard Worker      output_name = invoker.output_name
49*8975f5c5SAndroid Build Coastguard Worker    }
50*8975f5c5SAndroid Build Coastguard Worker  }
51*8975f5c5SAndroid Build Coastguard Worker}
52*8975f5c5SAndroid Build Coastguard Worker
53*8975f5c5SAndroid Build Coastguard Workerset_defaults("angle_trace_libs") {
54*8975f5c5SAndroid Build Coastguard Worker  # Uses a short name to work around file path limits on Windows.
55*8975f5c5SAndroid Build Coastguard Worker  short_names = false
56*8975f5c5SAndroid Build Coastguard Worker}
57*8975f5c5SAndroid Build Coastguard Worker
58*8975f5c5SAndroid Build Coastguard Workertemplate("angle_trace_libs") {
59*8975f5c5SAndroid Build Coastguard Worker  _trace_list = []
60*8975f5c5SAndroid Build Coastguard Worker  _trace_targets = []
61*8975f5c5SAndroid Build Coastguard Worker  _trace_lib_files = []
62*8975f5c5SAndroid Build Coastguard Worker
63*8975f5c5SAndroid Build Coastguard Worker  if (invoker.short_names) {
64*8975f5c5SAndroid Build Coastguard Worker    _trace_counter = 1
65*8975f5c5SAndroid Build Coastguard Worker  }
66*8975f5c5SAndroid Build Coastguard Worker
67*8975f5c5SAndroid Build Coastguard Worker  foreach(_trace_and_version, invoker.trace_list) {
68*8975f5c5SAndroid Build Coastguard Worker    _trace_and_version_arr = []
69*8975f5c5SAndroid Build Coastguard Worker    _trace_and_version_arr = string_split(_trace_and_version)
70*8975f5c5SAndroid Build Coastguard Worker    _trace = _trace_and_version_arr[0]
71*8975f5c5SAndroid Build Coastguard Worker    _trace_list += [ _trace ]
72*8975f5c5SAndroid Build Coastguard Worker    if (defined(invoker.trace_dir)) {
73*8975f5c5SAndroid Build Coastguard Worker      _trace_dir = invoker.trace_dir
74*8975f5c5SAndroid Build Coastguard Worker    } else {
75*8975f5c5SAndroid Build Coastguard Worker      _trace_dir = _trace
76*8975f5c5SAndroid Build Coastguard Worker    }
77*8975f5c5SAndroid Build Coastguard Worker    _trace_json_path = "$_trace_dir/$_trace.json"
78*8975f5c5SAndroid Build Coastguard Worker    _trace_data = []
79*8975f5c5SAndroid Build Coastguard Worker    _trace_data = read_file(_trace_json_path, "json")
80*8975f5c5SAndroid Build Coastguard Worker
81*8975f5c5SAndroid Build Coastguard Worker    if (invoker.short_names) {
82*8975f5c5SAndroid Build Coastguard Worker      _target = "cr_trace_${_trace_counter}"
83*8975f5c5SAndroid Build Coastguard Worker      _trace_counter += 1
84*8975f5c5SAndroid Build Coastguard Worker    } else {
85*8975f5c5SAndroid Build Coastguard Worker      _target = "${target_name}_$_trace"
86*8975f5c5SAndroid Build Coastguard Worker    }
87*8975f5c5SAndroid Build Coastguard Worker
88*8975f5c5SAndroid Build Coastguard Worker    if (angle_enable_tracegz) {
89*8975f5c5SAndroid Build Coastguard Worker      _gen_tracegz_target = "gen${target_name}_$_trace"
90*8975f5c5SAndroid Build Coastguard Worker      action(_gen_tracegz_target) {
91*8975f5c5SAndroid Build Coastguard Worker        script = "//scripts/tracegz.py"
92*8975f5c5SAndroid Build Coastguard Worker        args = [
93*8975f5c5SAndroid Build Coastguard Worker          _trace,
94*8975f5c5SAndroid Build Coastguard Worker          rebase_path(_trace_dir, root_build_dir),
95*8975f5c5SAndroid Build Coastguard Worker        ]
96*8975f5c5SAndroid Build Coastguard Worker        outputs = [ "$root_gen_dir/tracegz_$_trace.gz" ]
97*8975f5c5SAndroid Build Coastguard Worker      }
98*8975f5c5SAndroid Build Coastguard Worker    }
99*8975f5c5SAndroid Build Coastguard Worker
100*8975f5c5SAndroid Build Coastguard Worker    angle_trace(_target) {
101*8975f5c5SAndroid Build Coastguard Worker      sources = rebase_path(_trace_data.TraceFiles, ".", _trace_dir)
102*8975f5c5SAndroid Build Coastguard Worker
103*8975f5c5SAndroid Build Coastguard Worker      data = [
104*8975f5c5SAndroid Build Coastguard Worker        "$_trace_dir/$_trace.json",
105*8975f5c5SAndroid Build Coastguard Worker        "$_trace_dir/$_trace.angledata.gz",
106*8975f5c5SAndroid Build Coastguard Worker      ]
107*8975f5c5SAndroid Build Coastguard Worker
108*8975f5c5SAndroid Build Coastguard Worker      if (angle_enable_tracegz) {
109*8975f5c5SAndroid Build Coastguard Worker        deps = [ ":$_gen_tracegz_target" ]
110*8975f5c5SAndroid Build Coastguard Worker        data += [ "$root_gen_dir/tracegz_$_trace.gz" ]
111*8975f5c5SAndroid Build Coastguard Worker      }
112*8975f5c5SAndroid Build Coastguard Worker
113*8975f5c5SAndroid Build Coastguard Worker      if (invoker.short_names) {
114*8975f5c5SAndroid Build Coastguard Worker        output_name = _trace
115*8975f5c5SAndroid Build Coastguard Worker      }
116*8975f5c5SAndroid Build Coastguard Worker    }
117*8975f5c5SAndroid Build Coastguard Worker
118*8975f5c5SAndroid Build Coastguard Worker    _trace_targets += [ ":$_target" ]
119*8975f5c5SAndroid Build Coastguard Worker    _trace_lib_files += [ "${root_out_dir}/lib${_target}.so" ]
120*8975f5c5SAndroid Build Coastguard Worker  }
121*8975f5c5SAndroid Build Coastguard Worker
122*8975f5c5SAndroid Build Coastguard Worker  angle_shared_library(target_name) {
123*8975f5c5SAndroid Build Coastguard Worker    testonly = true
124*8975f5c5SAndroid Build Coastguard Worker    data = [ invoker.json_path ]
125*8975f5c5SAndroid Build Coastguard Worker    data_deps = _trace_targets
126*8975f5c5SAndroid Build Coastguard Worker    deps = [ "$angle_root:angle_common" ]
127*8975f5c5SAndroid Build Coastguard Worker    public_deps = [ "$angle_root/util:angle_trace_loader" ]
128*8975f5c5SAndroid Build Coastguard Worker  }
129*8975f5c5SAndroid Build Coastguard Worker
130*8975f5c5SAndroid Build Coastguard Worker  if (restricted_traces_outside_of_apk) {
131*8975f5c5SAndroid Build Coastguard Worker    group("${target_name}__unpacked_libs") {
132*8975f5c5SAndroid Build Coastguard Worker      testonly = true
133*8975f5c5SAndroid Build Coastguard Worker      deps = [
134*8975f5c5SAndroid Build Coastguard Worker        ":angle_restricted_traces",
135*8975f5c5SAndroid Build Coastguard Worker        "$angle_root/util:angle_trace_interpreter",
136*8975f5c5SAndroid Build Coastguard Worker      ]
137*8975f5c5SAndroid Build Coastguard Worker
138*8975f5c5SAndroid Build Coastguard Worker      # Also need files listed as data to be picked up by isolate
139*8975f5c5SAndroid Build Coastguard Worker      data =
140*8975f5c5SAndroid Build Coastguard Worker          _trace_lib_files + [ "${root_out_dir}/libangle_trace_interpreter.so" ]
141*8975f5c5SAndroid Build Coastguard Worker    }
142*8975f5c5SAndroid Build Coastguard Worker  }
143*8975f5c5SAndroid Build Coastguard Worker
144*8975f5c5SAndroid Build Coastguard Worker  group("gen_trace_list_json") {
145*8975f5c5SAndroid Build Coastguard Worker    _output_json_path = "$root_gen_dir/trace_list.json"
146*8975f5c5SAndroid Build Coastguard Worker    write_file(_output_json_path, _trace_list, "json")
147*8975f5c5SAndroid Build Coastguard Worker
148*8975f5c5SAndroid Build Coastguard Worker    data = [ _output_json_path ]
149*8975f5c5SAndroid Build Coastguard Worker  }
150*8975f5c5SAndroid Build Coastguard Worker}
151