cb424d7448
verify-patch-sanity.py validates every active recipe .patch has internally- consistent hunk line counts — catching the 'malformed patch at line N' failure at commit/CI/preflight time instead of hours into a cook. This cycle hit that class three times (qtwaylandscanner, sddm, xwayland), each only discovered when cookbook tried to apply the patch. Running it across the repo found 29 latent malformed patches (validated against GNU patch: e.g. relibc/P3-sysv-ipc reproduces 'malformed patch at line 22'). They were harmless only because they sit in vendored recipes (baked, not re- applied) — but would fail on any version-bump re-derivation. --fix recounts the hunk headers (body untouched) and repaired all 29. Wired into build-preflight.sh (Phase 1.0D) and redbear-ci.yml, with a unit test (test-patch-sanity.sh). Skips archived/legacy trees and unvalidatable formats (empty placeholders, bare-@@ git hunks).
77 lines
2.7 KiB
ReStructuredText
77 lines
2.7 KiB
ReStructuredText
u_trace GPU Performance Tracing
|
|
===============================
|
|
|
|
Mesa has its own GPU performance tracing framework which drivers may
|
|
choose to implement. ``gpu.renderstages.*`` producer for
|
|
:doc:`Perfetto Tracing <perfetto>` is based on u_trace.
|
|
|
|
It doesn't require external dependencies and much simpler to use. Though
|
|
it provides information only about GPU timings and is harder to analyze
|
|
for complex rendering.
|
|
|
|
u_trace is useful when one needs to quickly identify performance bottleneck,
|
|
or to build a tool to analyze the raw performance data.
|
|
|
|
Drivers which support u_trace:
|
|
- Intel drivers: ANV, Iris
|
|
- Adreno drivers: Freedreno, Turnip
|
|
|
|
Usage
|
|
-----
|
|
|
|
u_trace is controlled by environment variables:
|
|
|
|
.. envvar:: MESA_GPU_TRACES
|
|
|
|
controls whether u_trace is enabled and trace output
|
|
|
|
``print``
|
|
prints in a human readable text format. It should be noted that this
|
|
is mutually exclusive with ``print_json`` and both cannot be enabled
|
|
at the same time.
|
|
``print_json``
|
|
prints in JSON format, suitable for parsing. Application should
|
|
appropriately finish its rendering in order for trace's json to be
|
|
valid. For the Vulkan API, it is expected to destroy the device,
|
|
for GL it's expected to destroy the context.
|
|
``perfetto``
|
|
enables Perfetto instrumentation prior to connecting, Perfetto
|
|
traces can be collected without setting this but it may miss some
|
|
events prior to the tracing session being started.
|
|
``markers``
|
|
enables marker instrumentation, will print trace markers into
|
|
the CS which can then be viewed by dumping the CS from the driver.
|
|
|
|
- For Turnip, ``cffdump`` can be used to view the markers in
|
|
the trace.
|
|
``indirects``
|
|
enables indirect data capture for some of the tracepoints (like
|
|
indirect draw count or indirect dispatch size)
|
|
|
|
.. envvar:: MESA_GPU_TRACEFILE
|
|
|
|
specifies a file where to write the output instead of ``stdout``
|
|
|
|
.. envvar:: *_GPU_TRACEPOINT
|
|
|
|
tracepoints can be enabled or disabled using driver specific environment
|
|
variable. Most tracepoints are enabled by default. For instance
|
|
``TU_GPU_TRACEPOINT=-blit,+render_pass`` will disable the
|
|
``blit`` tracepoints and enable the ``render_pass`` tracepoints.
|
|
|
|
.. list-table::
|
|
:header-rows: 1
|
|
|
|
* - Driver
|
|
- Environment Variable
|
|
- Tracepoint Definitions
|
|
* - Freedreno
|
|
- .. envvar:: FD_GPU_TRACEPOINT
|
|
- ``src/gallium/drivers/freedreno/freedreno_tracepoints.py``
|
|
* - Turnip
|
|
- .. envvar:: TU_GPU_TRACEPOINT
|
|
- ``src/freedreno/vulkan/tu_tracepoints.py``
|
|
* - ANV
|
|
- .. envvar:: INTEL_GPU_TRACEPOINT
|
|
- ``src/intel/vulkan/intel_tracepoints.py``
|