bevyengine / bevy

A refreshingly simple data-driven game engine built in Rust
https://bevyengine.org
Apache License 2.0
35.16k stars 3.46k forks source link

Doctests for bevy_gizmos run for too long #11034

Open doonv opened 9 months ago

doonv commented 9 months ago

Bevy version

https://github.com/bevyengine/bevy/commit/dc8fc6cb34d6064530c698f30445cd69d1c79682 (Latest as of writing)

[Optional] Relevant system information

What you did

Running cargo test --doc on bevy_gizmos

What went wrong

The doctests are extremely long. Lasting for over 60 seconds. It appears running assert_is_system on a system with Gizmos causes massive lag. Removing assert_is_system makes the tests run much quicker.

# use bevy_gizmos::prelude::*;
# use bevy_render::prelude::*;
# use bevy_math::prelude::*;
# use std::f32::consts::PI;
fn system(mut gizmos: Gizmos) {
    gizmos.arc_2d(Vec2::ZERO, 0., PI / 4., 1., Color::GREEN);

    // Arcs have 32 line-segments by default.
    // You may want to increase this for larger arcs.
    gizmos
        .arc_2d(Vec2::ZERO, 0., PI / 4., 5., Color::RED)
        .segments(64);
}
# bevy_ecs::system::assert_is_system(system);

Additional information

I created a project that does a similar test, it ran instantly. Which is weird.

doonv commented 9 months ago

I was able to reproduce the issue! For some reason its only laggy on doctests. Unit tests work perfectly fine.

/// ```
/// use bevy::gizmos::gizmos::Gizmos;
/// 
/// fn system(mut _gizmos: Gizmos) {}
/// 
/// bevy::ecs::system::assert_is_system(system);
/// ```
pub struct A;

I was able to use a few nightly compiler flags to show the performance of the tests, so here are the benchmarks:

doonv commented 9 months ago

Another thing to add: It appears Gizmos in particular is much laggier than normal. Other configurations take around ~1.1s to run.

doonv commented 9 months ago

This appears to also happen in other bevy crates such as bevy_ui and error for some reason.

mockersf commented 9 months ago

running those test seems fast enough on my computer:

> cargo test --doc -p bevy_gizmos
    Finished test [unoptimized + debuginfo] target(s) in 0.32s
   Doc-tests bevy_gizmos

running 23 tests
test crates/bevy_gizmos/src/gizmos.rs - gizmos::Gizmos<'s>::cuboid (line 266) ... ok
test crates/bevy_gizmos/src/arcs.rs - arcs::Gizmos<'s>::arc_2d (line 25) ... ok
test crates/bevy_gizmos/src/arrows.rs - arrows::Gizmos<'s>::arrow_2d (line 97) ... ok
test crates/bevy_gizmos/src/arrows.rs - arrows::Gizmos<'s>::arrow (line 72) ... ok
test crates/bevy_gizmos/src/gizmos.rs - gizmos::Gizmos<'s>::line_gradient (line 79) ... ok
test crates/bevy_gizmos/src/circles.rs - circles::Gizmos<'s>::circle_2d (line 64) ... ok
test crates/bevy_gizmos/src/circles.rs - circles::Gizmos<'s>::circle (line 26) ... ok
test crates/bevy_gizmos/src/arrows.rs - arrows::ArrowBuilder<'_,'_>::with_tip_length (line 24) ... ok
test crates/bevy_gizmos/src/gizmos.rs - gizmos::Gizmos<'s>::line_2d (line 301) ... ok
test crates/bevy_gizmos/src/gizmos.rs - gizmos::Gizmos<'s>::line (line 59) ... ok
test crates/bevy_gizmos/src/gizmos.rs - gizmos::Gizmos<'s>::linestrip_2d (line 345) ... ok
test crates/bevy_gizmos/src/gizmos.rs - gizmos::Gizmos<'s>::line_gradient_2d (line 320) ... ok
test crates/bevy_gizmos/src/gizmos.rs - gizmos::Gizmos<'s>::linestrip_gradient (line 167) ... ok
test crates/bevy_gizmos/src/gizmos.rs - gizmos::Gizmos<'s>::ray (line 99) ... ok
test crates/bevy_gizmos/src/gizmos.rs - gizmos::Gizmos<'s>::linestrip (line 143) ... ok
test crates/bevy_gizmos/src/gizmos.rs - gizmos::Gizmos<'s>::ray_gradient (line 118) ... ok
test crates/bevy_gizmos/src/gizmos.rs - gizmos::Gizmos<'s>::ray_2d (line 391) ... ok
test crates/bevy_gizmos/src/gizmos.rs - gizmos::Gizmos<'s>::linestrip_gradient_2d (line 364) ... ok
test crates/bevy_gizmos/src/gizmos.rs - gizmos::Gizmos<'s>::ray_gradient_2d (line 410) ... ok
test crates/bevy_gizmos/src/gizmos.rs - gizmos::Gizmos<'s>::rect (line 246) ... ok
test crates/bevy_gizmos/src/gizmos.rs - gizmos::Gizmos<'s>::rect_2d (line 435) ... ok
test crates/bevy_gizmos/src/lib.rs - (line 6) ... ok
test crates/bevy_gizmos/src/gizmos.rs - gizmos::Gizmos<'s>::sphere (line 208) ... ok

test result: ok. 23 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 2.62s
doonv commented 9 months ago

running those test seems fast enough on my computer:

> cargo test --doc -p bevy_gizmos
    Finished test [unoptimized + debuginfo] target(s) in 0.32s
   Doc-tests bevy_gizmos

running 23 tests
test crates/bevy_gizmos/src/gizmos.rs - gizmos::Gizmos<'s>::cuboid (line 266) ... ok
test crates/bevy_gizmos/src/arcs.rs - arcs::Gizmos<'s>::arc_2d (line 25) ... ok
test crates/bevy_gizmos/src/arrows.rs - arrows::Gizmos<'s>::arrow_2d (line 97) ... ok
test crates/bevy_gizmos/src/arrows.rs - arrows::Gizmos<'s>::arrow (line 72) ... ok
test crates/bevy_gizmos/src/gizmos.rs - gizmos::Gizmos<'s>::line_gradient (line 79) ... ok
test crates/bevy_gizmos/src/circles.rs - circles::Gizmos<'s>::circle_2d (line 64) ... ok
test crates/bevy_gizmos/src/circles.rs - circles::Gizmos<'s>::circle (line 26) ... ok
test crates/bevy_gizmos/src/arrows.rs - arrows::ArrowBuilder<'_,'_>::with_tip_length (line 24) ... ok
test crates/bevy_gizmos/src/gizmos.rs - gizmos::Gizmos<'s>::line_2d (line 301) ... ok
test crates/bevy_gizmos/src/gizmos.rs - gizmos::Gizmos<'s>::line (line 59) ... ok
test crates/bevy_gizmos/src/gizmos.rs - gizmos::Gizmos<'s>::linestrip_2d (line 345) ... ok
test crates/bevy_gizmos/src/gizmos.rs - gizmos::Gizmos<'s>::line_gradient_2d (line 320) ... ok
test crates/bevy_gizmos/src/gizmos.rs - gizmos::Gizmos<'s>::linestrip_gradient (line 167) ... ok
test crates/bevy_gizmos/src/gizmos.rs - gizmos::Gizmos<'s>::ray (line 99) ... ok
test crates/bevy_gizmos/src/gizmos.rs - gizmos::Gizmos<'s>::linestrip (line 143) ... ok
test crates/bevy_gizmos/src/gizmos.rs - gizmos::Gizmos<'s>::ray_gradient (line 118) ... ok
test crates/bevy_gizmos/src/gizmos.rs - gizmos::Gizmos<'s>::ray_2d (line 391) ... ok
test crates/bevy_gizmos/src/gizmos.rs - gizmos::Gizmos<'s>::linestrip_gradient_2d (line 364) ... ok
test crates/bevy_gizmos/src/gizmos.rs - gizmos::Gizmos<'s>::ray_gradient_2d (line 410) ... ok
test crates/bevy_gizmos/src/gizmos.rs - gizmos::Gizmos<'s>::rect (line 246) ... ok
test crates/bevy_gizmos/src/gizmos.rs - gizmos::Gizmos<'s>::rect_2d (line 435) ... ok
test crates/bevy_gizmos/src/lib.rs - (line 6) ... ok
test crates/bevy_gizmos/src/gizmos.rs - gizmos::Gizmos<'s>::sphere (line 208) ... ok

test result: ok. 23 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 2.62s

That is really weird. What compiler are you using and what OS?

doonv commented 9 months ago

Another weird thing: Running in --release mode causes the doctests to finish in only 1.14s

mockersf commented 9 months ago

That is really weird. What compiler are you using and what OS?

On an apple m1 max, with rust 1.74.1