Skip to content

Doctests for bevy_gizmos run for too long #11034

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Closed
doonv opened this issue Dec 20, 2023 · 13 comments
Closed

Doctests for bevy_gizmos run for too long #11034

doonv opened this issue Dec 20, 2023 · 13 comments
Labels
A-Gizmos Visual editor and debug gizmos C-Bug An unexpected or incorrect behavior C-Docs An addition or correction to our documentation S-Waiting-on-Author The author needs to make changes or address concerns before this can be merged

Comments

@doonv
Copy link
Contributor

doonv commented Dec 20, 2023

Bevy version

dc8fc6c (Latest as of writing)

[Optional] Relevant system information

  • Rust Version: rustc 1.74.1 (a28077b28 2023-12-04)
  • System Info:

    Operating System: Kubuntu 23.10
    KDE Plasma Version: 5.27.8
    KDE Frameworks Version: 5.110.0
    Qt Version: 5.15.10
    Kernel Version: 6.5.0-14-generic (64-bit)
    Graphics Platform: X11
    Processors: 16 × 13th Gen Intel® Core™ i5-13400
    Memory: 15.4 GiB of RAM
    Graphics Processor: NVIDIA GeForce RTX 3060/PCIe/SSE2
    Manufacturer: Gigabyte Technology Co., Ltd.
    Product Name: B760M DS3H AX DDR4

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 doonv added C-Bug An unexpected or incorrect behavior S-Needs-Triage This issue needs to be labelled labels Dec 20, 2023
@doonv
Copy link
Contributor Author

doonv commented Dec 20, 2023

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:

  • Doctest, without assert_is_system: ~0.55s
  • Doctest, with assert_is_system: ~2.9s
  • Unit test, with/without assert_is_system: 0.0s

@doonv
Copy link
Contributor Author

doonv commented Dec 20, 2023

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

@doonv
Copy link
Contributor Author

doonv commented Dec 20, 2023

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

@ItsDoot ItsDoot added C-Docs An addition or correction to our documentation A-Gizmos Visual editor and debug gizmos and removed S-Needs-Triage This issue needs to be labelled labels Dec 20, 2023
@mockersf
Copy link
Member

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
Copy link
Contributor Author

doonv commented Dec 21, 2023

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
Copy link
Contributor Author

doonv commented Dec 21, 2023

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

@mockersf
Copy link
Member

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

On an apple m1 max, with rust 1.74.1

@BenjaminBrienen
Copy link
Contributor

BenjaminBrienen commented Oct 28, 2024

12th Gen Intel(R) Core(TM) i7-12700H

cargo test --doc

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

@BenjaminBrienen
Copy link
Contributor

@doonv Can you check whether you are still experiencing this issue?

@BenjaminBrienen BenjaminBrienen added the S-Waiting-on-Author The author needs to make changes or address concerns before this can be merged label Oct 28, 2024
@BenjaminBrienen
Copy link
Contributor

With cargo run -p ci -- doc there is an entirely different story. A whole bunch of crates pass and then...

   Doc-tests bevy_gizmos

running 45 tests
test crates\bevy_gizmos\src\arcs.rs - arcs::Gizmos<'w,'s,Config,Clear>::arc_2d (line 34) has been running for over 60 seconds
test crates\bevy_gizmos\src\arcs.rs - arcs::Gizmos<'w,'s,Config,Clear>::arc_3d (line 154) has been running for over 60 seconds
test crates\bevy_gizmos\src\arcs.rs - arcs::Gizmos<'w,'s,Config,Clear>::long_arc_2d_between (line 386) has been running for over 60 seconds
test crates\bevy_gizmos\src\arcs.rs - arcs::Gizmos<'w,'s,Config,Clear>::long_arc_3d_between (line 253) has been running for over 60 seconds
test crates\bevy_gizmos\src\arcs.rs - arcs::Gizmos<'w,'s,Config,Clear>::short_arc_2d_between (line 340) has been running for over 60 seconds
test crates\bevy_gizmos\src\arcs.rs - arcs::Gizmos<'w,'s,Config,Clear>::short_arc_3d_between (line 207) has been running for over 60 seconds
test crates\bevy_gizmos\src\arrows.rs - arrows::ArrowBuilder<'_,'_,'_,Config,Clear>::with_tip_length (line 37) has been running for over 60 seconds
test crates\bevy_gizmos\src\arrows.rs - arrows::Gizmos<'w,'s,Config,Clear>::arrow (line 114) has been running for over 60 seconds
test crates\bevy_gizmos\src\arrows.rs - arrows::Gizmos<'w,'s,Config,Clear>::arrow_2d (line 145) has been running for over 60 seconds
test crates\bevy_gizmos\src\arrows.rs - arrows::Gizmos<'w,'s,Config,Clear>::axes (line 175) has been running for over 60 seconds
test crates\bevy_gizmos\src\arrows.rs - arrows::Gizmos<'w,'s,Config,Clear>::axes_2d (line 208) has been running for over 60 seconds
test crates\bevy_gizmos\src\circles.rs - circles::Gizmos<'w,'s,Config,Clear>::circle (line 116) has been running for over 60 seconds
test crates\bevy_gizmos\src\circles.rs - circles::Gizmos<'w,'s,Config,Clear>::circle_2d (line 157) has been running for over 60 seconds
test crates\bevy_gizmos\src\circles.rs - circles::Gizmos<'w,'s,Config,Clear>::ellipse (line 36) has been running for over 60 seconds
test crates\bevy_gizmos\src\circles.rs - circles::Gizmos<'w,'s,Config,Clear>::ellipse_2d (line 77) has been running for over 60 seconds
test crates\bevy_gizmos\src\circles.rs - circles::Gizmos<'w,'s,Config,Clear>::sphere (line 199) has been running for over 60 seconds
test crates\bevy_gizmos\src\cross.rs - cross::Gizmos<'_,'_,Config>::cross (line 24) has been running for over 60 seconds
test crates\bevy_gizmos\src\cross.rs - cross::Gizmos<'_,'_,Config>::cross_2d (line 59) has been running for over 60 seconds
test crates\bevy_gizmos\src\curves.rs - curves::Gizmos<'w,'s,Config,Clear>::curve_2d (line 30) has been running for over 60 seconds
test crates\bevy_gizmos\src\curves.rs - curves::Gizmos<'w,'s,Config,Clear>::curve_3d (line 64) has been running for over 60 seconds

It uses all 32 GB of RAM and causes the system to freeze up/soft crash after about 5-10 minutes.

@alice-i-cecile
Copy link
Member

Closing as duplicate.

@BD103 BD103 closed this as not planned Won't fix, can't repro, duplicate, stale Oct 29, 2024
@targrub
Copy link
Contributor

targrub commented Oct 29, 2024

What issue is this a duplicate of?
IIRC, there was a cargo issue that causes a ballooning of memory use for certain doc tests, and the gizmos are a prime example thereof.

@BenjaminBrienen
Copy link
Contributor

What issue is this a duplicate of?
IIRC, there was a cargo issue that causes a ballooning of memory use for certain doc tests, and the gizmos are a prime example thereof.

#12207

We decided to keep the one with more info, even though it is technically newer

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
A-Gizmos Visual editor and debug gizmos C-Bug An unexpected or incorrect behavior C-Docs An addition or correction to our documentation S-Waiting-on-Author The author needs to make changes or address concerns before this can be merged
Projects
None yet
Development

No branches or pull requests

7 participants