• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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    data = invoker.data
15    defines = [ "ANGLE_REPLAY_IMPLEMENTATION" ]
16    suppressed_configs += [ "$angle_root:constructor_and_destructor_warnings" ]
17
18    _trace_data = read_file(invoker.json_file_name, "json")
19    parsed_json = _trace_data.TraceMetadata
20
21    if (defined(invoker.rebased_path)) {
22      sources = rebase_path(_trace_data.TraceFiles, ".", invoker.rebased_path)
23    } else {
24      sources = _trace_data.TraceFiles
25    }
26
27    # Dummy statement to enable the use of defined(parsed_json.IsOpenCL)
28    if (parsed_json.IsBinaryDataCompressed) {
29    }
30
31    if (defined(parsed_json.IsOpenCL) && parsed_json.IsOpenCL &&
32        angle_enable_cl) {
33      deps = [ "$angle_root/util:angle_trace_fixture_cl" ]
34    } else {
35      deps = [ "$angle_root/util:angle_trace_fixture" ]
36    }
37
38    deps += [ "$angle_root/util:angle_trace_loader" ]
39
40    if (defined(invoker.deps)) {
41      deps += invoker.deps
42    }
43
44    if (is_android) {
45      libs = [ "log" ]
46    }
47
48    # Disable optimization in the trace perf tests to avoid optimizing huge files.
49    if (!is_debug && !is_ubsan) {
50      suppressed_configs += [
51        "//build/config/compiler:afdo",
52        "//build/config/compiler:afdo_optimize_size",
53        "//build/config/compiler:optimize_max",
54        "//build/config/compiler/pgo:default_pgo_flags",
55      ]
56      configs += [ "//build/config/compiler:no_optimize" ]
57    }
58
59    include_dirs = [ "." ]
60
61    if (defined(invoker.output_name)) {
62      output_name = invoker.output_name
63    }
64  }
65}
66
67set_defaults("angle_trace_libs") {
68  # Uses a short name to work around file path limits on Windows.
69  short_names = false
70}
71
72template("angle_trace_libs") {
73  _trace_list = []
74  _trace_targets = []
75  _trace_lib_files = []
76
77  if (invoker.short_names) {
78    _trace_counter = 1
79  }
80
81  foreach(_trace_and_version, invoker.trace_list) {
82    _trace_and_version_arr = []
83    _trace_and_version_arr = string_split(_trace_and_version)
84    _trace = _trace_and_version_arr[0]
85    _trace_list += [ _trace ]
86    if (defined(invoker.trace_dir)) {
87      _trace_dir = invoker.trace_dir
88    } else {
89      _trace_dir = _trace
90    }
91    _trace_json_path = "$_trace_dir/$_trace.json"
92    json_file_name = _trace_json_path
93    rebased_path = _trace_dir
94
95    if (invoker.short_names) {
96      _target = "cr_trace_${_trace_counter}"
97      _trace_counter += 1
98    } else {
99      _target = "${target_name}_$_trace"
100    }
101
102    if (angle_enable_tracegz) {
103      _gen_tracegz_target = "gen${target_name}_$_trace"
104      action(_gen_tracegz_target) {
105        script = "//scripts/tracegz.py"
106        args = [
107          _trace,
108          rebase_path(_trace_dir, root_build_dir),
109        ]
110        outputs = [ "$root_gen_dir/tracegz_$_trace.gz" ]
111      }
112    }
113
114    angle_trace(_target) {
115      data = [
116        "$_trace_dir/$_trace.json",
117        "$_trace_dir/$_trace.angledata.gz",
118      ]
119
120      deps = []
121
122      if (angle_enable_cl) {
123        deps += [ "$angle_root/src/libOpenCL:OpenCL_ANGLE" ]
124      }
125
126      if (angle_enable_tracegz) {
127        deps += [ ":$_gen_tracegz_target" ]
128        data += [ "$root_gen_dir/tracegz_$_trace.gz" ]
129      }
130
131      if (invoker.short_names) {
132        output_name = _trace
133      }
134    }
135
136    _trace_targets += [ ":$_target" ]
137    _trace_lib_files += [ "${root_out_dir}/lib${_target}.so" ]
138  }
139
140  angle_shared_library(target_name) {
141    testonly = true
142    data = [ invoker.json_path ]
143    data_deps = _trace_targets
144    deps = [ "$angle_root:angle_common" ]
145    public_deps = [ "$angle_root/util:angle_trace_loader" ]
146  }
147
148  if (restricted_traces_outside_of_apk) {
149    group("${target_name}__unpacked_libs") {
150      testonly = true
151      deps = [
152        ":angle_restricted_traces",
153        "$angle_root/util:angle_trace_interpreter",
154      ]
155
156      # Also need files listed as data to be picked up by isolate
157      data =
158          _trace_lib_files + [ "${root_out_dir}/libangle_trace_interpreter.so" ]
159    }
160  }
161
162  group("gen_trace_list_json") {
163    _output_json_path = "$root_gen_dir/trace_list.json"
164    write_file(_output_json_path, _trace_list, "json")
165
166    data = [ _output_json_path ]
167  }
168}
169