
# Objective - Contributes to #15460 - Supersedes #8520 - Fixes #4906 ## Solution - Added a new `web` feature to `bevy`, and several of its crates. - Enabled new `web` feature automatically within crates without `no_std` support. ## Testing - `cargo build --no-default-features --target wasm32v1-none` --- ## Migration Guide When using Bevy crates which _don't_ automatically enable the `web` feature, please enable it when building for the browser. ## Notes - I added [`cfg_if`](https://crates.io/crates/cfg-if) to help manage some of the feature gate gore that this extra feature introduces. It's still pretty ugly, but I think much easier to read. - Certain `wasm` targets (e.g., [wasm32-wasip1](https://doc.rust-lang.org/nightly/rustc/platform-support/wasm32-wasip1.html#wasm32-wasip1)) provide an incomplete implementation for `std`. I have not tested these platforms, but I suspect Bevy's liberal use of usually unsupported features (e.g., threading) will cause these targets to fail. As such, consider `wasm32-unknown-unknown` as the only `wasm` platform with support from Bevy for `std`. All others likely will need to be treated as `no_std` platforms.
34 lines
1018 B
Rust
34 lines
1018 B
Rust
//! This sample demonstrates a thread pool with one thread per logical core and only one task
|
|
//! spinning. Other than the one thread, the system should remain idle, demonstrating good behavior
|
|
//! for small workloads.
|
|
|
|
use bevy_platform_support::time::Instant;
|
|
use bevy_tasks::TaskPoolBuilder;
|
|
use core::time::Duration;
|
|
|
|
fn main() {
|
|
let pool = TaskPoolBuilder::new()
|
|
.thread_name("Idle Behavior ThreadPool".to_string())
|
|
.build();
|
|
|
|
pool.scope(|s| {
|
|
for i in 0..1 {
|
|
s.spawn(async move {
|
|
println!("Blocking for 10 seconds");
|
|
let now = Instant::now();
|
|
while Instant::now() - now < Duration::from_millis(10000) {
|
|
// spin, simulating work being done
|
|
}
|
|
|
|
println!(
|
|
"Thread {:?} index {} finished",
|
|
std::thread::current().id(),
|
|
i
|
|
);
|
|
});
|
|
}
|
|
});
|
|
|
|
println!("all tasks finished");
|
|
}
|