Add perfetto build config
This adds Perfetto support to WebRTC with a GN flag rtc_use_perfetto.
The configuration of perfetto depends on whether or not webrtc is
build within Chrome or not. When in Chrome, WebRTC will depend on
//third_party/perfetto:libperfetto. When building standalone, specific includes required for Perfetto are exposed with the library webrtc_libperfetto.
The perfetto trace API is exposed with a header export in
trace_event.h which is used instead of the legacy API.
The addition of Perfetto means there are 4 compilation modes for
tracing in WebRTC,
1. No tracing implementation.
2. Legacy tracing (AddTraceEvent/GetCategoryEnabled).
3.a. Perfetto statically linked (webrtc_libperfetto).
3.b. Perfetto in Chrome (Chrome's libperfetto).
This CL removes the tracing expectations from
rtc_stats_integrationtest.cc because those directly used the old API.
Integration into Chrome is a follow up CL which depends on
https://chromium-review.googlesource.com/c/chromium/src/+/5471691.
Tested: Ran Chrome with Perfetto and traces appear. WebRTC Unit test tracing working: https://ui.perfetto.dev/#!?s=04ea2613ea36b814394639a1ec4b60be5b5097527f1a485995ecc13469885468
Bug: webrtc:15917
Change-Id: I537d79dc247c2b759689910c621087286a4d8fdc
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/347880
Reviewed-by: Harald Alvestrand <hta@webrtc.org>
Reviewed-by: Mirko Bonadei <mbonadei@webrtc.org>
Auto-Submit: Evan Shrubsole <eshr@google.com>
Commit-Queue: Harald Alvestrand <hta@webrtc.org>
Reviewed-by: Mikhail Khokhlov <khokhlov@google.com>
Cr-Commit-Position: refs/heads/main@{#42166}
diff --git a/BUILD.gn b/BUILD.gn
index 571049f..5828a81 100644
--- a/BUILD.gn
+++ b/BUILD.gn
@@ -174,16 +174,18 @@
defines += [ "RTC_ENABLE_WIN_WGC" ]
}
- # Some tests need to declare their own trace event handlers. If this define is
- # not set, the first time TRACE_EVENT_* is called it will store the return
- # value for the current handler in an static variable, so that subsequent
- # changes to the handler for that TRACE_EVENT_* will be ignored.
- # So when tests are included, we set this define, making it possible to use
- # different event handlers in different tests.
- if (rtc_include_tests) {
- defines += [ "WEBRTC_NON_STATIC_TRACE_EVENT_HANDLERS=1" ]
- } else {
- defines += [ "WEBRTC_NON_STATIC_TRACE_EVENT_HANDLERS=0" ]
+ if (!rtc_use_perfetto) {
+ # Some tests need to declare their own trace event handlers. If this define is
+ # not set, the first time TRACE_EVENT_* is called it will store the return
+ # value for the current handler in an static variable, so that subsequent
+ # changes to the handler for that TRACE_EVENT_* will be ignored.
+ # So when tests are included, we set this define, making it possible to use
+ # different event handlers in different tests.
+ if (rtc_include_tests) {
+ defines += [ "WEBRTC_NON_STATIC_TRACE_EVENT_HANDLERS=1" ]
+ } else {
+ defines += [ "WEBRTC_NON_STATIC_TRACE_EVENT_HANDLERS=0" ]
+ }
}
if (build_with_chromium) {
defines += [ "WEBRTC_CHROMIUM_BUILD" ]
@@ -269,6 +271,30 @@
}
}
+group("tracing") {
+ if (rtc_use_perfetto) {
+ if (build_with_chromium) {
+ public_deps = # no-presubmit-check TODO(webrtc:8603)
+ [ "//third_party/perfetto:libperfetto" ]
+ } else {
+ public_deps = # no-presubmit-check TODO(webrtc:8603)
+ [ ":webrtc_libperfetto" ]
+ }
+ }
+}
+
+if (rtc_use_perfetto) {
+ rtc_library("webrtc_libperfetto") {
+ public_configs = [ "//third_party/perfetto/gn:public_config" ]
+ deps = [
+ "//third_party/perfetto/src/tracing:client_api_without_backends",
+ "//third_party/perfetto/src/tracing:platform_impl",
+ ]
+ public_deps += # no-presubmit-check TODO(webrtc:8603)
+ [ "//third_party/perfetto/include/perfetto/tracing" ]
+ }
+}
+
config("common_config") {
cflags = []
cflags_c = []
@@ -478,6 +504,10 @@
"/U_UNICODE",
]
}
+
+ if (rtc_use_perfetto) {
+ defines += [ "RTC_USE_PERFETTO" ]
+ }
}
config("common_objc") {