Skip to content
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

Remove instant dependency in favor of web-time #767

Merged
merged 3 commits into from
Dec 6, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions .github/workflows/rapier-ci-build.yml
Original file line number Diff line number Diff line change
Expand Up @@ -75,9 +75,9 @@ jobs:
- uses: actions/checkout@v4
- run: rustup target add wasm32-unknown-unknown
- name: build rapier2d
run: cd crates/rapier2d && cargo build --verbose --features wasm-bindgen --target wasm32-unknown-unknown;
run: cd crates/rapier2d && cargo build --verbose --target wasm32-unknown-unknown;
- name: build rapier3d
run: cd crates/rapier3d && cargo build --verbose --features wasm-bindgen --target wasm32-unknown-unknown;
run: cd crates/rapier3d && cargo build --verbose --target wasm32-unknown-unknown;
build-wasm-emscripten:
runs-on: ubuntu-latest
env:
Expand Down
1 change: 1 addition & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@

- `InteractionGroups` default value for `memberships` is now `GROUP_1` (#706)
- `ImpulseJointSet::get_mut` has a new parameter `wake_up: bool`, to wake up connected bodies.
- Removed unmaintained `instant` in favor of `web-time`. This effectively removes the `wasm-bindgen` transitive dependency as it's no longer needed.

## v0.22.0 (20 July 2024)

Expand Down
5 changes: 2 additions & 3 deletions crates/rapier2d-f64/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,6 @@ simd-nightly = ["simba/portable_simd", "simd-is-enabled"]
# Do not enable this feature directly. It is automatically
# enabled with the "simd-stable" or "simd-nightly" feature.
simd-is-enabled = ["dep:vec_map"]
wasm-bindgen = ["instant/wasm-bindgen"]
serde-serialize = [
"nalgebra/serde-serialize",
"parry2d-f64/serde-serialize",
Expand All @@ -46,7 +45,7 @@ serde-serialize = [
]
enhanced-determinism = ["simba/libm_force", "parry2d-f64/enhanced-determinism"]
debug-render = []
profiler = ["dep:instant"] # Enables the internal profiler.
profiler = ["dep:web-time"] # Enables the internal profiler.

# Feature used for debugging only.
debug-disable-legitimate-fe-exceptions = []
Expand All @@ -66,7 +65,7 @@ required-features = ["dim2", "f64"]

[dependencies]
vec_map = { version = "0.8", optional = true }
instant = { version = "0.1", features = ["now"], optional = true }
web-time = { version = "1.1", optional = true }
num-traits = "0.2"
nalgebra = "0.33"
parry2d-f64 = "0.17.0"
Expand Down
5 changes: 2 additions & 3 deletions crates/rapier2d/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,6 @@ simd-nightly = ["simba/portable_simd", "simd-is-enabled"]
# Do not enable this feature directly. It is automatically
# enabled with the "simd-stable" or "simd-nightly" feature.
simd-is-enabled = ["dep:vec_map"]
wasm-bindgen = ["instant/wasm-bindgen"]
serde-serialize = [
"nalgebra/serde-serialize",
"parry2d/serde-serialize",
Expand All @@ -46,7 +45,7 @@ serde-serialize = [
]
enhanced-determinism = ["simba/libm_force", "parry2d/enhanced-determinism"]
debug-render = []
profiler = ["dep:instant"] # Enables the internal profiler.
profiler = ["dep:web-time"] # Enables the internal profiler.

# Feature used for debugging only.
debug-disable-legitimate-fe-exceptions = []
Expand All @@ -66,7 +65,7 @@ required-features = ["dim2", "f32"]

[dependencies]
vec_map = { version = "0.8", optional = true }
instant = { version = "0.1", features = ["now"], optional = true }
web-time = { version = "1.1", optional = true }
num-traits = "0.2"
nalgebra = "0.33"
parry2d = "0.17.0"
Expand Down
5 changes: 2 additions & 3 deletions crates/rapier3d-f64/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,6 @@ simd-nightly = [
# Do not enable this feature directly. It is automatically
# enabled with the "simd-stable" or "simd-nightly" feature.
simd-is-enabled = ["dep:vec_map"]
wasm-bindgen = ["instant/wasm-bindgen"]
serde-serialize = [
"nalgebra/serde-serialize",
"parry3d-f64/serde-serialize",
Expand All @@ -49,7 +48,7 @@ serde-serialize = [
]
enhanced-determinism = ["simba/libm_force", "parry3d-f64/enhanced-determinism"]
debug-render = []
profiler = ["dep:instant"] # Enables the internal profiler.
profiler = ["dep:web-time"] # Enables the internal profiler.

# Feature used for debugging only.
debug-disable-legitimate-fe-exceptions = []
Expand All @@ -69,7 +68,7 @@ required-features = ["dim3", "f64"]

[dependencies]
vec_map = { version = "0.8", optional = true }
instant = { version = "0.1", features = ["now"], optional = true }
web-time = { version = "1.1", optional = true }
num-traits = "0.2"
nalgebra = "0.33"
parry3d-f64 = "0.17.0"
Expand Down
5 changes: 2 additions & 3 deletions crates/rapier3d/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,6 @@ simd-nightly = [
# Do not enable this feature directly. It is automatically
# enabled with the "simd-stable" or "simd-nightly" feature.
simd-is-enabled = ["dep:vec_map"]
wasm-bindgen = ["instant/wasm-bindgen"]
serde-serialize = [
"nalgebra/serde-serialize",
"parry3d/serde-serialize",
Expand All @@ -49,7 +48,7 @@ serde-serialize = [
]
enhanced-determinism = ["simba/libm_force", "parry3d/enhanced-determinism"]
debug-render = []
profiler = ["dep:instant"] # Enables the internal profiler.
profiler = ["dep:web-time"] # Enables the internal profiler.

# Feature used for debugging only.
debug-disable-legitimate-fe-exceptions = []
Expand All @@ -69,7 +68,7 @@ required-features = ["dim3", "f32"]

[dependencies]
vec_map = { version = "0.8", optional = true }
instant = { version = "0.1", features = ["now"], optional = true }
web-time = { version = "1.1", optional = true }
num-traits = "0.2"
nalgebra = "0.33"
parry3d = "0.17.0"
Expand Down
2 changes: 1 addition & 1 deletion crates/rapier_testbed2d-f64/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,7 @@ needless_lifetimes = "allow"
nalgebra = { version = "0.33", features = ["rand", "glam027"] }
rand = "0.8"
rand_pcg = "0.3"
instant = { version = "0.1", features = ["web-sys", "now"] }
web-time = { version = "1.1" }
bitflags = "2"
num_cpus = { version = "1", optional = true }
wrapped2d = { version = "0.4", optional = true }
Expand Down
2 changes: 1 addition & 1 deletion crates/rapier_testbed2d/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,7 @@ needless_lifetimes = "allow"
nalgebra = { version = "0.33", features = ["rand", "glam027"] }
rand = "0.8"
rand_pcg = "0.3"
instant = { version = "0.1", features = ["web-sys", "now"] }
web-time = { version = "1.1" }
bitflags = "2"
num_cpus = { version = "1", optional = true }
wrapped2d = { version = "0.4", optional = true }
Expand Down
2 changes: 1 addition & 1 deletion crates/rapier_testbed3d-f64/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,7 @@ needless_lifetimes = "allow"
nalgebra = { version = "0.33", features = ["rand", "glam027"] }
rand = "0.8"
rand_pcg = "0.3"
instant = { version = "0.1", features = ["web-sys", "now"] }
web-time = { version = "1.1" }
bitflags = "2"
num_cpus = { version = "1", optional = true }
crossbeam = "0.8"
Expand Down
2 changes: 1 addition & 1 deletion crates/rapier_testbed3d/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,7 @@ needless_lifetimes = "allow"
nalgebra = { version = "0.33", features = ["rand", "glam027"] }
rand = "0.8"
rand_pcg = "0.3"
instant = { version = "0.1", features = ["web-sys", "now"] }
web-time = { version = "1.1" }
bitflags = "2"
glam = { version = "0.27", optional = true } # For Physx
num_cpus = { version = "1", optional = true }
Expand Down
47 changes: 29 additions & 18 deletions src/counters/mod.rs
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
//! Counters for benchmarking various parts of the physics engine.

use core::time::Duration;
use std::fmt::{Display, Formatter, Result};

pub use self::ccd_counters::CCDCounters;
Expand Down Expand Up @@ -76,11 +77,16 @@ impl Counters {
}
}

/// Total time spent for one of the physics engine.
pub fn step_time(&self) -> f64 {
/// Total time spent for one of the physics engine.
pub fn step_time(&self) -> Duration {
self.step_time.time()
}

/// Total time spent for one of the physics engine, in milliseconds.
pub fn step_time_ms(&self) -> f64 {
self.step_time.time_ms()
}

/// Notify that the custom operation has started.
pub fn custom_started(&mut self) {
if self.enabled {
Expand All @@ -96,10 +102,15 @@ impl Counters {
}

/// Total time of a custom event.
pub fn custom_time(&self) -> f64 {
pub fn custom_time(&self) -> Duration {
self.custom.time()
}

/// Total time of a custom event, in milliseconds.
pub fn custom_time_ms(&self) -> f64 {
self.custom.time_ms()
}

/// Set the number of constraints generated.
pub fn set_nconstraints(&mut self, n: usize) {
self.solver.nconstraints = n;
Expand Down Expand Up @@ -129,7 +140,7 @@ impl Counters {
}

macro_rules! measure_method {
($started:ident, $stopped:ident, $time:ident, $info:ident. $timer:ident) => {
($started:ident, $stopped:ident, $time_ms:ident, $info:ident. $timer:ident) => {
impl Counters {
/// Start this timer.
pub fn $started(&mut self) {
Expand All @@ -145,10 +156,10 @@ macro_rules! measure_method {
}
}

/// Gets the time elapsed for this timer.
pub fn $time(&self) -> f64 {
/// Gets the time elapsed for this timer, in milliseconds.
pub fn $time_ms(&self) -> f64 {
if self.enabled {
self.$info.$timer.time()
self.$info.$timer.time_ms()
} else {
0.0
}
Expand All @@ -160,63 +171,63 @@ macro_rules! measure_method {
measure_method!(
update_started,
update_completed,
update_time,
update_time_ms,
stages.update_time
);
measure_method!(
collision_detection_started,
collision_detection_completed,
collision_detection_time,
collision_detection_time_ms,
stages.collision_detection_time
);
measure_method!(
island_construction_started,
island_construction_completed,
island_construction_time,
island_construction_time_ms,
stages.island_construction_time
);
measure_method!(
solver_started,
solver_completed,
solver_time,
solver_time_ms,
stages.solver_time
);
measure_method!(ccd_started, ccd_completed, ccd_time, stages.ccd_time);
measure_method!(ccd_started, ccd_completed, ccd_time_ms, stages.ccd_time);
measure_method!(
query_pipeline_update_started,
query_pipeline_update_completed,
query_pipeline_update_time,
query_pipeline_update_time_ms,
stages.query_pipeline_time
);

measure_method!(
assembly_started,
assembly_completed,
assembly_time,
assembly_time_ms,
solver.velocity_assembly_time
);
measure_method!(
velocity_resolution_started,
velocity_resolution_completed,
velocity_resolution_time,
velocity_resolution_time_ms,
solver.velocity_resolution_time
);
measure_method!(
velocity_update_started,
velocity_update_completed,
velocity_update_time,
velocity_update_time_ms,
solver.velocity_update_time
);
measure_method!(
broad_phase_started,
broad_phase_completed,
broad_phase_time,
broad_phase_time_ms,
cd.broad_phase_time
);
measure_method!(
narrow_phase_started,
narrow_phase_completed,
narrow_phase_time,
narrow_phase_time_ms,
cd.narrow_phase_time
);

Expand Down
30 changes: 19 additions & 11 deletions src/counters/timer.rs
Original file line number Diff line number Diff line change
@@ -1,33 +1,36 @@
use std::fmt::{Display, Error, Formatter};
use std::{
fmt::{Display, Error, Formatter},
time::Duration,
};

/// A timer.
#[derive(Copy, Clone, Debug, Default)]
pub struct Timer {
time: f64,
time: Duration,
#[allow(dead_code)] // The field isn’t used if the `profiler` feature isn’t enabled.
start: Option<f64>,
start: Option<std::time::Instant>,
}

impl Timer {
/// Creates a new timer initialized to zero and not started.
pub fn new() -> Self {
Timer {
time: 0.0,
time: Duration::from_secs(0),
start: None,
}
}

/// Resets the timer to 0.
pub fn reset(&mut self) {
self.time = 0.0
self.time = Duration::from_secs(0)
}

/// Start the timer.
pub fn start(&mut self) {
#[cfg(feature = "profiler")]
{
self.time = 0.0;
self.start = Some(instant::now());
self.time = Duration::from_secs(0);
self.start = Some(web_time::Instant::now());
}
}

Expand All @@ -36,7 +39,7 @@ impl Timer {
#[cfg(feature = "profiler")]
{
if let Some(start) = self.start {
self.time += instant::now() - start;
self.time += web_time::Instant::now().duration_since(start);
}
self.start = None;
}
Expand All @@ -46,18 +49,23 @@ impl Timer {
pub fn resume(&mut self) {
#[cfg(feature = "profiler")]
{
self.start = Some(instant::now());
self.start = Some(web_time::Instant::now());
}
}

/// The measured time between the last `.start()` and `.pause()` calls.
pub fn time(&self) -> f64 {
pub fn time(&self) -> Duration {
self.time
}

/// The measured time in milliseconds between the last `.start()` and `.pause()` calls.
pub fn time_ms(&self) -> f64 {
self.time.as_secs_f64() * 1000.0
}
Vrixyz marked this conversation as resolved.
Show resolved Hide resolved
}

impl Display for Timer {
fn fmt(&self, f: &mut Formatter) -> Result<(), Error> {
write!(f, "{}s", self.time)
write!(f, "{}ms", self.time_ms())
}
}
Loading
Loading