рдореИрдВ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдЙрдкрдХрд░рдгреЛрдВ рдкрд░ рдЗрдорд░реНрд╕рд┐рд╡ рдореЛрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп рдХрдо рдПрдлрдкреАрдПрд╕ рдореВрд▓реНрдпреЛрдВ рдХреЗ рдХрд╛рд░рдг рдХреА рдЬрд╛рдВрдЪ рдХреЛ рдЯреНрд░реИрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд░ рд░рд╣рд╛ рд╣реВрдВред
рдХреБрдЫ рдЬрд╛рдирдХрд╛рд░реА рдЬреЛ рдЙрдЬрд╛рдЧрд░ рд╣реБрдИ рд╣реИ:
рдУрдкрдирдПрдХреНрд╕рдЖрд░ рдПрдкреАрдЖрдИ рдХреЗ рд▓рд┐рдП рдорд╛рд░реНрдХрд░реЛрдВ рдХреЗ рд╕рд╛рде рдкреЗрдВрдЯ рдбреЗрдореЛ рдХрд╛ рдПрдХ рдирд┐рд╢рд╛рди рдЗрди рджрд┐рдиреЛрдВ рдкреБрди: рдкреЗрд╢ рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдЙрд╕ рдЕрд╡рдзрд┐ рдХреЗ рджреМрд░рд╛рди рднреА рджрд┐рдЦрд╛рддрд╛ рд╣реИ:
рдЙрди рдбреЗрдЯрд╛ рдмрд┐рдВрджреБрдУрдВ рдХреЛ рджреЗрдЦрддреЗ рд╣реБрдП, рдореИрдВ рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рджреЛ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдЖрдЬрд╝рдорд╛рдиреЗ рдЬрд╛ рд░рд╣рд╛ рд╣реВрдБ:
https://github.com/servo/servo/pull/25343#issuecomment -567706735 рдореЗрдВ рдЗрдВрдЬрди рдореЗрдВ рд╡рд┐рднрд┐рдиреНрди рд╕реНрдерд╛рдиреЛрдВ рдкрд░ рд╕рдВрджреЗрд╢ рднреЗрдЬрдиреЗ рдХреЗ рдкреНрд░рднрд╛рд╡ рдХреА рдЕрдзрд┐рдХ рдЬрд╛рдВрдЪ рд╣реИред рдпрд╣ рдХрд┐рд╕реА рднреА рд╕реНрдкрд╖реНрдЯ рдЙрдВрдЧрд▓рд┐рдпреЛрдВ рдХреЛ рдЗрдВрдЧрд┐рдд рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╕реБрдЭрд╛рд╡ рджреЗрддрд╛ рд╣реИ рдХрд┐ рдЕрдзрд┐рдХ рд╕рдЯреАрдХ рдорд╛рдк рд▓рд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред
Gl::Finish рдЙрдкрдпреЛрдЧ https://github.com/pcwalton/surfman/blob/6705a9aaa8f33ac1324fdb1913242800e68c7720/surfman/src/platform/windows/angle/context.rs#L259 -L266 рд╕реЗ рдЖрддрд╛ рд╣реИред
Gl::Finish to gl::Flush рдмрджрд▓рдирд╛ ~15->30 рд╕реЗ рдлреНрд░реИрдорд░реЗрдЯ рдХреЛ рдмрдврд╝рд╛ рджреЗрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдлреНрд░реЗрдо рд╕рд╛рдордЧреНрд░реА рдореЗрдВ рдПрдХ рдЕрддреНрдпрдВрдд рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп рдЕрдВрддрд░рд╛рд▓ рд╣реИ рдЬреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рд╕рд┐рд░ рдХреА рдЧрддрд┐ рдХреЛ рджрд░реНрд╢рд╛рддрд╛ рд╣реИ, рдЬрд┐рд╕рд╕реЗ рд╡рд░реНрддрдорд╛рди рдлреНрд░реЗрдо рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рд╕рд┐рд░ рдХрд╛ рдЕрдиреБрд╕рд░рдг рдХрд░рддрд╛ рд╣реИред рдЗрд╕реА рдмреАрдЪред
рдХреБрдВрдЬреА рд╡рд╛рд▓реЗ рдореНрдпреВрдЯреЗрдХреНрд╕ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ ANGLE рдореЗрдВ рдЙрди рдХрд╛рд░рдгреЛрдВ рд╕реЗ рдЕрдХреНрд╖рдо рд╣реИрдВ рдЬреЛ рдореБрдЭреЗ рджреВрд░ рдХрд░рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди mozangle рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдЙрдиреНрд╣реЗрдВ рд╕рдХреНрд╖рдо рдХрд░рддрд╛ рд╣реИ (https://github.com/servo/mozangle/blob/706a9baaf8026c1a3cb6c67ba63aa5f4734264d0/build_data.rs#L175), рдФрд░ рдпрд╣реА рд╕рд░реНрдлрдореИрди рдХреЗ рд╕рд╛рде рдкрд░реАрдХреНрд╖рдг рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ . рдореИрдВ ANGLE рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░рдиреЗ рдЬрд╛ рд░рд╣рд╛ рд╣реВрдВ рдЬреЛ рдЙрдиреНрд╣реЗрдВ рд╕рдХреНрд╖рдо рдмрдирд╛рддрд╛ рд╣реИ рдФрд░ рджреЗрдЦрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ gl::рдлрд┐рдирд┐рд╢ рдХреЙрд▓ рд╕реЗ рдмрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реИ рдпрд╛ рдирд╣реАрдВред
рдХреА рдкреБрд╖реНрдЯрд┐! ANGLE рдореЗрдВ рдЬрдмрд░рди рдмрдВрдж рдореНрдпреВрдЯреЗрдХреНрд╕ рдореБрдЭреЗ рдкреЗрдВрдЯ рдбреЗрдореЛ рдореЗрдВ 25-30 FPS рджреЗрддрд╛ рд╣реИ рдмрд┐рдирд╛ рдХрд┐рд╕реА рдЕрдВрддрд░рд╛рд▓ рдХреЗ рдореБрджреНрджреЛрдВ рдХреЗ рдЬреЛ gl::Finish рдХреЙрд▓ рдХреЛ рдмрджрд▓рдиреЗ рдХреЗ рд╕рд╛рде рдЖрдпрд╛ рдерд╛ред
рдУрд╣, рдФрд░ рд▓рд╛рд░реНрд╕ рдХреА рдЬрд╛рдВрдЪ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдПрдХ рдФрд░ рдЬрд╛рдирдХрд╛рд░реА:
рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореИрдВрдиреЗ рдкреНрд░реЛрдлрд╛рдЗрд▓ рдореЗрдВ std::thread::local::LocalKey<surfman::egll::Egl>
рдХреА рдЙрдкрд╕реНрдерд┐рддрд┐ рдХреЛ рдЧрд▓рдд рд╕рдордЭрд╛ - рдореБрдЭреЗ рдкреВрд░рд╛ рдпрдХреАрди рд╣реИ рдХрд┐ рдЯреАрдПрд▓рдПрд╕ рдкрдврд╝рд╛ рдЧрдпрд╛ рд╕рдордп рдХрд╛ рдХреЗрд╡рд▓ рдПрдХ рдмрд╣реБрдд рдЫреЛрдЯрд╛ рд╣рд┐рд╕реНрд╕рд╛ рд╣реИ, рдФрд░ рдпрд╣ рдЯреАрдПрд▓рдПрд╕ рдмреНрд▓реЙрдХ рдХреЗ рдЕрдВрджрд░ рдмреБрд▓рд╛рдпрд╛ рдЧрдпрд╛ рдХрд╛рд░реНрдп рд╣реИ рдЬреИрд╕реЗ eglCreatePbufferFromClientBuffer рдФрд░ DXGIAcquireSync рдХрд┐ _рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ_ рд╕рдордп рд▓рдЧрддрд╛ рд╣реИред
рдЕрдлрд╕реЛрд╕ рдХреА рдмрд╛рдд рд╣реИ рдХрд┐ js.ion.enabled рдХреЛ рдЕрдХреНрд╖рдо рдХрд░рдиреЗ рд╕реЗ рдкреЗрдВрдЯ рдбреЗрдореЛ рдХреЗ FPS рдХреЛ рдиреБрдХрд╕рд╛рди рд╣реЛрддрд╛ рд╣реИ, рдЬреЛ рдЗрд╕реЗ 20-25 рддрдХ рд▓реЗ рдЬрд╛рддрд╛ рд╣реИред
рдбрд┐рд╡рд╛рдЗрд╕ рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдп: create_surface_texture_from_texture рдкреНрд░рддреНрдпреЗрдХ рдлреНрд░реЗрдо рдореЗрдВ рджреЛ рдмрд╛рд░ (рдкреНрд░рддреНрдпреЗрдХ рдЖрдВрдЦ рдХреЗ рд▓рд┐рдП рдкреНрд░рддреНрдпреЗрдХ d3d рдмрдирд╛рд╡рдЯ рдХреЗ рд▓рд┐рдП рдПрдХ рдмрд╛рд░), рдЬрдм openxr webxr рдбрд┐рд╡рд╛рдЗрд╕ рдмрдирд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рд╕рднреА рд╕реНрд╡реИрдкрдЪреЗрди рдмрдирд╛рд╡рдЯ рдХреЗ рд▓рд┐рдП рд╕рддрд╣ рдмрдирд╛рд╡рдЯ рдмрдирд╛рдирд╛ рд╕рдВрднрд╡ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдпрджрд┐ рдпрд╣ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рддреЛ рдпрд╣ рдЗрдорд░реНрд╕рд┐рд╡ рдореЛрдб рдХреЗ рджреМрд░рд╛рди рд╕реАрдкреАрдпреВ рдХреЗ рджреВрд╕рд░реЗ рд╕рдмрд╕реЗ рдмрдбрд╝реЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдореБрдЦреНрдп рдереНрд░реЗрдб рд╕реЗ рд╣рдЯрд╛ рджреЗрдЧрд╛ред
рд╕реНрдореГрддрд┐ рдЙрдкрдпреЛрдЧ рдХреЛ рдХрдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдФрд░ рд╡рд┐рдЪрд╛рд░: рдпрджрд┐ рд╣рдо bfcache рдХреЛ рдмрд╣реБрдд рдХрдо рд╕рдВрдЦреНрдпрд╛ рдкрд░ рд╕реЗрдЯ рдХрд░рддреЗ рд╣реИрдВ рддреЛ рдХреНрдпрд╛ рдХреЛрдИ рдкреНрд░рднрд╛рд╡ рдкрдбрд╝рддрд╛ рд╣реИ рддрд╛рдХрд┐ рдХрд┐рд╕реА рдПрдХ рдбреЗрдореЛ рдкрд░ рдиреЗрд╡рд┐рдЧреЗрдЯ рдХрд░рддреЗ рд╕рдордп рдореВрд▓ HL рд╣реЛрдордкреЗрдЬ рдкрд╛рдЗрдкрд▓рд╛рдЗрди рдмреЗрджрдЦрд▓ рд╣реЛ рдЬрд╛рдП?
рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╡реЗрдмрдПрдХреНрд╕рдЖрд░ рдкреИрдЪ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдПрдлрдкреАрдПрд╕ рдореЗрдВ рд╕реБрдзрд╛рд░ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдЫрд╡рд┐ рд╕реНрдерд┐рд░рддрд╛ рдореЗрдВ рд╕реБрдзрд╛рд░ рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдореБрдЭреЗ рджреЛ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдмрд┐рд▓реНрдб рдмрдирд╛рдиреЗ рдХреА рдЬрд╝рд░реВрд░рдд рд╣реИ рдЬрд┐рдиреНрд╣реЗрдВ рдореИрдВ рдЪреЗрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмреИрдХ рдЯреВ рдмреИрдХ рдЪрд▓рд╛ рд╕рдХрддрд╛ рд╣реВрдВред
diff --git a/webxr/openxr/mod.rs b/webxr/openxr/mod.rs
index 91c78da..a6866de 100644
--- a/webxr/openxr/mod.rs
+++ b/webxr/openxr/mod.rs
@@ -416,11 +416,30 @@ impl DeviceAPI<Surface> for OpenXrDevice {
}
fn wait_for_animation_frame(&mut self) -> Option<Frame> {
- if !self.handle_openxr_events() {
- // Session is not running anymore.
- return None;
+ loop {
+ if !self.handle_openxr_events() {
+ // Session is not running anymore.
+ return None;
+ }
+ self.frame_state = self.frame_waiter.wait().expect("error waiting for frame");
+
+ // XXXManishearth this code should perhaps be in wait_for_animation_frame,
+ // but we then get errors that wait_image was called without a release_image()
+ self.frame_stream
+ .begin()
+ .expect("failed to start frame stream");
+
+ if self.frame_state.should_render {
+ break;
+ }
+
+ self.frame_stream.end(
+ self.frame_state.predicted_display_time,
+ EnvironmentBlendMode::ADDITIVE,
+ &[],
+ ).unwrap();
}
- self.frame_state = self.frame_waiter.wait().expect("error waiting for frame");
+
let time_ns = time::precise_time_ns();
// XXXManishearth should we check frame_state.should_render?
let (_view_flags, views) = self
@@ -506,12 +525,6 @@ impl DeviceAPI<Surface> for OpenXrDevice {
0,
);
- // XXXManishearth this code should perhaps be in wait_for_animation_frame,
- // but we then get errors that wait_image was called without a release_image()
- self.frame_stream
- .begin()
- .expect("failed to start frame stream");
-
self.left_image = self.left_swapchain.acquire_image().unwrap();
self.left_swapchain
.wait_image(openxr::Duration::INFINITE)
@manishearth рдЗрд╕ рдкрд░ рдХреЛрдИ рд╡рд┐рдЪрд╛рд░? рдпрд╣ рдореЗрд░рд╛ рдкреНрд░рдпрд╛рд╕ рд╣реИ рдХрд┐ рдореИрдВ https://www.khronos.org/registry/OpenXR/specs/1.0/html/xrspec.html#Session рджреНрд╡рд╛рд░рд╛ рд╡рд░реНрдгрд┐рдд рдореЙрдбрд▓ рдХреЗ рдХрд░реАрдм
рд╣рд╛рдБ, рдпрд╣ рдЕрдЪреНрдЫрд╛ рд▓рдЧ рд░рд╣рд╛ рд╣реИред рдореЗрд░рд╛ рдорддрд▓рдм begin()
рдХреЛ waf рдореЗрдВ рдКрдкрд░ рд▓реЗ рдЬрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╣реИ, рдФрд░ рдореЗрд░рд╛ рдорд╛рдирдирд╛ тАЛтАЛрд╣реИ рдХрд┐ рдЯрд┐рдкреНрдкрдгреА рдореЗрдВ рдЙрд▓реНрд▓рд┐рдЦрд┐рдд рддреНрд░реБрдЯрд┐ рдЕрдм рдирд╣реАрдВ рд╣реЛрддреА рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕рдХрд╛ FPS рдкрд░ рднреА рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп рдкреНрд░рднрд╛рд╡ рдирд╣реАрдВ рдкрдбрд╝рддрд╛ рд╣реИ рдЗрд╕рд▓рд┐рдП рдореИрдВрдиреЗ рдЗрд╕рдХрд╛ рдкреАрдЫрд╛ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЕрднреА рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдЬреНрдпрд╛рджрд╛ред рдЕрдЧрд░ рдпрд╣ рд╕реНрдерд┐рд░рддрд╛ рдореЗрдВ рд╕реБрдзрд╛рд░ рдХрд░рддрд╛ рд╣реИ рддреЛ рдЕрдЪреНрдЫрд╛ рд╣реИ!
рдорд╣рддреНрд╡рдкреВрд░реНрдг рдЦреЛрдЬ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЦреБрд╢! рд╕рд░реНрдлрдореИрди рдХреЙрд▓ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдлреНрд░реЗрдо рдмрдЬрдЯ рдХрд╛ рдПрдХ рдЧреБрдЪреНрдЫрд╛ рд▓реЗрддреА рд╣реИ рд▓реЗрдХрд┐рди рдпрд╣ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдирд╛ рдереЛрдбрд╝рд╛ рдХрдард┐рди рд╣реИ рдХрд┐ рдХреНрдпрд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИ рдФрд░ рдХреНрдпрд╛ рдирд╣реАрдВред
рд╣рд╛рдВ, рдкреБрди: рдЕрдХреНрд╖рдо рдХрд░рдирд╛ js.ion.enabled
, рдпрд╣ рдХреЗрд╡рд▓ рдПрдХ рд▓рд╛рдн рд╣реЛрдиреЗ рдЬрд╛ рд░рд╣рд╛ рд╣реИ рдЬрдм рд╣рдо рд░реИрдо рднреВрдЦреЗ рд╣реИрдВ рдФрд░ рдЕрдкрдирд╛ рдЕрдзрд┐рдХрд╛рдВрд╢ рд╕рдордп рдЬреАрд╕реА'рдЗрдВрдЧ рдФрд░ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдкреБрди: рд╕рдВрдХрд▓рд┐рдд рдХрд░рдиреЗ рдореЗрдВ рдЦрд░реНрдЪ рдХрд░ рд░рд╣реЗ рд╣реИрдВред рдФрд░ рдЗрд╕рдореЗрдВ рдПрдХ рдирдП рдПрд╕рдПрдо рдХреЗ рд╕рд╛рде рд╕реБрдзрд╛рд░ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред IIRC, 66-рдпреБрдЧ рдХреЗ ARM64 рдмреИрдХрдПрдВрдб рдореЗрдВ рднреА рдЕрдкреЗрдХреНрд╖рд╛рдХреГрдд рдЦрд░рд╛рдм рдмреЗрд╕рд▓рд╛рдЗрди JIT рдФрд░ рджреБрднрд╛рд╖рд┐рдпрд╛ рдкреНрд░рджрд░реНрд╢рди рдерд╛; рд╣рдореЗрдВ рдЕрдкрдбреЗрдЯ рдХреЗ рд╕рд╛рде рдмреЛрд░реНрдб рднрд░ рдореЗрдВ рд╕реНрдкреАрдбрдЕрдк рджреЗрдЦрдирд╛ рдЪрд╛рд╣рд┐рдП, рд▓реЗрдХрд┐рди рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рд░реИрдо-рдЧрд╣рди рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдкрд░ред
рдХреБрдВрдЬреА рд╡рд╛рд▓реЗ рдореНрдпреВрдЯреЗрдХреНрд╕ рдХреЗ рд╕рд╛рде рдирдпрд╛ рдПрдВрдЧрд▓ рдкреИрдХреЗрдЬ рдкреНрд░рдХрд╛рд╢рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ред рдореИрдВ рдЗрд╕реЗ рдмрд╛рдж рдореЗрдВ рдЕрдкрдЧреНрд░реЗрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдкреБрд▓ рдЕрдиреБрд░реЛрдз рдмрдирд╛рдКрдВрдЧрд╛ред
рдореИрдВрдиреЗ рдПрдХреНрд╕рдЖрд░ рдбрд┐рд╡рд╛рдЗрд╕ рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝реЗрд╢рди рдХреЗ рджреМрд░рд╛рди рд╕рднреА рдУрдкрдирдПрдХреНрд╕рдЖрд░ рд╕реНрд╡реИрдкрдЪреИрди рдЫрд╡рд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рд╕рддрд╣ рдмрдирд╛рд╡рдЯ рдмрдирд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА, рд▓реЗрдХрд┐рди рд╕рддрд╣ рдкрд░ eglCreatePbufferFromClientBuffer рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдореЗрдВ рдЦрд░реНрдЪ рдХрд┐рдП рдЧрдП рдореБрдЦреНрдп рдереНрд░реЗрдб рдкрд░ рдЕрднреА рднреА рд╕рдордп рдХрд╛ рдПрдХ рдЧреБрдЪреНрдЫрд╛ рд╣реИ рдЬреЛ рд╣рдореЗрдВ рдкреНрд░рддреНрдпреЗрдХ рдлреНрд░реЗрдо рдореЗрдВ рд╡реЗрдмрдЧреНрд▓ рдереНрд░реЗрдб рд╕реЗ рдкреНрд░рд╛рдкреНрдд рд╣реЛрддрд╛ рд╣реИред рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдЙрди рд╕рддрд╣ рдмрдирд╛рд╡рдЯ рдХреЛ рдХреИрд╢ рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рддрд░реАрдХрд╛ рд╣реЛ рддрд╛рдХрд┐ рдпрджрд┐ рд╣рдо рд╡рд╣реА рд╕рддрд╣ рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВ рддреЛ рд╣рдо рдЙрдирдХрд╛ рдкреБрди: рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ ...
рд╕рдмрд╕реЗ рдмрдбрд╝рд╛ рдореБрдЦреНрдп рдереНрд░реЗрдб CPU рдЙрдкрдпреЛрдЧ render_animation_frame рд╕реЗ рдЖрддрд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рд╕реЗ рдЕрдзрд┐рдХрд╛рдВрд╢ OpenXR рд░рдирдЯрд╛рдЗрдо рдХреЗ рдЕрдВрддрд░реНрдЧрдд рдЖрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди BlitFramebuffer рдФрд░ FramebufferTexture2D рдХреЛ рдХреЙрд▓ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдкреНрд░реЛрдлрд╝рд╛рдЗрд▓ рдореЗрдВ рднреА рджрд┐рдЦрд╛рдИ рджреЗрддрд╛ рд╣реИред рдореБрдЭреЗ рдЖрд╢реНрдЪрд░реНрдп рд╣реИ рдХрд┐ рдХреНрдпрд╛ рдПрдХ рд╣реА рдмрдирд╛рд╡рдЯ рдореЗрдВ рджреЛрдиреЛрдВ рдЖрдВрдЦреЛрдВ рдХреЛ рдПрдХ рд╕рд╛рде рдлрд╣рд░рд╛рдиреЗ рдореЗрдВ рд╕реБрдзрд╛рд░ рд╣реЛрдЧрд╛? рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ https://github.com/microsoft/OpenXR-SDK-VisualStudio/#render -with-texture-array-and-vprt рдореЗрдВ рдЪрд░реНрдЪрд╛ рдХреА рдЧрдИ рдмрдирд╛рд╡рдЯ рд╕рд░рдгреА рд╕рд╛рдордЧреНрд░реА рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реИред
рд╣рдо рджреЛрдиреЛрдВ рдЖрдБрдЦреЗрдВ рдПрдХ рд╕рд╛рде рдлреВрдБрдХ рд╕рдХрддреЗ рд╣реИрдВ, рд╣рд╛рд▓рд╛рдБрдХрд┐ рдореЗрд░реА рд╕рдордЭ рдпрд╣ рд╣реИ рдХрд┐ рд░рдирдЯрд╛рдЗрдо
рддрдм рдЕрдкрдирд╛ рджреЛрд╖ рд╕реНрд╡рдпрдВ рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдмрдирд╛рд╡рдЯ рд╕рд░рдгреА рд╕рдмрд╕реЗ рддреЗрдЬрд╝ рддрд░реАрдХрд╛ рд╣реИред рд▓реЗрдХрд┐рди
рдПрдХ рд╢реЙрдЯ рдХреЗ рд▓рд╛рдпрдХ, рдкреНрд░реЛрдЬреЗрдХреНрд╢рди рд╡реНрдпреВ рдПрдкреАрдЖрдИ рдРрд╕рд╛ рдХрд░рдиреЗ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИред
рдореБрдЦреНрдп рдереНрд░реЗрдб рдПрдВрдЧрд▓ рдЯреНрд░реИрдлрд┐рдХ рдХреЗ рд▓рд┐рдП, рдЖрд░рдПрдПрдл рд▓реВрдк рдХреЛ рд░реЛрдХрддрд╛ рд╣реИ
рдХреИрдирд╡рд╛рд╕ рдХреЛ рдЧрдВрджрд╛ рдХрд░рдиреЗ рдореЗрдВ рдорджрдж? рдЕрдм рддрдХ рдЗрд╕рдиреЗ рдХреБрдЫ рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдЗрд╕рдХреЗ рд▓рд╛рдпрдХ рд╣реИ
рд╢реЙрдЯ, рдЖрджрд░реНрд╢ рд░реВрдк рд╕реЗ рд╣рдореЗрдВ рдореБрдЦреНрдп рдкрд░ рдХреБрдЫ рднреА рд▓реЗрдЖрдЙрдЯ/рдкреНрд░рддрд┐рдкрд╛рджрди рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП
рдзрд╛рдЧрд╛ред
рд╕реЛрдо, 6 рдЬрдирд╡рд░реА, 2020, 11:49 рдЕрдкрд░рд╛рд╣реНрди рдХреЛ рдЬреЛрд╢ рдореИрдереНрдпреВрдЬ рдиреЛрдЯрд┐рдлрд┐рдХреЗрд╢рди @github.com
рд▓рд┐рдЦрд╛ рдерд╛:
рд╕рдмрд╕реЗ рдмрдбрд╝рд╛ рдореБрдЦреНрдп рдереНрд░реЗрдб CPU рдЙрдкрдпреЛрдЧ render_animation_frame рд╕реЗ рдЖрддрд╛ рд╣реИ, рдХреЗ рд╕рд╛рде
рдЙрдирдореЗрдВ рд╕реЗ рдЕрдзрд┐рдХрд╛рдВрд╢ рдУрдкрдирдПрдХреНрд╕рдЖрд░ рд░рдирдЯрд╛рдЗрдо рдХреЗ рддрд╣рдд рд▓реЗрдХрд┐рди рдмреНрд▓рд┐рдЯрдлреНрд░реЗрдордмрдлрд░ рдХреЛ рдХреЙрд▓ рдХрд░рддрд╛ рд╣реИ рдФрд░
FramebufferTexture2D рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдкреНрд░реЛрдлрд╝рд╛рдЗрд▓ рдореЗрдВ рднреА рджрд┐рдЦрд╛рдИ рджреЗ рд░рд╣рд╛ рд╣реИред рдореИрдВ рд╕реЛрдЪрддрд╛ рд╣реВрдВ
рдЕрдЧрд░ рдПрдХ рд╣реА рдмрд╛рд░ рдореЗрдВ рджреЛрдиреЛрдВ рдЖрдБрдЦреЛрдВ рдХреЛ рдлрдБрд╕рд╛рдирд╛ рдПрдХ рд╕реБрдзрд╛рд░ рд╣реЛрдЧрд╛
рдмрдирд╛рд╡рдЯ? рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдЪрд░реНрдЪрд╛ рдХреА рдЧрдИ рдмрдирд╛рд╡рдЯ рд╕рд░рдгреА рд╕рд╛рдордЧреНрд░реА рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реЛ
рдореЗрдВ
https://github.com/microsoft/OpenXR-SDK-VisualStudio/#render -with-texture-array-and-vprt
.-
рдЖрдк рдЗрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ рдЖрдкрдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред
рдЗрд╕ рдИрдореЗрд▓ рдХрд╛ рд╕реАрдзреЗ рдЙрддреНрддрд░ рджреЗрдВ, рдЗрд╕реЗ GitHub рдкрд░ рджреЗрдЦреЗрдВ
https://github.com/servo/servo/issues/25425?email_source=notifications&email_token=AAMK6SBRH72JGZMXTUKOXETQ4NY37A5CNFSM4KCRI6AKYY3PNVWWK3TUL52HS4DFVREXG43VMVBW63LNMVXHJ0204P рдореБрджреНрджрд╛
рдпрд╛ рд╕рджрд╕реНрдпрддрд╛ рд╕рдорд╛рдкреНрдд рдХрд░реЗрдВ
https://github.com/notifications/unsubscribe-auth/AAMK6SECM6MDNZZ6Y7VL7SDQ4NY37ANCNFSM4KCRI6AA
.
рдХреИрдирд╡рд╛рд╕ рдХреЛ рдЧрдВрджрд╛ рдХрд░рдиреЗ рд╕реЗ рдХреЗрд╡рд▓ рдкреНрд░реЛрдлрд╝рд╛рдЗрд▓ рд╕рд╛рдл рд╣реЛрддреА рд╣реИ; рдпрд╣ рдПрдХ рд╕рд╛рд░реНрдердХ рдПрдлрдкреАрдПрд╕ рд╡реГрджреНрдзрд┐ рдХреА рдУрд░ рдирд╣реАрдВ рд▓реЗ рдЧрдпрд╛ред
рдореИрдВрдиреЗ рд╡реЗрдмрдЧреНрд▓ рдереНрд░реЗрдб рдХреЗ рд╕рд╛рде-рд╕рд╛рде рдУрдкрдирдПрдХреНрд╕рдЖрд░ рд╕реНрд╡реИрдкрдЪреЗрди рдмрдирд╛рд╡рдЯ рд╕реЗ рд╕рддрд╣реЛрдВ рдХреЗ рд▓рд┐рдП рд╕рддрд╣ рдмрдирд╛рд╡рдЯ рдХрд╛ рдХреИрд╢ рдмрдирд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА, рдФрд░ рдЬрдмрдХрд┐ eglCreatePbufferFromClientBuffer рд╕рдордп рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЧрд╛рдпрдм рд╣реЛ рдЧрдпрд╛, рдореБрдЭреЗ рдХреЛрдИ рд╕рд╛рд░реНрдердХ рдПрдлрдкреАрдПрд╕ рдкрд░рд┐рд╡рд░реНрддрди рджрд┐рдЦрд╛рдИ рдирд╣реАрдВ рджрд┐рдпрд╛ред
рдЗрдорд░реНрд╕рд┐рд╡ рдкрд╛рдЗрдкрд▓рд╛рдЗрди рдореЗрдВ рд╡рд┐рднрд┐рдиреНрди рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рд╕рдордп рдХреА рдЬрд╛рдирдХрд╛рд░реА (рдПрдордПрд╕ рдореЗрдВ рд╕рднреА рдорд╛рдк):
Name min max avg
raf queued 0.070833 14.010261 0.576834
<1ms: 393
<2ms: 28
<4ms: 5
<8ms: 1
<16ms: 2
<32ms: 0
32+ms: 0
raf transmitted 0.404270 33.649583 7.403302
<1ms: 123
<2ms: 43
<4ms: 48
<8ms: 48
<16ms: 95
<32ms: 69
32+ms: 3
raf wait 1.203500 191.064100 17.513593
<1ms: 0
<2ms: 17
<4ms: 98
<8ms: 95
<16ms: 48
<32ms: 69
32+ms: 101
raf execute 3.375000 128.663200 6.994588
<1ms: 0
<2ms: 0
<4ms: 5
<8ms: 351
<16ms: 70
<32ms: 1
32+ms: 2
raf receive 0.111510 8.564010 0.783503
<1ms: 353
<2ms: 52
<4ms: 18
<8ms: 4
<16ms: 1
<32ms: 0
32+ms: 0
raf render 2.372200 75.944000 4.219310
<1ms: 0
<2ms: 0
<4ms: 253
<8ms: 167
<16ms: 8
<32ms: 0
32+ms: 1
receive
: рдПрдХреНрд╕рдЖрд░ рдлреНрд░реЗрдо рд╕реЗ рдЖрдИрдкреАрд╕реА рд░рд╛рдЙрдЯрд░ рджреНрд╡рд╛рд░рд╛ рдкреНрд░рд╛рдкреНрдд рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХреНрд╕рдЖрд░ рдереНрд░реЗрдб рд╕реЗ рднреЗрдЬреА рдЬрд╛ рд░рд╣реА рдЬрд╛рдирдХрд╛рд░реА рдХрд╛ рд╕рдордп
queued
: IPC рд░рд╛рдЙрдЯрд░ рд╕реЗ рдлреНрд░реЗрдо рдХреА рдЬрд╛рдирдХрд╛рд░реА рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХрд╛ рд╕рдордп XRSession::raf_callback рд▓рд╛рдЧреВ рд╣реЛрдиреЗ рддрдХ
execute
: XRSession рд╕реЗ рд╕рдордп :: raf_callback рд╡рд┐рдзрд┐ рд╕реЗ рд▓реМрдЯрдиреЗ рддрдХ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЧрдпрд╛
transmitted
: рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдереНрд░реЗрдб рд╕реЗ рдирдП rAF рдХреЗ рд▓рд┐рдП рдЕрдиреБрд░реЛрдз рднреЗрдЬрдиреЗ рд╕реЗ рд▓реЗрдХрд░ XR рдереНрд░реЗрдб рддрдХ рдкреНрд░рд╛рдкреНрдд рд╣реЛрдиреЗ рддрдХ рдХрд╛ рд╕рдордп
render
: render_animation_frame
рдкрд░ рдХреЙрд▓ рдХрд░рдиреЗ рдФрд░ рд╕рддрд╣ рдХреЛ рд░реАрд╕рд╛рдпрдХрд▓ рдХрд░рдиреЗ рдореЗрдВ рд▓рдЧрдиреЗ рд╡рд╛рд▓рд╛ рд╕рдордп
wait
: wait_for_animation_frame
рджреНрд╡рд╛рд░рд╛ рд▓рд┐рдпрд╛ рдЧрдпрд╛ рд╕рдордп (рдЗрд╕ рдЕрдВрдХ рдореЗрдВ рдкрд╣рд▓реЗ рд╕реЗ рдкреИрдЪ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЬреЛ рдлреНрд░реЗрдо рдкрд░ рд▓реВрдк рдХрд░рддрд╛ рд╣реИ рдЬрд┐рд╕реЗ рдкреНрд░рд╕реНрддреБрдд рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП)
рдкреНрд░рддреНрдпреЗрдХ рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐ рдХреЗ рдЕрдВрддрд░реНрдЧрдд рд╕рддреНрд░ рдХреЗ рджреМрд░рд╛рди рдореВрд▓реНрдпреЛрдВ рдХрд╛ рд╡рд┐рддрд░рдг рд╣реЛрддрд╛ рд╣реИред
рдЙрд╕ рд╕рдордп рдХреА рдЬрд╛рдирдХрд╛рд░реА рд╕реЗ рдПрдХ рджрд┐рд▓рдЪрд╕реНрдк рдбреЗрдЯрд╛ рдмрд┐рдВрджреБ - transmitted
рд╢реНрд░реЗрдгреА рдЬрд┐рддрдирд╛ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдЙрд╕рд╕реЗ рдХрд╣реАрдВ рдЕрдзрд┐рдХ рд▓рдЧрддрд╛ рд╣реИред рдпрд╣ рдЖрд░рдПрдПрдл рдХреЙрд▓рдмреИрдХ рдирд┐рд╖реНрдкрд╛рджрди рдФрд░ рдПрдХреНрд╕рдЖрд░ рдереНрд░реЗрдб рдХреЛ рд╕рдВрджреЗрд╢ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдореЗрдВ рджреЗрд░реА рд╣реИ рдЬреЛ рдкреВрд░реНрдг рдлреНрд░реЗрдо рдХреЛ рдУрдкрдирдПрдХреНрд╕рдЖрд░ рдХреЗ рдмрдирд╛рд╡рдЯ рдореЗрдВ рдмреНрд▓рд┐рдЯ рдХрд░рддрд╛ рд╣реИред рдХрд╛рдлреА рднрд┐рдиреНрдирддрд╛ рд╣реИ, рдпрд╣ рд╕реБрдЭрд╛рд╡ рджреЗрддреЗ рд╣реБрдП рдХрд┐ рдпрд╛ рддреЛ рдореБрдЦреНрдп рдзрд╛рдЧрд╛ рдЕрдиреНрдп рдЪреАрдЬреЛрдВ рдХреЛ рдХрд░рдиреЗ рдореЗрдВ рд╡реНрдпрд╕реНрдд рд╣реИ, рдпрд╛ рдЗрд╕реЗ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕реЗ рдЬрдЧрд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
рдкрд┐рдЫрд▓реЗ рдбреЗрдЯрд╛ рдХреЛ рджреЗрдЦрддреЗ рд╣реБрдП, рдореИрдВ рдХрд▓ https://github.com/servo/webxr/issues/113 рдХреЛ рдкреБрдирд░реНрдЬреАрд╡рд┐рдд рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ, рдпрд╣ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдХреНрдпрд╛ рдпрд╣ рд╕рдВрдЪрд╛рд░ рд╕рдордп рдХреЛ рд╕рдХрд╛рд░рд╛рддреНрдордХ рд░реВрдк рд╕реЗ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░рддрд╛ рд╣реИред рдореИрдВ рдпрд╣ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдкрд╣рд▓реЗ рдкреНрд░реЛрдлрд╛рдЗрд▓рд░ рдореЗрдВ рдореБрдЦреНрдп рдзрд╛рдЧреЗ рдкрд░ рдкреНрд░рд╣рд╛рд░ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ рдХрд┐ рдХреНрдпрд╛ рдореБрдЭреЗ рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рдХреЛрдИ рд╡рд┐рдЪрд╛рд░ рдЖ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдХреИрд╕реЗ рдмрддрд╛рдпрд╛ рдЬрд╛рдП рдХрд┐ рдзрд╛рдЧрд╛ рдЕрдиреНрдп рдХрд╛рд░реНрдпреЛрдВ рдореЗрдВ рд╡реНрдпрд╕реНрдд рд╣реИ рдпрд╛ рд╕реЛ рд░рд╣рд╛ рд╣реИред
рдПрдХ рдЕрдиреНрдп рдбреЗрдЯрд╛ рдмрд┐рдВрджреБ:
swap buffer 1.105938 28.193698 2.154793
<1ms: 0
<2ms: 273
<4ms: 110
<8ms: 15
<16ms: 2
<32ms: 2
32+ms: 0
swap complete 0.053802 4.337812 0.295064
<1ms: 308
<2ms: 9
<4ms: 6
<8ms: 1
<16ms: 0
<32ms: 0
32+ms: 0
swap request 0.003333 24033027.355364 4662890.724805
<1ms: 268
<2ms: 49
<4ms: 5
<8ms: 0
<16ms: 0
<32ms: 1
32+ms: 79
рдпреЗ рд╕рдордп рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реИрдВ 1) рд╕реНрд╡реИрдк рдмрдлрд░ рд╕рдВрджреЗрд╢ рднреЗрдЬрдиреЗ рдореЗрдВ рджреЗрд░реА рдЬрдм рддрдХ рдХрд┐ рдЗрд╕реЗ рд╡реЗрдмрдЧреНрд▓ рдереНрд░реЗрдб рдореЗрдВ рд╕рдВрд╕рд╛рдзрд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, 2) рдмрдлрд╝рд░реНрд╕ рдХреЛ рд╕реНрд╡реИрдк рдХрд░рдиреЗ рдореЗрдВ рд▓рдЧрдиреЗ рд╡рд╛рд▓рд╛ рд╕рдордп, 3) рд╕рдВрджреЗрд╢ рднреЗрдЬрдиреЗ рдореЗрдВ рджреЗрд░реА рд╕реЗ рд╕рдВрдХреЗрдд рдорд┐рд▓рддрд╛ рд╣реИ рдХрд┐ рд╕реНрд╡реИрдкрд┐рдВрдЧ рддрдм рддрдХ рдкреВрд░реНрдг рд╣реИ рдЬрдм рддрдХ рдХрд┐ рдпрд╣ рдкреНрд░рд╛рдкреНрдд рдирд╣реАрдВ рд╣реЛ рдЬрд╛рддрд╛ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдзрд╛рдЧрд╛ред рдпрд╣рд╛рдВ рдХреБрдЫ рднреА рдЖрд╢реНрдЪрд░реНрдпрдЬрдирдХ рдирд╣реАрдВ рд╣реИ ( swap request
рд╢реНрд░реЗрдгреА рдореЗрдВ рдЙрди рдЕрдЬреАрдм рдЖрдЙрдЯрд▓реЗрд░реНрд╕ рдХреЛ рдЫреЛрдбрд╝рдХрд░, рд▓реЗрдХрд┐рди рд╡реЗ рд╕реЗрдЯрдЕрдк рдХреЗ рджреМрд░рд╛рди рдЗрдорд░реНрд╕рд┐рд╡ рд╕рддреНрд░ рдХреА рд╢реБрд░реБрдЖрдд рдореЗрдВ рд╣реЛрддреЗ рд╣реИрдВ), рд▓реЗрдХрд┐рди рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдмрдлрд░ рд╕реНрд╡реИрдкрд┐рдВрдЧ рд▓рдЧрд╛рддрд╛рд░ 1-4ms рдХреЗ рдмреАрдЪ рд╣реЛрддреА рд╣реИред
рдХреБрдЫ openxr рдирдореВрдирд╛ рдХреЛрдб рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкрдврд╝рдиреЗ рдХреЗ рдмрд╛рдж #117 рджрд╛рдпрд░ рдХрд┐рдпрд╛ рдФрд░ рдпрд╣ рджреЗрдЦрддреЗ рд╣реБрдП рдХрд┐ рдкреНрд░реЛрдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд▓реЛрдХреЗрдЯ_рд╡реНрдпреВ рдХреЙрд▓ рджрд┐рдЦрд╛рдИ рджреЗрддреЗ рд╣реИрдВред
рд╕рдВрднрд╡рддрдГ https://github.com/servo/webxr/issues/117
рдЙрд╕ рд╕рдордп рдХреА рдЬрд╛рдирдХрд╛рд░реА рд╕реЗ рдПрдХ рджрд┐рд▓рдЪрд╕реНрдк рдбреЗрдЯрд╛ рдмрд┐рдВрджреБ - рдкреНрд░реЗрд╖рд┐рдд рд╢реНрд░реЗрдгреА рдЬрд┐рддрдирд╛ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдЙрд╕рд╕реЗ рдХрд╣реАрдВ рдЕрдзрд┐рдХ рд▓рдЧрддрд╛ рд╣реИред рдпрд╣ рдЖрд░рдПрдПрдл рдХреЙрд▓рдмреИрдХ рдирд┐рд╖реНрдкрд╛рджрди рдФрд░ рдПрдХреНрд╕рдЖрд░ рдереНрд░реЗрдб рдХреЛ рд╕рдВрджреЗрд╢ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдореЗрдВ рджреЗрд░реА рд╣реИ рдЬреЛ рдкреВрд░реНрдг рдлреНрд░реЗрдо рдХреЛ рдУрдкрдирдПрдХреНрд╕рдЖрд░ рдХреЗ рдмрдирд╛рд╡рдЯ рдореЗрдВ рдмреНрд▓рд┐рдЯ рдХрд░рддрд╛ рд╣реИред рдХрд╛рдлреА рднрд┐рдиреНрдирддрд╛ рд╣реИ, рдпрд╣ рд╕реБрдЭрд╛рд╡ рджреЗрддреЗ рд╣реБрдП рдХрд┐ рдпрд╛ рддреЛ рдореБрдЦреНрдп рдзрд╛рдЧрд╛ рдЕрдиреНрдп рдЪреАрдЬреЛрдВ рдХреЛ рдХрд░рдиреЗ рдореЗрдВ рд╡реНрдпрд╕реНрдд рд╣реИ, рдпрд╛ рдЗрд╕реЗ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕реЗ рдЬрдЧрд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
transmitted
рдорд╛рди рдореЗрдВ рдмрджрд▓рд╛рд╡ рдлрд┐рд░ рд╕реЗ рдХрд░реЗрдВ, рдпрд╣ run_one_frame
рд╣рд┐рд╕реНрд╕реЗ рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдЯрд╛рдЗрдордЖрдЙрдЯ рдореЗрдВ рдЬреБрдбрд╝ рд╕рдХрддрд╛ рд╣реИ рдЬрдм рд╕рддреНрд░ рдореБрдЦреНрдп-рдереНрд░реЗрдб рдкрд░ рдЪрд▓ рд░рд╣рд╛ рд╣реЛ (рдЬреЛ рдпрд╣ рдЙрди рдорд╛рдкреЛрдВ рдореЗрдВ рд╣реИ, рд╣реИ рдирд╛?) , рджреЗрдЦреЗрдВ https://github.com/servo/webxr/blob/c6abf4c60d165ffc978ad2ebd6bcddc3c21698e1/webxr-api/session.rs#L275
рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЬрдм RenderAnimationFrame
рд╕рдВрджреЗрд╢ (рдХреЙрд▓рдмреИрдХ рдЪрд▓рд╛рдиреЗ рдХреЗ рдмрд╛рдж рд╕реНрдХреНрд░рд┐рдкреНрдЯ-рдереНрд░реЗрдб рджреНрд╡рд╛рд░рд╛ рднреЗрдЬрд╛ рдЧрдпрд╛) рдЯрд╛рдЗрдордЖрдЙрдЯ рд╕реЗ рдкрд╣рд▓реЗ рдкреНрд░рд╛рдкреНрдд рд╣реЛрддрд╛ рд╣реИ, рддреЛ рдЖрдк "рдлрд╛рд╕реНрдЯ рдкрд╛рде" рд╣рд┐рдЯ рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рдпрджрд┐ рдЯрд╛рдЗрдордЖрдЙрдЯ рдЫреВрдЯ рдЬрд╛рддрд╛ рд╣реИ рддреЛ рд╕рд░реНрд╡реЛ рджреВрд╕рд░реЗ рдореЗрдВ рдЪрд▓рд╛ рдЬрд╛рддрд╛ рд╣реИ perform_updates
рдХрд╛ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐, рдФрд░ "рдПрдХ рдФрд░ рдлреНрд░реЗрдо рдЪрд▓рд╛рдирд╛" рдЪрдХреНрд░ рдореЗрдВ рдХрд╛рдлреА рджреЗрд░ рд╕реЗ рд╣реЛрддрд╛ рд╣реИ, compositor.perform_updates
рд╣рд┐рд╕реНрд╕реЗ рдХреЗ рд░реВрдк рдореЗрдВ, рдЬрд┐рд╕реЗ servo.handle_events
рд╣рд┐рд╕реНрд╕реЗ рдХреЗ рд░реВрдк рдореЗрдВ рдХрд╛рдлреА рджреЗрд░ рд╕реЗ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред
рдПрдХреНрд╕рдЖрд░ рдХреЛ рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рдзрд╛рдЧреЗ рдореЗрдВ рд▓реЗ рдЬрд╛рдиреЗ рд╕реЗ рдХрдо, рдпрд╣ рджреЗрдЦрдиреЗ рд▓рд╛рдпрдХ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдЯрд╛рдЗрдордЖрдЙрдЯ рдХреЗ рд▓рд┐рдП рдЙрдЪреНрдЪ рдореВрд▓реНрдп рдФрд╕рдд рдореВрд▓реНрдп рдореЗрдВ рд╕реБрдзрд╛рд░ рдХрд░рддрд╛ рд╣реИ (рд╣рд╛рд▓рд╛рдВрдХрд┐ рдпрд╣ рд╕рд╣реА рд╕рдорд╛рдзрд╛рди рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдореБрдЦреНрдп-рдереНрд░реЗрдб рдкрд░ рдЕрдиреНрдп рдЖрд╡рд╢реНрдпрдХ рд╕рд╛рдорд╛рди рдХреЛ рднреВрдЦрд╛ рдХрд░ рд╕рдХрддрд╛ рд╣реИ)ред
рдореИрдВрдиреЗ https://github.com/servo/webxr/issues/113 рдореЗрдВ рдореБрдЦреНрдп рдереНрд░реЗрдб рд╕реЗ openxr рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдкрд░ рдкреНрд░рдЧрддрд┐ рдХреА рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореИрдВ рдЕрдЧрд▓реЗ рд╕рдкреНрддрд╛рд╣ рдЙрд╕ рдХрд╛рд░реНрдп рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдФрд░ рдорд╛рдк рд▓реЗрдиреЗ рдЬрд╛ рд░рд╣рд╛ рд╣реВрдВред
рдбрд┐рд╡рд╛рдЗрд╕ рд╕реЗ рдЙрдкрдпреЛрдЧреА рдкреНрд░реЛрдлрд╛рдЗрд▓ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреА рддрдХрдиреАрдХ:
rustflags = "-C force-frame-pointers=yes"
Files
рдЯреИрдм рдХреЗ рд░реВрдк рдореЗрдВ рдХрд░реЗрдВ--features profilemozjs
рд╕рд╛рде рдирд┐рд░реНрдорд╛рдг рдХрд░реЗрдВрдпреЗ рдирд┐рд╢рд╛рди (рдбрд┐рд╡рд╛рдЗрд╕ рдкреЛрд░реНрдЯрд▓ рдореЗрдВ "рд╕реНрдЯрд╛рд░реНрдЯ рдЯреНрд░реЗрд╕" рд╕реЗ рдкреНрд░рд╛рдкреНрдд) рд╡рд┐рдВрдбреЛрдЬ рдкрд░рдлреЙрд░реНрдореЗрдВрд╕ рдПрдирд╛рд▓рд╛рдЗрдЬрд░ рдЯреВрд▓ рдХреЗ рдЕрдВрджрд░ рдкреНрд░рдпреЛрдЧ рдХрд░рдиреЗ рдпреЛрдЧреНрдп рд╣реЛрдВрдЧреЗред рдпрд╣ рдЙрдкрдХрд░рдг рдереНрд░реЗрдб рдирд╛рдо рдирд╣реАрдВ рджрд┐рдЦрд╛рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЕрдзрд┐рдХрд╛рдВрд╢ CPU рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдереНрд░реЗрдб рд╕реНрдЯреИрдХ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдкрд╣рдЪрд╛рдирдиреЗ рдХреЗ рд▓рд┐рдП рд╕реАрдзреЗ рд╣реЛрддреЗ рд╣реИрдВред
рдХрд┐рд╕реА рд╡рд┐рд╢реЗрд╖ рдУрдкрдирдПрдХреНрд╕рдЖрд░ рдлреНрд░реЗрдо рдХреЗ рд╕рдордп рд╡рд┐рддрд░рдг рдХреЛ рдкреНрд░реЛрдлрд╛рдЗрд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП:
CPU рдЙрдкрдпреЛрдЧ рдХреЗ рд▓рд┐рдП рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рд╡рд┐рдЪрд╛рд░:
рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдереНрд░реЗрдб рдореЗрдВ рдереЛрдбрд╝рд╛ рдХрдо рдХрд╛рдо рдХрд░рдиреЗ рдХреА рдПрдХ рд╕рдВрднрд╛рд╡рдирд╛:
рдЗрдорд░реНрд╕рд┐рд╡ рдлреНрд░реЗрдо рдкреНрд░рджрд╛рди рдХрд░рддреЗ рд╕рдордп рдХрдо рдХрд╛рдо рдХрд░рдиреЗ рдХреА рдПрдХ рд╕рдВрднрд╛рд╡рдирд╛:
surface_origin_is_top_left
) рдЬрдмрдХрд┐ рдЗрдорд░реНрд╕рд┐рд╡ рдореЛрдб рдХреЛ рдмрд┐рдирд╛ рдХрд┐рд╕реА рдЯреНрд░рд╛рдВрд╕рдлреЙрд░реНрдореЗрд╢рди рдХреЗ рдмреНрд▓рд┐рдЯ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИhttps://bugzilla.mozilla.org/show_bug.cgi?id=1591346 рдкрд░ рдЖрдзрд╛рд░рд┐рдд рдФрд░ jrmuizel рдХреЗ рд╕рд╛рде рдмрд╛рдд рдХрд░рддреЗ рд╣реБрдП, рд╣рдореЗрдВ рдпрд╣ рдХрд░рдирд╛ рд╣реЛрдЧрд╛:
рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рдЫрд┐рдкрдХрд▓реА рдХреЛрдб: https://searchfox.org/mozilla-central/rev/c52d5f8025b5c9b2b4487159419ac9012762c40c/gfx/webrender_bindings/RenderCompositorANGLE.cpp#192
рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рдХреЛрдг рдХреЛрдб: https://github.com/google/angle/blob/df0203a9ae7a285d885d7bc5c2d4754fe8a59c72/src/libANGLE/renderer/d3d/d3d11/winrt/SwapChainPanelNativeWindow.cpp#L244
рд╡рд░реНрддрдорд╛рди рд╡рд╛рдЗрдк рд╢рд╛рдЦрд╛рдПрдВ:
рдЗрд╕рдореЗрдВ рдПрдХ xr-profile
рд╕реБрд╡рд┐рдзрд╛ рд╢рд╛рдорд┐рд▓ рд╣реИ рдЬреЛ рдореЗрд░реЗ рджреНрд╡рд╛рд░рд╛ рдкрд╣рд▓реЗ рдмрддрд╛рдП рдЧрдП рд╕рдордп рдбреЗрдЯрд╛ рдХреЛ рдЬреЛрдбрд╝рддреА рд╣реИ, рд╕рд╛рде рд╣реА рдЗрдорд░реНрд╕рд┐рд╡ рдореЛрдб рдореЗрдВ y-рдЙрд▓рдЯрд╛ рдкрд░рд┐рд╡рд░реНрддрди рдХреЛ рд╣рдЯрд╛рдиреЗ рдХреЗ рд▓рд┐рдП ANGLE рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХрд╛ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрдиред рдиреЙрди-рдЗрдорд░реНрд╕рд┐рд╡ рдореЛрдб рд╕рд╣реА рдврдВрдЧ рд╕реЗ рд░реЗрдВрдбрд░ рдХрд░ рд░рд╣рд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЗрдорд░реНрд╕рд┐рд╡ рдореЛрдб рдЙрд▓реНрдЯрд╛ рд╣реИред рдореЗрд░рд╛ рдорд╛рдирдирд╛ тАЛтАЛтАЛтАЛрд╣реИ рдХрд┐ рдореБрдЭреЗ рдЬреАрдПрд▓ рдХреЛрдб рдХреЛ рд░реЗрдВрдбрд░_рдПрдиреАрдореЗрд╢рди_рдлреНрд░реЗрдо рд╕реЗ рдирд┐рдХрд╛рд▓рдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИ рдФрд░ рдЬреАрдПрд▓ рд╕рддрд╣ рд╕реЗ рд╢реЗрдпрд░ рд╣реИрдВрдбрд▓ рдирд┐рдХрд╛рд▓рдиреЗ рдХреЗ рджреНрд╡рд╛рд░рд╛ рдЗрд╕реЗ рд╕реАрдзреЗ рдХреЙрдкреАрд╕рдмрд░реНрд╕рд╕реЛрд░реНрд╕ рд░реАрдЬрди рдХреЙрд▓ рд╕реЗ рдмрджрд▓рдирд╛ рд╣реЛрдЧрд╛ рддрд╛рдХрд┐ рдореИрдВ рдЗрд╕рдХреА рдбреА 3 рдбреА рдмрдирд╛рд╡рдЯ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХреВрдВред
рдПрдВрдЧрд▓ рд╡рд╛рдИ-рдЗрдирд╡рд░реНрдЬрди рдХрд╛рд░реНрдп рдХреЗ рд▓рд┐рдП https://github.com/servo/servo/issues/25582 рдлрд╛рдЗрд▓ рдХрд┐рдпрд╛ рдЧрдпрд╛; рдЙрд╕ рдХрд╛рд░реНрдп рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдФрд░ рдЕрджреНрдпрддрди рдЙрд╕ рдЕрдВрдХ рдореЗрдВ рд╣реЛрдВрдЧреЗред
рдЕрдЧрд▓рд╛ рдмрдбрд╝рд╛ рдЯрд┐рдХрдЯ рдЖрдЗрдЯрдо openxr webxr рдмреИрдХрдПрдВрдб рдореЗрдВ рдкреВрд░реА рддрд░рд╣ рд╕реЗ glBlitFramebuffer рдХреЙрд▓ рд╕реЗ рдмрдЪрдиреЗ рдХреЗ рддрд░реАрдХреЛрдВ рдХреА рдЬрд╛рдВрдЪ рдХрд░реЗрдЧрд╛ред рдпрд╣ рдЖрд╡рд╢реНрдпрдХ рд╣реИ:
рдпрд╣ рдореБрд╢реНрдХрд┐рд▓ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рд╕рд░реНрдлрдореИрди рдХреЗрд╡рд▓ рдЙрд╕ рд╕рдВрджрд░реНрдн рддрдХ рд▓реЗрдЦрди рдкрд╣реБрдВрдЪ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ рдЬрд┐рд╕рдиреЗ рд╕рддрд╣ рдмрдирд╛рдИ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдпрджрд┐ рд╕рддрд╣ рдУрдкрдирдПрдХреНрд╕рдЖрд░ рдереНрд░реЗрдб рджреНрд╡рд╛рд░рд╛ рдмрдирд╛рдИ рдЧрдИ рд╣реИ, рддреЛ рдпрд╣ рд╡реЗрдмрдЬреАрдПрд▓ рдереНрд░реЗрдб рджреНрд╡рд╛рд░рд╛ рд▓рд┐рдЦрдиреЗ рдпреЛрдЧреНрдп рдирд╣реАрдВ рд╣реЛрдЧрд╛ред https://github.com/pcwalton/surfman/blob/a515fb2f5d6b9e9b36ba4e8b498cdb4bea92d330/surfman/src/device.rs#L95 -L96
рдпрд╣ рдореЗрд░реЗ рд╕рд╛рде рд╣реЛрддрд╛ рд╣реИ - рдЕрдЧрд░ рд╣рдордиреЗ рд╡реЗрдмрдЧреНрд▓ рдереНрд░реЗрдб рдореЗрдВ рдУрдкрдирдПрдХреНрд╕рдЖрд░ рд░реЗрдВрдбрд░рд┐рдВрдЧ рдХрд┐рдпрд╛ рд╣реИ, рддреЛ рдУрдкрдирдПрдХреНрд╕рдЖрд░ рдХреЗ рдЯреЗрдХреНрд╕рдЪрд░ рдХреЛ рд╕реАрдзреЗ рд░реЗрдВрдбрд░ рдХрд░рдиреЗ рдХреЗ рдЖрд╕рдкрд╛рд╕ рдереНрд░реЗрдбрд┐рдВрдЧ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдореБрджреНрджреЛрдВ рдХрд╛ рдПрдХ рдЧреБрдЪреНрдЫрд╛ рдЕрдм рдХреЛрдИ рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ рд╣реЛрдЧреА (рдпрд╛рдиреАред рд╡рд┐рдЪрд╛рд░ рдХрд░рдирд╛:
https://www.khronos.org/registry/OpenXR/specs/1.0/html/xrspec.html#threading -behavior рдХреЛ рдкрдврд╝рдиреЗ рд╕реЗ рдкрддрд╛ рдЪрд▓рддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдбрд┐рдЬрд╝рд╛рдЗрди рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдЪрд╛рд▓ рдпрд╣ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рдпрд╣ рд╣рдорд╛рд░реЗ рдЧреИрд░-рдУрдкрдирдПрдХреНрд╕рдЖрд░ рдмреИрдХрдПрдВрдб рдХреЗ рд╕рд╛рде-рд╕рд╛рде рдУрдкрдирдПрдХреНрд╕рдЖрд░ рдХреЗ рд▓рд┐рдП рднреА рдХрд╛рдо рдХрд░ рд╕рдХрддрд╛ рд╣реИред
рдХрд▓реНрдкрдирд╛ рд╕реЗ: "рдЬрдмрдХрд┐ xrBeginFrame рдФрд░ xrEndFrame рдХреЛ рдПрдХ рд╣реА рдереНрд░реЗрдб рдкрд░ рдХреЙрд▓ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рд╕рд┐рдВрдХреНрд░рдирд╛рдЗрдЬрд╝реЗрд╢рди рдХреЛ рд╕рдВрднрд╛рд▓рдирд╛ рдЪрд╛рд╣рд┐рдП рдпрджрд┐ рдЙрдиреНрд╣реЗрдВ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдереНрд░реЗрдб рдкрд░ рдмреБрд▓рд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред"
рдлрд┐рд▓рд╣рд╛рд▓ рдПрдХреНрд╕рдЖрд░ рдбрд┐рд╡рд╛рдЗрд╕ рдереНрд░реЗрдбреНрд╕ рдФрд░ рд╡реЗрдмрдЬреАрдПрд▓ рдХреЗ рдмреАрдЪ рдХреЛрдИ рд╕реАрдзрд╛ рд╕рдВрдЪрд╛рд░ рдирд╣реАрдВ рд╣реИ, рдпрд╣ рд╕рдм рдпрд╛ рддреЛ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдпрд╛ рдЙрдирдХреА рд╕рд╛рдЭрд╛ рд╕реНрд╡реИрдк рд╢реНрд░реГрдВрдЦрд▓рд╛ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╣реЛрддрд╛ рд╣реИред рдореИрдВ рдПрдХ рд╕реНрд╡реИрдк-рдЪреЗрди рдПрдкреАрдЖрдИ рдкреНрд░рджрд╛рди рдХрд░рдиреЗ рдХрд╛ рд▓реБрддреНрдл рдЙрдард╛рдКрдВрдЧрд╛ рдЬреЛ рд╕рд░реНрдлрдореИрди рд╕реНрд╡реИрдк рдЪреЗрди рдпрд╛ рдУрдкрдирдПрдХреНрд╕рдЖрд░ рд╕реНрд╡реИрдк рдЪреЗрди рдХреЗ рдКрдкрд░ рдмреИрдарддрд╛ рд╣реИ, рдФрд░ рд╡реЗрдмрдЧреНрд▓-рдЯреВ-рдУрдкрдирдПрдХреНрд╕рдЖрд░ рд╕рдВрдЪрд╛рд░ рдХреЗ рд▓рд┐рдП рдЗрд╕рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░рддрд╛ рд╣реИред
рдкрд╣рд▓реЗ рдХреЗ рд╕рдордп рдХреЗ рдорд╛рдк рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рддрдЪреАрдд рдХреЗ рдиреЛрдЯреНрд╕:
* concerns about wait time - why?????
* figure out time spent in JS vs. DOM logic
* when does openxr give us should render=false frames - maybe related to previous frame taking too long
* are threads being scheduled on inappropriate cpus? - on magic leap, main thread (including weber) pinned to big core.
* when one of the measured numbers is large, is there correlation with other large numbers?
* probably should pin openxr thread, running deterministic code
* consider clearing after telling script that the swap is complete - measure if clear is taking significant time in swap operation
* consider a swap chain API operation - тАЬwait until a buffer swap occursтАЭ
- block waiting on swapchain
- block waiting on swapchain + timeout
- async????????
- a gc would look like a spike in script execution time
рдЙрди рдЬрд╛рдВрдЪреЛрдВ рдХреЛ рдЯреНрд░реИрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП #25735 рдлрд╝рд╛рдЗрд▓ рдХреА рдЧрдИ рдЬрд┐рдиреНрд╣реЗрдВ рдореИрдВ рд╕реАрдзреЗ openxr рдмрдирд╛рд╡рдЯ рдореЗрдВ рдкреНрд░рд╕реНрддреБрдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХрд░ рд░рд╣рд╛ рд╣реВрдВред
рдПрдХ рдЪреАрдЬ рдЬреЛ рд╣рдореЗрдВ рдХрд░рдиреА рдЪрд╛рд╣рд┐рдП рд╡рд╣ рдпрд╣ рд╣реИ рдХрд┐ рдбрд┐рд╡рд╛рдЗрд╕ рдкрд░ рдЕрдиреНрдп рдЗрдВрдЬрдиреЛрдВ рдХреЗ рд╕рд╛рде рд╕реНрдкрд╛рдЗрдбрд░рдореЛрдирдХреА рдХреА рддреБрд▓рдирд╛ рдХреИрд╕реЗ рдХреА рдЬрд╛рддреА рд╣реИред рдпрд╣рд╛рдВ рдХреБрдЫ рдбреЗрдЯрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХрд╛ рд╕рдмрд╕реЗ рдЖрд╕рд╛рди рддрд░реАрдХрд╛ рдПрдХ рд╕рд╛рдзрд╛рд░рдг рдЬреЗрдПрд╕ рдмреЗрдВрдЪрдорд╛рд░реНрдХ рдвреВрдВрдврдирд╛ рд╣реИ рдЬрд┐рд╕реЗ рд╕рд░реНрд╡реЛ рдЪрд▓рд╛ рд╕рдХрддрд╛ рд╣реИ, рдФрд░ рд╕рд░реНрд╡реЛ рдХреЗ рдкреНрд░рджрд░реНрд╢рди рдХреА рддреБрд▓рдирд╛ рдбрд┐рд╡рд╛рдЗрд╕ рдкрд░ рд╕реНрдерд╛рдкрд┐рдд рдПрдЬ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рд╕реЗ рдХрд░реЗрдВред рдЗрд╕рдХреЗ рдЕрддрд┐рд░рд┐рдХреНрдд, рд╣рдо рдЗрдорд░реНрд╕рд┐рд╡ рдореЛрдб рдореЗрдВ рдкреНрд░рд╡реЗрд╢ рдХрд┐рдП рдмрд┐рдирд╛ рджреЛрдиреЛрдВ рдмреНрд░рд╛рдЙрдЬрд╝рд░реЛрдВ рдореЗрдВ рдХреБрдЫ рдЬрдЯрд┐рд▓ рдмреЗрдмреАрд▓реЛрди рдбреЗрдореЛ рдкрд░ рдЬрд╛рдХрд░ рдпрд╣ рджреЗрдЦрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдХреНрдпрд╛ рдХреЛрдИ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдкреНрд░рджрд░реНрд╢рди рдЕрдВрддрд░ рд╣реИред рдпрд╣ рд╣рдореЗрдВ рдЖрдЧрд╛рдореА рд╕реНрдкрд╛рдЗрдбрд░рдордВрдХреА рдЕрдкрдЧреНрд░реЗрдб рдХреЗ рд╕рд╛рде рддреБрд▓рдирд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдмреЗрдВрдЪрдорд╛рд░реНрдХ рднреА рджреЗрдЧрд╛ред
рдХреБрдЫ рдирдпрд╛ рдбреЗрдЯрд╛ред рдпрд╣ рдПрдВрдЧрд▓ рдЕрдкрдЧреНрд░реЗрдб рдХреЗ рд╕рд╛рде рд╣реИ, рд▓реЗрдХрд┐рди рдЖрдИрдкреАрд╕реА рд╡рд╛рд▓рд╛ рдирд╣реАрдВ рд╣реИред
$ python timing.py raw
Name min max mean
raf queued 0.056198 5.673125 0.694902
<1ms: 335
<2ms: 26
<4ms: 17
<8ms: 7
<16ms: 0
<32ms: 0
32+ms: 0
raf transmitted 0.822917 36.582083 7.658619
<1ms: 1
<2ms: 4
<4ms: 31
<8ms: 181
<16ms: 158
<32ms: 8
32+ms: 1
raf wait 1.196615 39.707709 10.256875
<1ms: 0
<2ms: 32
<4ms: 93
<8ms: 67
<16ms: 107
<32ms: 68
32+ms: 17
raf execute 3.078438 532.205677 7.752839
<1ms: 0
<2ms: 0
<4ms: 37
<8ms: 290
<16ms: 52
<32ms: 2
32+ms: 3
raf receive 0.084375 9.053125 1.024403
<1ms: 276
<2ms: 71
<4ms: 27
<8ms: 9
<16ms: 1
<32ms: 0
32+ms: 0
swap request 0.004115 73.939479 0.611254
<1ms: 369
<2ms: 10
<4ms: 5
<8ms: 0
<16ms: 0
<32ms: 0
32+ms: 2
raf render 5.706198 233.459636 9.241698
<1ms: 0
<2ms: 0
<4ms: 0
<8ms: 183
<16ms: 190
<32ms: 10
32+ms: 1
run_one_frame 7.663333 2631.052969 28.035143
<1ms: 0
<2ms: 0
<4ms: 0
<8ms: 3
<16ms: 157
<32ms: 185
32+ms: 41
swap buffer 0.611927 8.521302 1.580279
<1ms: 127
<2ms: 169
<4ms: 74
<8ms: 15
<16ms: 1
<32ms: 0
32+ms: 0
swap complete 0.046511 2.446302 0.215040
<1ms: 375
<2ms: 6
<4ms: 3
<8ms: 0
<16ms: 0
<32ms: 0
32+ms: 0
рд╕рдордп рдбреЗрдЯрд╛: https://gist.github.com/Manishearth/825799a98bf4dca0d9a7e55058574736
рдЗрд╕рдХрд╛ рдЕрдЪреНрдЫрд╛ рдбреЗрдЯрд╛ рд╡рд┐рдЬрд╝реБрдЕрд▓рд╛рдЗрдЬрд╝реЗрд╢рди рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реИред рдПрдХ рд╕реНрдЯреИрдХреНрдб рд▓рд╛рдЗрди рдЧреНрд░рд╛рдл рдЖрджрд░реНрд╢ рд▓рдЧрддрд╛ рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдпрд╣ рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп рд╣реИ рдХрд┐ run_one_frame рдкрд╣рд▓реЗ рд╕реЗ рдорд╛рдкреЗ рдЧрдП рдХрдИ рд╕рдордп рдХреЛ рдорд╛рдкрддрд╛ рд╣реИред рдЧреНрд░рд╛рдлрд╝ рдСрд░реНрдбрд░рд┐рдВрдЧ рдХреЗ рд╕рд╛рде рдлреАрд▓ рдХрд░рдирд╛ рдФрд░ рдЙрдирдХреЗ рдкреНрд░рднрд╛рд╡ рдХреЛ рдмреЗрд╣рддрд░ рдврдВрдЧ рд╕реЗ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдиреАрдЪреЗ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдХреЙрд▓рдо рд░рдЦрдирд╛ рдорджрджрдЧрд╛рд░ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдЖрдкрдХреЛ рдХреБрдЫ рдмрд╣реБрдд рдмрдбрд╝реЗ рдЖрдЙрдЯрд▓реЗрд░реНрд╕ рдХреЗ рдХрд╛рд░рдг рдХреБрдЫ рднреА рдЙрдкрдпреЛрдЧреА рдкрд╛рдиреЗ рдХреЗ рд▓рд┐рдП Y рдЕрдХреНрд╖ рдХреЛ рдЫреЛрдЯрд╛ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп рджрд┐рд▓рдЪрд╕реНрдк рдмрд╛рддреЗрдВ:
рд╡рд░реНрддрдорд╛рди рд╕реНрдерд┐рддрд┐: IPC рд╕реБрдзрд╛рд░реЛрдВ рдХреЗ рд╕рд╛рде, FPS рдЕрдм 55 рдХреЗ рдЖрд╕рдкрд╛рд╕ рдордБрдбрд░рд╛ рд░рд╣рд╛ рд╣реИред рдпрд╣ рдХрднреА-рдХрднреА рдПрдХ рдЧреБрдЪреНрдЫрд╛ рдХреЛ рд╣рд┐рд▓рд╛рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЖрдорддреМрд░ рдкрд░ 45 рд╕реЗ рдиреАрдЪреЗ рдирд╣реАрдВ рдЬрд╛рддрд╛ рд╣реИ, _except_ рд▓реЛрдб рдХреЗ рдмрд╛рдж рдкрд╣рд▓реЗ рдХреБрдЫ рд╕реЗрдХрдВрдб рдХреЗ рджреМрд░рд╛рди (рдЬрд╣рд╛рдБ рдпрд╣ 30 рддрдХ рдиреАрдЪреЗ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ), рдФрд░ рдЬрдм рдпрд╣ рдкрд╣рд▓реЗ рдПрдХ рд╣рд╛рде рджреЗрдЦрддрд╛ рд╣реИ (рдЬрдм рдпрд╣ рдиреАрдЪреЗ 20 рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ)ред
рдкреЗрдВрдЯ рдбреЗрдореЛ рдХреЗ рд▓рд┐рдП рдирдпрд╛ рд╣рд┐рд╕реНрдЯреЛрдЧреНрд░рд╛рдо ( рдХрдЪреНрдЪрд╛ рдбреЗрдЯрд╛ ):
Name min max mean
raf queued 0.113854 5.707917 0.441650
<1ms: 352
<2ms: 13
<4ms: 5
<8ms: 1
<16ms: 0
<32ms: 0
32+ms: 0
raf transmitted 0.546667 44.954792 6.886162
<1ms: 4
<2ms: 2
<4ms: 23
<8ms: 279
<16ms: 59
<32ms: 3
32+ms: 1
raf wait 1.611667 37.913177 9.441104
<1ms: 0
<2ms: 6
<4ms: 98
<8ms: 82
<16ms: 135
<32ms: 43
32+ms: 6
raf execute 3.336562 418.198541 7.592147
<1ms: 0
<2ms: 0
<4ms: 11
<8ms: 319
<16ms: 36
<32ms: 2
32+ms: 3
raf receive 0.119323 9.804167 0.806074
<1ms: 324
<2ms: 31
<4ms: 13
<8ms: 1
<16ms: 1
<32ms: 0
32+ms: 0
swap request 0.003646 79.236354 0.761324
<1ms: 357
<2ms: 9
<4ms: 2
<8ms: 0
<16ms: 0
<32ms: 0
32+ms: 3
raf render 5.844687 172.898906 8.131682
<1ms: 0
<2ms: 0
<4ms: 0
<8ms: 283
<16ms: 86
<32ms: 1
32+ms: 1
run_one_frame 8.826198 2577.357604 25.922205
<1ms: 0
<2ms: 0
<4ms: 0
<8ms: 0
<16ms: 176
<32ms: 174
32+ms: 22
swap buffer 0.708177 12.528906 1.415950
<1ms: 164
<2ms: 161
<4ms: 38
<8ms: 4
<16ms: 4
<32ms: 0
32+ms: 0
swap complete 0.042917 1.554740 0.127729
<1ms: 370
<2ms: 1
<4ms: 0
<8ms: 0
<16ms: 0
<32ms: 0
32+ms: 0
рд▓рдВрдмреА рджреМрдбрд╝ ( рдХрдЪреНрдЪрд╛ )ред рд╕реНрдЯрд╛рд░реНрдЯрдЕрдк рдордВрджреА рдХреЗ рдкреНрд░рднрд╛рд╡ рдХреЛ рдХрдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИред
рдирд╛рдо рдиреНрдпреВрдирддрдо рдЕрдзрд┐рдХрддрдо рдорд╛рдзреНрдп
raf рдХрддрд╛рд░рдмрджреНрдз 0.124896 6.356562 0.440674
<1ms: 629
<2ms: 13
<4ms: 5
<8ms: 1
<16ms: 0
<32ms: 0
32+рдПрдордПрд╕: 0
рдЖрд░рдПрдПрдл рдкреНрд░реЗрд╖рд┐рдд 0.640677 20.275104 6.944751
<1ms: 2
<2ms: 3
<4ms: 29
<8ms: 513
<16ms: 99
<32ms: 1
32+рдПрдордПрд╕: 0
рд░рд╛рдл рдкреНрд░рддреАрдХреНрд╖рд╛ 1.645886 40.955208 9.386255
<1ms: 0
<2ms: 10
<4ms: 207
<8ms: 114
<16ms: 236
<32ms: 65
32+ рдПрдордПрд╕: 15
рд░рд╛рдл рдирд┐рд╖реНрдкрд╛рджрди 3.090104 526.041198 6.226997
<1ms: 0
<2ms: 0
<4ms: 68
<8ms: 546
<16ms: 29
<32ms: 1
32+ рдПрдордПрд╕: 3
рдЖрд░рдПрдПрдл рдкреНрд░рд╛рдкреНрдд 0.203334 6.441198 0.747615
<1ms: 554
<2ms: 84
<4ms: 7
<8ms: 2
<16ms: 0
<32ms: 0
32+рдПрдордПрд╕: 0
рд╕реНрд╡реИрдк рдЕрдиреБрд░реЛрдз 0.003490 73.644322 0.428460
<1ms: 627
<2ms: 18
<4ms: 1
<8ms: 0
<16ms: 0
<32ms: 0
32+ рдПрдордПрд╕: 2
raf 5.450312 209.662969 8.055021
<1ms: 0
<2ms: 0
<4ms: 0
<8ms: 467
<16ms: 176
<32ms: 3
32+ рдПрдордПрд╕: 1
run_one_frame 8.417291 2579.454948 22.226204
<1ms: 0
<2ms: 0
<4ms: 0
<8ms: 0
<16ms: 326
<32ms: 290
32+ рдПрдордПрд╕: 33
рд╕реНрд╡реИрдк рдмрдлрд░ 0.658125 12.179167 1.378725
<1ms: 260
<2ms: 308
<4ms: 72
<8ms: 4
<16ms: 4
<32ms: 0
32+рдПрдордПрд╕: 0
рд╕реНрд╡реИрдк рдкреВрд░реНрдг 0.041562 5.161458 0.136875
<1ms: 642
<2ms: 3
<4ms: 1
<8ms: 1
<16ms: 0
<32ms: 0
32+рдПрдордПрд╕: 0
рд░реЗрдЦрд╛рдВрдХрди:
рд▓рдВрдмреА рджреМрдбрд╝:
рдЫреЛрдЯрд╛ рд░рди:
рдмрдбрд╝рд╛ рд╕реНрдкрд╛рдЗрдХ рддрдм рд╣реЛрддрд╛ рд╣реИ рдЬрдм рдореИрдВ рдЕрдкрдирд╛ рд╣рд╛рде рд╕реЗрдВрд╕рд░ рд░реЗрдВрдЬ рдореЗрдВ рд░рдЦрддрд╛ рд╣реВрдВред
рдЗрд╕ рдмрд╛рд░ рдореИрдВрдиреЗ рдкреНрд░рддреАрдХреНрд╖рд╛/run_one_frame рдмрд╛рд░ рдХреЛ рдКрдкрд░ рд░рдЦрд╛ рдХреНрдпреЛрдВрдХрд┐ рд╡реЗ рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рджрд╛рдВрддреЗрджрд╛рд░ рд╣реИрдВ, рдФрд░ рдРрд╕рд╛ рдЗрд╕рд▓рд┐рдП рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдУрдПрд╕ рд╣рдореЗрдВ рдереНрд░реЙрдЯрд▓рд┐рдВрдЧ рдХрд░ рд░рд╣рд╛ рд╣реИред
рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп рдмрд╛рддреЗрдВ:
рдмреЙрд▓рд╢реВрдЯрд░ рдХреЗ рд▓рд┐рдП рд╣рд╛рде рджреЗрдЦрдиреЗ рдФрд░ рдлрд┐рд░ рдбреНрд░реЙ рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рдХрд╛рд░рдг рдкреНрд░рджрд░реНрд╢рди рдореЗрдВ рдХрдореА рдЖрддреА рд╣реИред рд╢рд╛рдпрдж рдкреЗрдВрдЯ рдбреЗрдореЛ рдмрд╣реБрдд рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реИ рдЬрдм рд╡рд╣ рдкрд╣рд▓реА рдмрд╛рд░ рд╣рд╛рде рдХреА рдЫрд╡рд┐ рдмрдирд╛рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд░рддрд╛ рд╣реИ?
(рдпрд╣ рд╡реЗрдмрдПрдХреНрд╕рдЖрд░ рдЗрдирдкреБрдЯ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЗ рд╕рд╛рде рдЗрдВрдЯрд░реИрдХреНрдЯ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рдкреЗрдВрдЯ рдбреЗрдореЛ рднреА рд╣реЛ рд╕рдХрддрд╛ рд╣реИ)
@ рдордиреАрд╖рд╛рд░реНрде рдХреНрдпрд╛ рдЖрдк рд╕реНрдореГрддрд┐ рдЙрдкрдпреЛрдЧ рдХреЛ рднреА рдУрд╡рд░рд▓реЗ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЙрди рдШрдЯрдирд╛рдУрдВ рд╕реЗ рд╕рд╣рд╕рдВрдмрдВрдзрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ? рдЬреЗрдПрд╕ рдХреЛрдб рдкрд╣рд▓реА рдмрд╛рд░ рд╕рдВрдХрд▓рди рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЖрдк рдПрдХ рдЯрди рдирдП рдХреЛрдб рдореЗрдВ рдЧрд▓рддреА рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рднреМрддрд┐рдХ рд╕реНрдореГрддрд┐ рд╕реАрдорд╛рдУрдВ рдХреЗ рдЦрд┐рд▓рд╛рдл рдЪрд▓ рд░рд╣реЗ рд╣реИрдВ рдФрд░ рдЬреАрд╕реА рдХрд╛ рдПрдХ рдЧреБрдЪреНрдЫрд╛ рдЦрд░реНрдЪ рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ рдЖрдк рд╕реНрдореГрддрд┐ рджрдмрд╛рд╡ рджрдмрд╛рддреЗ рд╣реИрдВред рдореИрдВ рдЗрд╕реЗ рдЬреНрдпрд╛рджрд╛рддрд░ рдЧреИрд░-рддреБрдЪреНрдЫ рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдореЗрдВ рджреЗрдЦ рд░рд╣рд╛ рдерд╛ред рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ @nox рдХрд╛ SM рдЕрдкрдбреЗрдЯ рдорджрдж рдХрд░реЗрдЧрд╛, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдПрдХ рдЖрд░реНрдЯрд┐рдлреИрдХреНрдЯ рдерд╛ рдЬрд┐рд╕реЗ рд╣рдордиреЗ FxR Android рдкрд░ рдЗрд╕ SM рдмрд┐рд▓реНрдб рдореЗрдВ рджреЗрдЦрд╛ рдерд╛ред
рдореЗрд░реЗ рдкрд╛рд╕ рдореЗрдореЛрд░реА рдкреНрд░реЛрдлрд╛рдЗрд▓рд┐рдВрдЧ рдбреЗрдЯрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХрд╛ рдПрдХ рдЖрд╕рд╛рди рддрд░реАрдХрд╛ рдирд╣реАрдВ рд╣реИ рдЬрд┐рд╕реЗ рдПрдХреНрд╕рдЖрд░-рдкреНрд░реЛрдлрд╛рдЗрд▓рд┐рдВрдЧ рд╕рд╛рдордЧреНрд░реА рд╕реЗ рд╕рд╣рд╕рдВрдмрдВрдзрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рдореИрдВ рд╕рдВрднрд╛рд╡рд┐рдд рд░реВрдк рд╕реЗ рдореМрдЬреВрджрд╛ perf рдЯреВрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ рдФрд░ рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛ рд╕рдХрддрд╛ рд╣реВрдВ рдХрд┐ рдЖрдХрд╛рд░ рд╕рдорд╛рди рд╣реИ рдпрд╛ рдирд╣реАрдВред
@ рдордиреАрд╖рд╛рд░реНрде рдХреНрдпрд╛ рдПрдХреНрд╕рдЖрд░-рдкреНрд░реЛрдлрд╛рдЗрд▓рд┐рдВрдЧ рд╕рд╛рдорд╛рди рдЬреЗрдПрд╕ рдЬреАрд╕реА рдШрдЯрдирд╛рдУрдВ рдХреЛ рджрд┐рдЦрд╛рддрд╛ рд╣реИ (рдпрд╛ рдпрд╣ рджрд┐рдЦрд╛ рд╕рдХрддрд╛ рд╣реИ)? рдпрд╣ рдПрдХ рдЙрдЪрд┐рдд рдкреНрд░реЙрдХреНрд╕реА рд╣реЛ рд╕рдХрддрд╛ рд╣реИред
рдХрд┐рд╕реА рднреА рддрд░рд╣, рд╕реНрдЯрд╛рд░реНрдЯрдЕрдк рд╕реНрдкрд╛рдЗрдХреНрд╕ рдореЗрд░реА рдкреНрд░рд╛рдердорд┐рдХ рдЪрд┐рдВрддрд╛ рдирд╣реАрдВ рд╣реИ, рдореИрдВ рдкрд╣рд▓реЗ рд╕рдм рдХреБрдЫ _else_ 60fps рдкрд░ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред рдпрджрд┐ рдпрд╣ рд╕реНрдЯрд╛рд░реНрдЯрдЕрдк рдкрд░ рдПрдХ рдпрд╛ рджреЛ рд╕реЗрдХрдВрдб рдХреЗ рд▓рд┐рдП рдЬрд╛рдирджрд╛рд░ рд╣реИ рддреЛ рдпрд╣ рдХрдо рджрдмрд╛рд╡ рд╡рд╛рд▓реА рдЪрд┐рдВрддрд╛ рд╣реИред
рд╣рд╛рдВ, рдпрд╣ рджрд┐рдЦрд╛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐, рдХреБрдЫ рдмрджрд▓рд╛рд╡реЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред
@Manishearth рдкреНрд░рд╛рдердорд┐рдХрддрд╛рдУрдВ рдкрд░ рдкреВрд░реА рддрд░рд╣ рд╕рд╣рдордд! рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рдерд╛ рдХрд┐ рдЖрдк "рдХрд┐рдВрдХ рдХреЛ рдЕрдирдХрдВрдХ" рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣реЗ рдереЗ рдпрд╛ рд╕реНрдерд┐рд░ рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдбреНрд░рд╛рдЗрд╡ рдХрд░ рд░рд╣реЗ рдереЗред рдмрд╛рдж рдореЗрдВ рдЕрднреА рдФрд░ рдЕрдзрд┐рдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╕рд╣рдордд рд╣реИрдВред
рдирд╣реАрдВ, рдореИрдВ рдЬреНрдпрд╛рджрд╛рддрд░ рдЙрди рд╕рднреА рд╡рд┐рд╢реНрд▓реЗрд╖рдгреЛрдВ рдХреЛ рдиреЛрдЯ рдХрд░ рд░рд╣рд╛ рдерд╛ рдЬреЛ рдореИрдВ рдХрд░ рд╕рдХрддрд╛ рдерд╛ред
рдЫреЛрдЯреЗ рд░рди рдХреЗ рдЧреНрд░рд╛рдл рдХреЗ рдЕрдВрдд рдХреЗ рдкрд╛рд╕ рд╡реЗ рд╕реНрдкрд╛рдЗрдХреНрд╕ рдЬрд╣рд╛рдВ рдЯреНрд░рд╛рдВрд╕рдорд┐рд╢рди рдХрд╛ рд╕рдордп рднреА рдмрдврд╝рддрд╛ рд╣реИ: рдпрд╣реА рд╡рд╣ рд╕рдордп рдерд╛ рдЬрдм рдореИрдВ рдЕрдкрдирд╛ рд╕рд┐рд░ рдФрд░ рдбреНрд░рд╛рдЗрдВрдЧ рд▓реЗ рд░рд╣рд╛ рдерд╛, рдФрд░ рдПрд▓рди рдЪреАрдЬреЗрдВ рдХрд░рддреЗ рд╕рдордп рдПрдлрдкреАрдПрд╕ рдореЗрдВ рдмреВрдВрджреЛрдВ рдХреЛ рднреА рджреЗрдЦ рд░рд╣рд╛ рдерд╛, рдФрд░ рдУрдПрд╕ рдХреЛ рдЕрдиреНрдп рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░ рдард╣рд░рд╛рдпрд╛ . IPC рджреНрд╡рд╛рд░рд╛ рдЯреНрд░рд╛рдВрд╕рдорд┐рд╢рди рдЯрд╛рдЗрдо рд╕реНрдкрд╛рдЗрдХреНрд╕ рдкрд░ рдореЗрд░реЗ рдХреВрдмрдбрд╝ рдХреЛ рдареАрдХ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рд╡реЗ OS рджреНрд╡рд╛рд░рд╛ рдЕрдиреНрдп рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рдХрд╛рд░рдг рд╣реЛрддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рд╡рд╣рд╛рдВ рдХреНрдпрд╛ рд╣реЛ рд░рд╣рд╛ рд╣реЛред рдПрдХ рдСрдл-рдореЗрди-рдереНрд░реЗрдб рджреБрдирд┐рдпрд╛ рдореЗрдВ рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдпрд╣ рдмрд╣реБрдд рдЖрд╕рд╛рди рд╣реЛрдЧрд╛ред
рдЕрдЧрд░ рдЗрд╕ рдкрд░ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╡рд┐рдЪрд╛рд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рддреЛ рдореБрдЭреЗ рдЕрдирджреЗрдЦрд╛ рдХрд░реЗрдВ, рдХреНрдпрд╛ рдЖрдкрдиреЗ run_one_frame
рдХреЗ рдорд╛рдк рдХреЛ рдкреНрд░рддрд┐-рд╕рдВрджреЗрд╢-рд╕рдВрднрд╛рд▓рдиреЗ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рддреЛрдбрд╝рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪрд╛ рд╣реИ, рдФрд░ рд╕рд╛рде рд╣реА thread::sleep()
-ing рдЦрд░реНрдЪ рдХрд┐рдП рдЧрдП рд╕рдордп рдХреЛ рднреА рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪрд╛ рд╣реИ?
рдпрд╣ рддреАрди рдорд╛рдк рдмрд┐рдВрджреБрдУрдВ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рд▓рд╛рдпрдХ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ:
рдПрдХ рд░реИрдкрд┐рдВрдЧ https://github.com/servo/webxr/blob/68b024221b8c72b5b33a63441d63803a13eadf03/webxr-api/session.rs#L364
рдФрд░ рджреВрд╕рд░рд╛ рд░реИрдкрд┐рдВрдЧ https://github.com/servo/webxr/blob/2841497966d87bbd561f18ea66547dde9b13962f/webxr-api/lib.rs#L124 рд╕рдордЧреНрд░ рд░реВрдк рд╕реЗ,
рдФрд░ рдХреЙрд▓ рдХреЛ рдХреЗрд╡рд▓ thread::sleep
рд░реИрдк рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рднреАред
рдЬрд╣рд╛рдВ рддрдХ recv_timeout
, рдпрд╣ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдкреБрдирд░реНрд╡рд┐рдЪрд╛рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред
рдореБрдЭреЗ рдЯрд╛рдЗрдордЖрдЙрдЯ рдХреА рдЙрдкрдпреЛрдЧрд┐рддрд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рддрд░реНрдХ рдХрд░рдирд╛ рдХреБрдЫ рдХрдард┐рди рд▓рдЧрддрд╛ рд╣реИред рдЪреВрдВрдХрд┐ рдЖрдк рд░реЗрдВрдбрд░ рдХрд┐рдП рдЧрдП рдлреНрд░реЗрдо рдХреА рдЧрдгрдирд╛ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, frame_count
, рдпреВрдЬрд╝рдХреЗрд╕ "рд╢рд╛рдпрдж рдПрдХ рдпрд╛ рдХрдИ рд╕рдВрджреЗрд╢ рдХреЛ рд╣реИрдВрдбрд▓ рдХрд░рддрд╛ рд╣реИ рдЬреЛ рдлреНрд░реЗрдо рдХреЛ рд░реЗрдВрдбрд░ рдирд╣реАрдВ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рдкрд╣рд▓реЗ, рдПрдХ рдлреНрд░реЗрдо рдХреЛ рд░реЗрдВрдбрд░ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдЖрдЧреЗ рдмрдврд╝рдиреЗ рд╕реЗ рдмрдЪрддреЗ рд╣реБрдП рдореБрдЦреНрдп-рдзрд╛рдЧреЗ рдХрд╛ рдкреВрд░рд╛ рдЗрд╡реЗрдВрдЯ-рд▓реВрдк"?
рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдореБрдЭреЗ рдЗрд╕рдореЗрдВ рдкреНрд░рдпреБрдХреНрдд delay
рдХреА рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдЧрдгрдирд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреБрдЫ рд╕рдВрджреЗрд╣ рд╣реИрдВ, рдЬрд╣рд╛рдВ рд╡рд░реНрддрдорд╛рди рдореЗрдВ:
delay = timeout / 1000
рд╕реЗ рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИ, timeout
рд╕рд╛рде рд╡рд░реНрддрдорд╛рди рдореЗрдВ 5 рдПрдордПрд╕ . рд╕реЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИdelay = delay * 2;
рдкрд░ рджреЛрдЧреБрдирд╛ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИwhile delay < timeout
рд╕рд╛рде рдЪреЗрдХ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИредрддреЛ рд╕рдмрд╕реЗ рдЦрд░рд╛рдм рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдиреАрдВрдж рдХрд╛ рдХреНрд░рдо рдХреБрдЫ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реИ: 5micro -> 10 -> 20 -> 40 -> 80 -> 160 -> 320 -> 640 -> 1.28milli -> 2.56 рдорд┐рд▓реА -> 5.12 рдорд┐рд▓реА
рдЬрдм рдпрд╣ 5.12 рдорд┐рд▓реАрд╕реЗрдХрдВрдб рд╣рд┐рдЯ рдХрд░рддрд╛ рд╣реИ, рддреЛ рдЖрдк рд▓реВрдк рд╕реЗ рдмрд╛рд╣рд░ рд╣реЛ рдЬрд╛рдПрдВрдЧреЗ ( delay > timeout
), рдХреБрд▓ 5,115 рдорд┐рд▓реА рд╕реЗрдХрдВрдб рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рд╕рд╛рде рд╣реА рдкреНрд░рддреНрдпреЗрдХ sleep
рдмрд╛рдж рдереНрд░реЗрдб рдХреЛ рдЬрдЧрд╛рдиреЗ рдХреЗ рд▓рд┐рдП OS рдкрд░ рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░рдиреЗ рдореЗрдВ рдЬреЛ рднреА рдЕрддрд┐рд░рд┐рдХреНрдд рд╕рдордп рдмрд┐рддрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ
рддреЛ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╕рдорд╕реНрдпрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдЖрдк рдХреБрд▓ рдорд┐рд▓рд╛рдХрд░ 5ms рд╕реЗ рдЕрдзрд┐рдХ рд╕реЛ рд░рд╣реЗ рд╣реИрдВ, рдФрд░ рдореБрдЭреЗ рдпрд╣ рднреА рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдПрдХ рд╕рдВрджреЗрд╢ рдХреЗ рдмрд╛рдж рд╕реЗ 1 ms рд╕реЗ рдЕрдзрд┐рдХ (рдФрд░ рджреВрд╕рд░реА рдмрд╛рд░ 2.5 ms рд╕реЗ рдЕрдзрд┐рдХ) рдХреЗ рд▓рд┐рдП рджреЛ рдмрд╛рд░ рд╕реЛрдирд╛ рдПрдХ рдЕрдЪреНрдЫрд╛ рд╡рд┐рдЪрд╛рд░ рдирд╣реАрдВ рд╣реИред рдЙрд╕ рджреМрд░рд╛рди рдЕрдВрджрд░ рдЖ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЖрдк рдирд╣реАрдВ рдЙрдареЗрдВрдЧреЗред
рдореБрдЭреЗ рдкреВрд░рд╛ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЗрд╕реЗ рдХреИрд╕реЗ рд╕реБрдзрд╛рд░реЗрдВ, рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрдк рдПрдХ рд╕рдВрднрд╛рд╡рд┐рдд рд╕рдВрджреЗрд╢ рдХреЗ рд▓рд┐рдП рд╕реНрдкрд┐рди рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рдФрд░ рдЕрдВрдд рдореЗрдВ рдореБрдЦреНрдп рдИрд╡реЗрдВрдЯ-рд▓реВрдк рдХреЗ рдЕрдЧрд▓реЗ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдкрд░ рдЖрдЧреЗ рдмрдврд╝реЗрдВ рдпрджрд┐ рдХреБрдЫ рднреА рдЙрдкрд▓рдмреНрдз рдирд╣реАрдВ рд╣реИ (рдХреНрдпреЛрдВ рдмреНрд▓реЙрдХ рдирд╣реАрдВ рдХрд░реЗрдВ рдЖрд░рдИрд╡реА?)
рдЖрдк https://doc.rust-lang.org/std/thread/fn.yield_now.html рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрд╡рд┐рдЪ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЗрд╕ рдЖрд▓реЗрдЦ рдХреЛ рддрд╛рд▓реЗ рдкрд░ рджреЗрдЦрдХрд░, рдпрд╣ рд╣рд░ рдмрд╛рд░ yield
рдХреЙрд▓ рдХрд░рддреЗ рд╕рдордп рд▓рдЧрднрдЧ 40 рдмрд╛рд░ рдХрддрд╛рдИ рд▓рдЧрддрд╛ рд╣реИ , рдЗрд╖реНрдЯрддрдо рд╣реИ ("рд╕реНрдкрд┐рдирд┐рдВрдЧ" рдкреИрд░рд╛рдЧреНрд░рд╛рдл рджреЗрдЦреЗрдВ, рдЗрд╕рд╕реЗ рд╕реАрдзреЗ рд▓рд┐рдВрдХ рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛)ред рдЙрд╕рдХреЗ рдмрд╛рдж рдЖрдкрдХреЛ рдпрд╛ рддреЛ рд░рд┐рд╕реАрд╡рд░ рдкрд░ рдмреНрд▓реЙрдХ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП, рдпрд╛ рдХреЗрд╡рд▓ рдЗрд╡реЗрдВрдЯ-рд▓реВрдк рдХреЗ рд╡рд░реНрддрдорд╛рди рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдХреЗ рд╕рд╛рде рдЬрд╛рд░реА рд░рдЦрдирд╛ рдЪрд╛рд╣рд┐рдП (рдЪреВрдВрдХрд┐ рдпрд╣ рдореБрдЦреНрдп рдПрдореНрдмреЗрдбрд┐рдВрдЧ рдЗрд╡реЗрдВрдЯ-рд▓реВрдк рдХреЗ рдЕрдВрджрд░ рд╕рдм-рд▓реВрдк рдХреА рддрд░рд╣ рдЪрд▓ рд░рд╣рд╛ рд╣реИ)ред
(рдЬрд╛рд╣рд┐рд░ рд╣реИ, рдЕрдЧрд░ рдЖрдк рдХреЗ рд╕рд╛рде рдорд╛рдкрдиреЗ рдирд╣реАрдВ рдХрд░ рд░рд╣реЗ рд╣реИрдВ ipc
рдкрд░ рдКрдкрд░ рдУрд░ рд╕реЗ рдХрд░ рджрд┐рдпрд╛, recv_timeout
, рдЕрдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдЖрдк рдЕрднреА рднреА рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП CALLL рдХреЛ рдорд╛рдкрдиреЗ рдХреЗ рд▓рд┐рдП рдЪрд╛рд╣рддреЗ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ recv_timeout
рдкрд░ mpsc
рдЪреВрдВрдХрд┐ рдереНрд░реЗрдбреЗрдб рдЪреИрдирд▓ рдХреБрдЫ рдЖрдВрддрд░рд┐рдХ рдХрддрд╛рдИ/рдЙрдкрдЬ рдХрд░реЗрдЧрд╛ рдЬреЛ рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреЛ рднреА рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдФрд░ рдЪреВрдВрдХрд┐ рдЙрдкрд░реЛрдХреНрдд рдХрдИ рдЕрд╡рд╕рд░реЛрдВ рдкрд░ рдПрдХ рдЕрдЬреНрдЮрд╛рдд "рдЖрдИрдкреАрд╕реА рдлрд┐рдХреНрд╕" рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрдк рдЖрдИрдкреАрд╕реА рдХреЗ рд╕рд╛рде рдорд╛рдк рд░рд╣реЗ рд╣реИрдВ)ред
рдореБрдЭреЗ рдЕрдирджреЗрдЦрд╛ рдХрд░реЗрдВ рдпрджрд┐ рдЗрд╕реЗ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдорд╛рдирд╛ рдЧрдпрд╛ рдерд╛, рдХреНрдпрд╛ рдЖрдкрдиреЗ рдкреНрд░рддрд┐-рд╕рдВрджреЗрд╢-рд╕рдВрднрд╛рд▓ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ run_one_frame рдХреЗ рдорд╛рдк рдХреЛ рддреЛрдбрд╝рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪрд╛ рд╣реИ, рдФрд░ рд╕рдордп рд╡реНрдпрддреАрдд рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдереНрд░реЗрдб :: рд╕реНрд▓реАрдк () - рдЖрдИрдПрдирдЬреА рдХреЛ рднреА рд╕рдордп рджрд┐рдпрд╛ рд╣реИ?
рдпрд╣ рдкрд╣рд▓реЗ рд╣реА рдЯреВрдЯ рдЪреБрдХрд╛ рд╣реИ, рдкреНрд░рддреАрдХреНрд╖рд╛/рд░реЗрдВрдбрд░ рд╕рдордп рдареАрдХ рдпрд╣реА рд╣реИред Run_one_frame рдХреА рдПрдХ рдПрдХрд▓ рдЯрд┐рдХ рдПрдХ рд░реЗрдВрдбрд░, рдПрдХ рдкреНрд░рддреАрдХреНрд╖рд╛, рдФрд░ рдШрдЯрдирд╛рдУрдВ рдХреА рдПрдХ рдЕрдирд┐рд╢реНрдЪрд┐рдд рд╕рдВрдЦреНрдпрд╛ рдХреЛ рд╕рдВрднрд╛рд▓рд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ (рджреБрд░реНрд▓рдн)ред
recv_timeout рдорд╛рдк рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрдЪреНрдЫрд╛ рд╡рд┐рдЪрд╛рд░ рд╣реИ
рдЕрдлрд╕реЛрд╕ рдХреА рдмрд╛рдд рд╣реИ рдХрд┐ #25678 рдореЗрдВ рд╕реНрдкрд╛рдЗрдбрд░рдореЛрдирдХреА рдЕрдкрдЧреНрд░реЗрдб рдПрдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╕реБрдзрд╛рд░ рдирд╣реАрдВ рджрд┐рдЦрддрд╛ рд╣реИ - рд╕реАрдорд┐рдд рдореЗрдореЛрд░реА рдХреЛ рдЫреЛрдбрд╝рдХрд░ рд╣рд░ рдбреЗрдореЛ рдХрд╛ рдФрд╕рдд рдПрдлрдкреАрдПрд╕ рдХрдо рд╣реЛ рдЧрдпрд╛ рд╣реИ; рд╣рд┐рд▓ рд╡реИрд▓реА рдбреЗрдореЛ рдереЛрдбрд╝рд╛ рдКрдкрд░ рдЪрд▓рд╛ рдЧрдпрд╛ред рдЖрд░рдВрднреАрдХрд░рдг рддрд░реНрдХреЛрдВ рдореЗрдВ -Z gc-profile
рд╕рд╛рде рд╕рд░реНрд╡реЛ рдЪрд▓рд╛рдирд╛ рдорд╛рд╕реНрдЯрд░ рдФрд░ рд╕реНрдкрд╛рдЗрдбрд░рдореЛрдирдХреА рдЕрдкрдЧреНрд░реЗрдб рд╢рд╛рдЦрд╛ рдХреЗ рдмреАрдЪ рдЬреАрд╕реА рд╡реНрдпрд╡рд╣рд╛рд░ рдореЗрдВ рдХреЛрдИ рдЕрдВрддрд░ рдирд╣реАрдВ рджрд┐рдЦрд╛рддрд╛ рд╣реИ - рдЬреАрдПрд▓ рд╕рд╛рдордЧреНрд░реА рд▓реЛрдб рдФрд░ рдкреНрд░рджрд░реНрд╢рд┐рдд рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж рдХреЛрдИ рдЬреАрд╕реА рд░рд┐рдкреЛрд░реНрдЯ рдирд╣реАрдВ рдХреА рдЬрд╛рддреА рд╣реИред
рд╡рд┐рднрд┐рдиреНрди рд╢рд╛рдЦрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдорд╛рдк:
master:
- espilit: 14-16 fps
- paint: 39-45 fps
- ball shooter: 30-40 fps
- hill valley: 8 fps, 200mb free mem
- mansion: 10-14fps, 650mb free mem
master + single swapchain:
- espilit: 10-12 fps
- paint: 29-55 fps, 1.2gb free mem
- ball shooter: 25-35 fps, 1.3gb free mem
- hill valley: 6-7 fps, 200mb free mem
- mansion: 10-11 fps, 700mb free mem
texture sharing + ANGLE 2.1.19:
- espilit: 13-15 fps, 670mb free mem
- paint: 39-45 fps
- ball shooter: 30-37 fps, 1.3gb free mem
- hill valley: 9-10 fps, 188mb free mem
- mansion: 13-14 fps, 671mb free mem
smup:
- espilit: 11-13 fps, 730mb free mem
- paint: 25-42 fps, 1.1gb free mem
- ball shooter: 26-30 fps, 1.4gb free mem
- hill valley: 10-11 fps, 145mb
- mansion: 9-11fps, 680mb free mem
рд╕реНрдордк рдиреЗ рдкреНрд░рджрд░реНрд╢рди рдХреЛ рдФрд░ рдЦрд░рд╛рдм рдХрд░ рджрд┐рдпрд╛ ???
https://github.com/servo/servo/pull/25855#issuecomment -594203492 рд╕реЗ рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЗ рд╕рд╛рде, рджрд┐рд▓рдЪрд╕реНрдк рдкрд░рд┐рдгрд╛рдо рдпрд╣ рд╣реИ рдХрд┐ рдЖрдпрди рдЬреЗрдЖрдИрдЯреА рдХреЛ рдЕрдХреНрд╖рдо рдХрд░рдирд╛ 12 рдПрдлрдкреАрдПрд╕ рдкрд░ рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИ, рдФрд░ рдлрд┐рд░ рдХрдИ рд╕реЗрдХрдВрдб рдмрд╛рдж рдпрд╣ рдЕрдЪрд╛рдирдХ 1 рдПрдлрдкреАрдПрд╕ рддрдХ рдЯреИрдВрдХ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рд╡рд╣рд╛рдБ рд░рд╣рддрд╛ рд╣реИред
рдЙрди рдкреИрдЪ рдХреЗ рд╕рд╛рде рдХреБрдЫ рдорд╛рдк рдХрд┐рдпрд╛ред
рдкреЗрдВрдЯ рдкрд░, рдореБрдЭреЗ 60 рдПрдлрдкреАрдПрд╕ рдорд┐рд▓ рд░рд╣рд╛ рд╣реИ рдЬрдм рджреЗрдЦрдиреЗ рдореЗрдВ рдЬреНрдпрд╛рджрд╛ рд╕рд╛рдордЧреНрд░реА рдирд╣реАрдВ рд╣реИ, рдФрд░ рдЬрдм рдЦреАрдВрдЪреА рдЧрдИ рд╕рд╛рдордЧреНрд░реА рдХреЛ рджреЗрдЦрддреЗ рд╣реБрдП рдпрд╣ 50ish рдПрдлрдкреАрдПрд╕ рддрдХ рдЧрд┐рд░ рдЬрд╛рддрд╛ рд╣реИ (рдкреАрд▓реЗ рд╕реНрдкрд╛рдЗрдХреНрд╕ рддрдм рд╣реЛрддреЗ рд╣реИрдВ рдЬрдм рдореИрдВ рдЦреАрдВрдЪреА рдЧрдИ рд╕рд╛рдордЧреНрд░реА рдХреЛ рджреЗрдЦ рд░рд╣рд╛ рд╣реЛрддрд╛ рд╣реВрдВ)ред рдпрд╣ рдмрддрд╛рдирд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реИ рдХрд┐ рдХреНрдпреЛрдВ, рдЬреНрдпрд╛рджрд╛рддрд░ рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдУрдкрдирдПрдХреНрд╕рдЖрд░ рдереНрд░реЙрдЯрд▓рд┐рдВрдЧ рд╕реЗ рдкреНрд░рддреАрдХреНрд╖рд╛ рд╕рдордп рдкреНрд░рднрд╛рд╡рд┐рдд рд╣реЛ рд░рд╣рд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЕрдиреНрдп рдЪреАрдЬреЗрдВ рдЗрддрдиреА рдзреАрдореА рдирд╣реАрдВ рд╣реИрдВ рдХрд┐ рд╕рдорд╕реНрдпрд╛ рдкреИрджрд╛ рдХрд░ рд╕рдХреЗрдВред рд╕реНрд╡реИрдк рдЕрдиреБрд░реЛрдз рдХрд╛ рд╕рдордп рдереЛрдбрд╝рд╛ рдзреАрдорд╛ рд╣реИред рдЖрд░рдПрдПрдл рдирд┐рд╖реНрдкрд╛рджрди рд╕рдордп рдкреНрд░рд╛рд░рдВрдн рдореЗрдВ рдзреАрдорд╛ рд╣реИ (рдпрд╣ рдкреНрд░рд╛рд░рдВрднрд┐рдХ "рдкрд╣рд▓реА рдмрд╛рд░ рдирд┐рдпрдВрддреНрд░рдХ рджреЗрдЦрд╛ рдЬрд╛рддрд╛ рд╣реИ" рдордВрджреА рд╣реИ) рд▓реЗрдХрд┐рди рдЙрд╕рдХреЗ рдмрд╛рдж рдпрд╣ рдХрд╛рдлреА рд╕реНрдерд┐рд░ рд╣реИред рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ openxr рд╕рд┐рд░реНрдл рд╣рдорд╛рд░рд╛ рдЧрд▓рд╛ рдШреЛрдВрдЯ рд░рд╣рд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдХрд╣реАрдВ рдФрд░ рдХреЛрдИ рдордВрджреА рджрд┐рдЦрд╛рдИ рдирд╣реАрдВ рджреЗ рд░рд╣реА рд╣реИ рдЬреЛ рдЗрд╕рдХрд╛ рдХрд╛рд░рдг рдмрдиреЗрдЧреАред
рдбреНрд░реИрдЧрд┐рдВрдЧ рдбреЗрдореЛ рдХреЗ рд▓рд┐рдП рдореЗрд░реЗ рдкрд╛рд╕ рдпрд╣реА рд╣реИред рд╡рд╛рдИ-рд╕реНрдХреЗрд▓ рд╕рдорд╛рди рд╣реИред рдпрд╣рд╛рдБ рдпрд╣ рдмрд╣реБрдд рдЕрдзрд┐рдХ рд╕реНрдкрд╖реНрдЯ рд╣реИ рдХрд┐ рдирд┐рд╖реНрдкрд╛рджрди рд╕рдордп рд╣рдореЗрдВ рдзреАрдорд╛ рдХрд░ рд░рд╣рд╛ рд╣реИред
рдзреНрдпрд╛рди рджреЗрдиреЗ рд╡рд╛рд▓реА рдПрдХ рдмрд╛рдд рдпрд╣ рд╣реИ рдХрд┐ рдореИрдВ #25837 рдХреЗ рд╕рд╛рде рдорд╛рдк рд▓реЗ рд░рд╣рд╛ рдерд╛, рдФрд░ рдпрд╣ рдкреНрд░рджрд░реНрд╢рди рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░ рд╕рдХрддрд╛ рд╣реИред
рдореИрдВ рдирд╣реАрдВ рдерд╛, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдореБрдЭреЗ рдЖрдкрдХреЗ рд╕рдорд╛рди рдкрд░рд┐рдгрд╛рдо рдорд┐рд▓ рд░рд╣реЗ рдереЗ
рд╕рд╛рдордЧреНрд░реА рдХреЛ рджреЗрдЦрддреЗ рд╕рдордп рдЙрд╕ рдХреНрд╖рдг рдХреЗ рд▓рд┐рдП рдкреНрд░рджрд░реНрд╢рди рдЯреВрд▓ рдЧреНрд░рд╛рдлрд╝ рдЬрд╣рд╛рдВ рдпрд╣ 60FPS рд╕реЗ 45FPS рддрдХ рдЬрд╛рддрд╛ рд╣реИ:
рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рджреЛрд╖ рдкреВрд░реА рддрд░рд╣ рд╕реЗ xrWaitFrame рдкрд░ рд╣реИ, рдЕрдиреНрдп рд╕рднреА рд╕рдордп рдПрдХ рд╕рд╛рде рдХрд╛рдлреА рдХрд░реАрдм рд╣реИрдВред xrBeginFrame рдЕрднреА рднреА рд▓рдЧрднрдЧ xrWaitFrame рдХреЗ рддреБрд░рдВрдд рдмрд╛рдж рд╣реИ, xrEndFrame xrBeginFrame (рджреЛрдиреЛрдВ рдорд╛рдорд▓реЛрдВ рдореЗрдВ) рдХреЗ рдмрд╛рдж 4us рд╣реИред рдЕрдЧрд▓рд╛ xrWaitFrame xrEndFrame рдХреЗ рд▓рдЧрднрдЧ рддреБрд░рдВрдд рдмрд╛рдж рд╣реИред рдЕрдВрддрд░ рдХреЗ рд▓рд┐рдП рдХреЗрд╡рд▓ рдмреЗрд╣рд┐рд╕рд╛рдм xrWaitFrame рдХреЗ рдХрд╛рд░рдг рд╣реЛрддрд╛ рд╣реИред
рдбреНрд░реИрдЧрд┐рдВрдЧ рдбреЗрдореЛ рдХреЗ рд╕рд╛рде, рдореБрдЭреЗ рдирд┐рдореНрди рдЯреНрд░реЗрд╕ рдорд┐рд▓рддрд╛ рд╣реИ:
рдпрд╣ рдЙрд╕реА рдкреИрдорд╛рдиреЗ рдХреЗ рд╕рд╛рде рдкреЗрдВрдЯ рдбреЗрдореЛ рд╣реИ:
рд╣рдо рдкреНрд░рд╛рд░рдВрдн/рд╕рдорд╛рдкреНрддрд┐ рдлрд╝реНрд░реЗрдо рдХреЗ рдмреАрдЪ рдзреАрдореЗ рд╣реИрдВ (рд╕рдмрд╕реЗ рддреЗрдЬрд╝ рдкрд░ 5ms рд╕реЗ 38ms рддрдХ!), рдФрд░ рдлрд┐рд░ рдкреНрд░рддреАрдХреНрд╖рд╛ рдлрд╝реНрд░реЗрдо рдереНрд░реЙрдЯрд▓рд┐рдВрдЧ рд╢реБрд░реВ рд╣реЛ рдЬрд╛рддреА рд╣реИред рдореИрдВрдиреЗ рдЕрднреА рддрдХ рдпрд╣ рдирд╣реАрдВ рдмрддрд╛рдпрд╛ рд╣реИ рдХрд┐ рдРрд╕рд╛ рдХреНрдпреЛрдВ рд╣реИ, рдореИрдВ рдЗрд╕рдХреЗ рд▓рд┐рдП рдХреЛрдб рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЬрд╛ рд░рд╣рд╛ рд╣реВрдБ рджреЛрдиреЛрдВред
рдбреНрд░реИрдЧрд┐рдВрдЧ рдбреЗрдореЛ рдзреАрдорд╛ рд╣реЛ рдЧрдпрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕рдХрд╛ рдкреНрд░рдХрд╛рд╢ рд╕реНрд░реЛрдд рдЫрд╛рдпрд╛ рдбрд╛рд▓рддрд╛ рд╣реИред рдЫрд╛рдпрд╛ рд╕рд╛рдордЧреНрд░реА рдЬреАрдПрд▓ рдкрдХреНрд╖ рдкрд░ рдХреА рдЬрд╛рддреА рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рд╣рдо рдЗрд╕реЗ рдЖрд╕рд╛рдиреА рд╕реЗ рдЧрддрд┐ рджреЗ рд╕рдХрддреЗ рд╣реИрдВ?
рдпрджрд┐ рдпрд╣ рдкреВрд░реА рддрд░рд╣ рд╕реЗ GLSL рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рддреЛ рд╣рдореЗрдВ рдХрдард┐рдирд╛рдЗрдпрд╛рдБ рд╣реЛ рд╕рдХрддреА рд╣реИрдВ; рдпрджрд┐ рдпрд╣ рд╡реЗрдмрдЬреАрдПрд▓ рдПрдкреАрдЖрдИ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╣рд░ рдлреНрд░реЗрдо рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рддреЛ рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрдерд╛рди рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред
рд╣рд╛рдБ рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╕рднреА рдЬреАрдПрд▓рдПрд╕рдПрд▓ рдХреА рддрд░рдл рд╣реИрдВ; рдЬрдм рдпрд╣ рдЖрддрд╛ рд╣реИ рдХрд┐ рдЫрд╛рдпрд╛ рдПрдкреАрдЖрдИ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рддреЛ рдореБрдЭреЗ рдХреЛрдИ рд╡реЗрдмрдЬреАрдПрд▓ рдХреЙрд▓ рдирд╣реАрдВ рджрд┐рдЦрд╛рдИ рджреЗ рд░рд╣реА рдереА, рдмрд╕ рдХреБрдЫ рдмрд┐рдЯреНрд╕ рдЬреЛ рд╢реЗрдбрд░реНрд╕ рдХреЛ рдкрд╛рд╕ рд╣реЛ рдЬрд╛рддреЗ рд╣реИрдВ
рдореЗрд░рд╛ рдорд╛рдирдирд╛ тАЛтАЛрд╣реИ рдХрд┐ рдЗрд╕реЗ рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ рд╕рдВрдмреЛрдзрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рд╣рдо рдЙрди рд╡реНрдпрдХреНрддрд┐рдЧрдд рдбреЗрдореЛ рдХреЗ рд▓рд┐рдП рд╕рдорд╕реНрдпрд╛рдПрдБ рджрд░реНрдЬ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬрд┐рдиреНрд╣реЗрдВ рдХрд╛рд░реНрдп рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА
рд╡рд░реНрддрдорд╛рди рд╕реНрдерд┐рддрд┐: IPC рд╕реБрдзрд╛рд░реЛрдВ рдХреЗ рд╕рд╛рде, FPS рдЕрдм 55 рдХреЗ рдЖрд╕рдкрд╛рд╕ рдордБрдбрд░рд╛ рд░рд╣рд╛ рд╣реИред рдпрд╣ рдХрднреА-рдХрднреА рдПрдХ рдЧреБрдЪреНрдЫрд╛ рдХреЛ рд╣рд┐рд▓рд╛рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЖрдорддреМрд░ рдкрд░ 45 рд╕реЗ рдиреАрдЪреЗ рдирд╣реАрдВ рдЬрд╛рддрд╛ рд╣реИ, _except_ рд▓реЛрдб рдХреЗ рдмрд╛рдж рдкрд╣рд▓реЗ рдХреБрдЫ рд╕реЗрдХрдВрдб рдХреЗ рджреМрд░рд╛рди (рдЬрд╣рд╛рдБ рдпрд╣ 30 рддрдХ рдиреАрдЪреЗ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ), рдФрд░ рдЬрдм рдпрд╣ рдкрд╣рд▓реЗ рдПрдХ рд╣рд╛рде рджреЗрдЦрддрд╛ рд╣реИ (рдЬрдм рдпрд╣ рдиреАрдЪреЗ 20 рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ)ред