• 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
6template("angle_trace") {
7  angle_shared_library(target_name) {
8    testonly = true
9
10    # Similar to capture replay sample, use the file index for sources
11    sources = invoker.sources
12
13    data = invoker.data
14    defines = [ "ANGLE_REPLAY_IMPLEMENTATION" ]
15    suppressed_configs += [ "$angle_root:constructor_and_destructor_warnings" ]
16
17    deps = [
18      "$angle_root/util:angle_trace_fixture",
19      "$angle_root/util:angle_trace_loader",
20    ]
21
22    if (defined(invoker.deps)) {
23      deps += invoker.deps
24    }
25
26    if (is_android) {
27      libs = [ "log" ]
28    }
29
30    # Disable optimization in the trace perf tests to avoid optimizing huge files.
31    if (!is_debug && !is_ubsan) {
32      suppressed_configs += [
33        "//build/config/compiler:afdo",
34        "//build/config/compiler:afdo_optimize_size",
35        "//build/config/compiler:optimize_max",
36        "//build/config/compiler/pgo:default_pgo_flags",
37      ]
38      configs += [ "//build/config/compiler:no_optimize" ]
39    }
40
41    include_dirs = [ "." ]
42
43    if (defined(invoker.output_name)) {
44      output_name = invoker.output_name
45    }
46  }
47}
48
49set_defaults("angle_trace_libs") {
50  # Uses a short name to work around file path limits on Windows.
51  short_names = false
52}
53
54template("angle_trace_libs") {
55  _trace_targets = []
56  _trace_lib_files = []
57
58  if (invoker.short_names) {
59    _trace_counter = 1
60  }
61
62  foreach(_trace_and_version, invoker.trace_list) {
63    _trace_and_version_arr = []
64    _trace_and_version_arr = string_split(_trace_and_version)
65    _trace = _trace_and_version_arr[0]
66    if (defined(invoker.trace_dir)) {
67      _trace_dir = invoker.trace_dir
68    } else {
69      _trace_dir = _trace
70    }
71    _trace_json_path = "$_trace_dir/$_trace.json"
72    _trace_data = []
73    _trace_data = read_file(_trace_json_path, "json")
74
75    if (invoker.short_names) {
76      _target = "cr_trace_${_trace_counter}"
77      _trace_counter += 1
78    } else {
79      _target = "${target_name}_$_trace"
80    }
81
82    _gen_target = "gen${target_name}_$_trace"
83    action(_gen_target) {
84      script = "//scripts/tracegz.py"
85      args = [
86        _trace,
87        rebase_path(_trace_dir, root_build_dir),
88      ]
89      outputs = [ "$root_gen_dir/tracegz_$_trace.gz" ]
90    }
91
92    angle_trace(_target) {
93      sources = rebase_path(_trace_data.TraceFiles, ".", _trace_dir)
94
95      data = [
96        "$_trace_dir/$_trace.json",
97        "$_trace_dir/$_trace.angledata.gz",
98        "$root_gen_dir/tracegz_$_trace.gz",
99      ]
100
101      deps = [ ":$_gen_target" ]
102
103      if (invoker.short_names) {
104        output_name = _trace
105      }
106    }
107
108    _trace_targets += [ ":$_target" ]
109    _trace_lib_files += [ "${root_out_dir}/lib${_target}.so" ]
110  }
111
112  angle_shared_library(target_name) {
113    testonly = true
114    data = [ invoker.json_path ]
115    data_deps = _trace_targets
116    deps = [ "$angle_root:angle_common" ]
117    public_deps = [ "$angle_root/util:angle_trace_loader" ]
118  }
119
120  if (restricted_traces_outside_of_apk) {
121    group("${target_name}__unpacked_libs") {
122      testonly = true
123      deps = [
124        ":angle_restricted_traces",
125        "$angle_root/util:angle_trace_interpreter",
126      ]
127
128      # Also need files listed as data to be picked up by isolate
129      data =
130          _trace_lib_files + [ "${root_out_dir}/libangle_trace_interpreter.so" ]
131    }
132  }
133}
134