• 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:default_optimization",
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  if (is_android && is_component_build) {
63    _cr_suffix = ".cr"
64  } else {
65    _cr_suffix = ""
66  }
67
68  foreach(_trace_and_version, invoker.trace_list) {
69    _trace_and_version_arr = []
70    _trace_and_version_arr = string_split(_trace_and_version)
71    _trace = _trace_and_version_arr[0]
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    _gen_target = "gen${target_name}_$_trace"
89    action(_gen_target) {
90      script = "//scripts/tracegz.py"
91      args = [
92        _trace,
93        rebase_path(_trace_dir, root_build_dir),
94      ]
95      outputs = [ "$root_gen_dir/tracegz_$_trace.gz" ]
96    }
97
98    angle_trace(_target) {
99      sources = rebase_path(_trace_data.TraceFiles, ".", _trace_dir)
100
101      data = [
102        "$_trace_dir/$_trace.json",
103        "$_trace_dir/$_trace.angledata.gz",
104        "$root_gen_dir/tracegz_$_trace.gz",
105      ]
106
107      deps = [ ":$_gen_target" ]
108
109      if (invoker.short_names) {
110        output_name = _trace
111      }
112    }
113
114    _trace_targets += [ ":$_target" ]
115    _trace_lib_files += [ "${root_out_dir}/lib${_target}${_cr_suffix}.so" ]
116  }
117
118  angle_shared_library(target_name) {
119    testonly = true
120    data = [ invoker.json_path ]
121    data_deps = _trace_targets
122    deps = [ "$angle_root:angle_common" ]
123    public_deps = [ "$angle_root/util:angle_trace_loader" ]
124  }
125
126  if (restricted_traces_outside_of_apk) {
127    group("${target_name}__unpacked_libs") {
128      testonly = true
129      deps = [
130        ":angle_restricted_traces",
131        "$angle_root/util:angle_trace_interpreter",
132      ]
133
134      # Also need files listed as data to be picked up by isolate
135      data = _trace_lib_files +
136             [ "${root_out_dir}/libangle_trace_interpreter${_cr_suffix}.so" ]
137    }
138  }
139}
140