mirror of
https://github.com/bevyengine/bevy
synced 2024-11-14 17:07:47 +00:00
40bbbbb34e
Profiles show that in extremely hot loops, like the draw loops in the renderer, invoking the trace! macro has noticeable overhead, even if the trace log level is not enabled. Solve this by introduce a 'wrapper' detailed_trace macro around trace, that wraps the trace! log statement in a trivially false if statement unless a cargo feature is enabled # Objective - Eliminate significant overhead observed with trace-level logging in render hot loops, even when trace log level is not enabled. - This is an alternative solution to the one proposed in #7223 ## Solution - Introduce a wrapper around the `trace!` macro called `detailed_trace!`. This macro wraps the `trace!` macro with an if statement that is conditional on a new cargo feature, `detailed_trace`. When the feature is not enabled (the default), then the if statement is trivially false and should be optimized away at compile time. - Convert the observed hot occurrences of trace logging in `TrackedRenderPass` with this new macro. Testing the results of ``` cargo run --profile stress-test --features bevy/trace_tracy --example many_cubes -- spheres ``` ![image](https://user-images.githubusercontent.com/1222141/218298552-38551717-b062-4c64-afdc-a60267ac984d.png) shows significant improvement of the `main_opaque_pass_3d` of the renderer, a median time decrease from 6.0ms to 3.5ms. --- ## Changelog - For performance reasons, some detailed renderer trace logs now require the use of cargo feature `detailed_trace` in addition to setting the log level to `TRACE` in order to be shown. ## Migration Guide - Some detailed bevy trace events now require the use of the cargo feature `detailed_trace` in addition to enabling `TRACE` level logging to view. Should you wish to see these logs, please compile your code with the bevy feature `detailed_trace`. Currently, the only logs that are affected are the renderer logs pertaining to `TrackedRenderPass` functions
113 lines
4.9 KiB
TOML
113 lines
4.9 KiB
TOML
[package]
|
|
name = "bevy_internal"
|
|
version = "0.9.0"
|
|
edition = "2021"
|
|
description = "An internal Bevy crate used to facilitate optional dynamic linking via the 'dynamic_linking' feature"
|
|
homepage = "https://bevyengine.org"
|
|
repository = "https://github.com/bevyengine/bevy"
|
|
license = "MIT OR Apache-2.0"
|
|
keywords = ["game", "engine", "gamedev", "graphics", "bevy"]
|
|
categories = ["game-engines", "graphics", "gui", "rendering"]
|
|
|
|
[features]
|
|
trace = [
|
|
"bevy_app/trace",
|
|
"bevy_core_pipeline?/trace",
|
|
"bevy_ecs/trace",
|
|
"bevy_log/trace",
|
|
"bevy_render?/trace",
|
|
"bevy_hierarchy/trace",
|
|
"bevy_winit/trace"
|
|
]
|
|
trace_chrome = [ "bevy_log/tracing-chrome" ]
|
|
trace_tracy = ["bevy_render?/tracing-tracy", "bevy_log/tracing-tracy" ]
|
|
wgpu_trace = ["bevy_render/wgpu_trace"]
|
|
debug_asset_server = ["bevy_asset/debug_asset_server"]
|
|
detailed_trace = ["bevy_utils/detailed_trace"]
|
|
|
|
# Image format support for texture loading (PNG and HDR are enabled by default)
|
|
hdr = ["bevy_render/hdr"]
|
|
png = ["bevy_render/png"]
|
|
tga = ["bevy_render/tga"]
|
|
jpeg = ["bevy_render/jpeg"]
|
|
bmp = ["bevy_render/bmp"]
|
|
basis-universal = ["bevy_render/basis-universal"]
|
|
dds = ["bevy_render/dds"]
|
|
ktx2 = ["bevy_render/ktx2"]
|
|
# For ktx2 supercompression
|
|
zlib = ["bevy_render/zlib"]
|
|
zstd = ["bevy_render/zstd"]
|
|
|
|
# Audio format support (vorbis is enabled by default)
|
|
flac = ["bevy_audio/flac"]
|
|
mp3 = ["bevy_audio/mp3"]
|
|
vorbis = ["bevy_audio/vorbis"]
|
|
wav = ["bevy_audio/wav"]
|
|
symphonia-aac = ["bevy_audio/symphonia-aac"]
|
|
symphonia-all = ["bevy_audio/symphonia-all"]
|
|
symphonia-flac = ["bevy_audio/symphonia-flac"]
|
|
symphonia-isomp4 = ["bevy_audio/symphonia-isomp4"]
|
|
symphonia-mp3 = ["bevy_audio/symphonia-mp3"]
|
|
symphonia-vorbis = ["bevy_audio/symphonia-vorbis"]
|
|
symphonia-wav = ["bevy_audio/symphonia-wav"]
|
|
|
|
# Enable watching file system for asset hot reload
|
|
filesystem_watcher = ["bevy_asset/filesystem_watcher"]
|
|
|
|
serialize = ["bevy_core/serialize", "bevy_input/serialize", "bevy_time/serialize", "bevy_window/serialize", "bevy_transform/serialize", "bevy_math/serialize", "bevy_scene/serialize"]
|
|
|
|
# Display server protocol support (X11 is enabled by default)
|
|
wayland = ["bevy_winit/wayland"]
|
|
x11 = ["bevy_winit/x11"]
|
|
|
|
# enable rendering of font glyphs using subpixel accuracy
|
|
subpixel_glyph_atlas = ["bevy_text/subpixel_glyph_atlas"]
|
|
|
|
# Optimise for WebGL2
|
|
webgl = ["bevy_core_pipeline?/webgl", "bevy_pbr?/webgl", "bevy_render?/webgl"]
|
|
|
|
# enable systems that allow for automated testing on CI
|
|
bevy_ci_testing = ["bevy_app/bevy_ci_testing", "bevy_render/ci_limits"]
|
|
|
|
# Enable animation support, and glTF animation loading
|
|
animation = ["bevy_animation", "bevy_gltf?/bevy_animation"]
|
|
|
|
# Used to disable code that is unsupported when Bevy is dynamically linked
|
|
dynamic_linking = ["bevy_diagnostic/dynamic_linking"]
|
|
|
|
# Enable using a shared stdlib for cxx on Android.
|
|
android_shared_stdcxx = ["bevy_audio/android_shared_stdcxx"]
|
|
|
|
[dependencies]
|
|
# bevy
|
|
bevy_app = { path = "../bevy_app", version = "0.9.0" }
|
|
bevy_core = { path = "../bevy_core", version = "0.9.0" }
|
|
bevy_derive = { path = "../bevy_derive", version = "0.9.0" }
|
|
bevy_diagnostic = { path = "../bevy_diagnostic", version = "0.9.0" }
|
|
bevy_ecs = { path = "../bevy_ecs", version = "0.9.0" }
|
|
bevy_hierarchy = { path = "../bevy_hierarchy", version = "0.9.0" }
|
|
bevy_input = { path = "../bevy_input", version = "0.9.0" }
|
|
bevy_log = { path = "../bevy_log", version = "0.9.0" }
|
|
bevy_math = { path = "../bevy_math", version = "0.9.0" }
|
|
bevy_ptr = { path = "../bevy_ptr", version = "0.9.0" }
|
|
bevy_reflect = { path = "../bevy_reflect", version = "0.9.0", features = ["bevy"] }
|
|
bevy_time = { path = "../bevy_time", version = "0.9.0" }
|
|
bevy_transform = { path = "../bevy_transform", version = "0.9.0" }
|
|
bevy_utils = { path = "../bevy_utils", version = "0.9.0" }
|
|
bevy_window = { path = "../bevy_window", version = "0.9.0" }
|
|
bevy_tasks = { path = "../bevy_tasks", version = "0.9.0" }
|
|
# bevy (optional)
|
|
bevy_animation = { path = "../bevy_animation", optional = true, version = "0.9.0" }
|
|
bevy_asset = { path = "../bevy_asset", optional = true, version = "0.9.0" }
|
|
bevy_audio = { path = "../bevy_audio", optional = true, version = "0.9.0" }
|
|
bevy_core_pipeline = { path = "../bevy_core_pipeline", optional = true, version = "0.9.0" }
|
|
bevy_gltf = { path = "../bevy_gltf", optional = true, version = "0.9.0" }
|
|
bevy_pbr = { path = "../bevy_pbr", optional = true, version = "0.9.0" }
|
|
bevy_render = { path = "../bevy_render", optional = true, version = "0.9.0" }
|
|
bevy_dynamic_plugin = { path = "../bevy_dynamic_plugin", optional = true, version = "0.9.0" }
|
|
bevy_scene = { path = "../bevy_scene", optional = true, version = "0.9.0" }
|
|
bevy_sprite = { path = "../bevy_sprite", optional = true, version = "0.9.0" }
|
|
bevy_text = { path = "../bevy_text", optional = true, version = "0.9.0" }
|
|
bevy_ui = { path = "../bevy_ui", optional = true, version = "0.9.0" }
|
|
bevy_winit = { path = "../bevy_winit", optional = true, version = "0.9.0" }
|
|
bevy_gilrs = { path = "../bevy_gilrs", optional = true, version = "0.9.0" }
|