@@ -163,6 +163,49 @@ async fn wait_for_images_ready(page: &Page) {
163163 page. evaluate ( script) . await . unwrap ( ) ;
164164}
165165
166+ async fn wait_for_audio_waveforms_ready ( page : & Page ) {
167+ let script = r#"
168+ (async () => {
169+ const api = window.__frameScript;
170+ if (api && typeof api.waitAudioWaveformsReady === "function") {
171+ await api.waitAudioWaveformsReady();
172+ }
173+ })()
174+ "# ;
175+ page. evaluate ( script) . await . unwrap ( ) ;
176+ }
177+
178+ async fn wait_for_psd_ready ( page : & Page ) {
179+ let script = r#"
180+ (async () => {
181+ const api = window.__frameScript;
182+ if (api && typeof api.waitPsdReady === "function") {
183+ await api.waitPsdReady();
184+ }
185+ })()
186+ "# ;
187+ page. evaluate ( script) . await . unwrap ( ) ;
188+ }
189+
190+ async fn wait_for_psd_frame ( page : & Page , frame : usize ) {
191+ let script = format ! (
192+ r#"
193+ (async () => {{
194+ const api = window.__frameScript;
195+ if (api && typeof api.waitPsdFrame === "function") {{
196+ try {{
197+ await api.waitPsdFrame({});
198+ }} catch (_e) {{
199+ // ignore
200+ }}
201+ }}
202+ }})()
203+ "# ,
204+ frame
205+ ) ;
206+ page. evaluate ( script) . await . unwrap ( ) ;
207+ }
208+
166209async fn wait_for_webgl_ready ( page : & Page ) {
167210 let script = r#"
168211 (async () => {
@@ -337,8 +380,10 @@ async fn main() -> Result<(), Box<dyn std::error::Error>> {
337380 let completed_clone = completed. clone ( ) ;
338381 let is_canceled_clone = is_canceled. clone ( ) ;
339382 tasks. push ( tokio:: spawn ( async move {
340- let profile_dir =
341- PathBuf :: from ( format ! ( "{}/profiles/profile-{:03}" , FRAME_DIRECTORY , worker_id) ) ;
383+ let profile_dir = PathBuf :: from ( format ! (
384+ "{}/profiles/profile-{:03}" ,
385+ FRAME_DIRECTORY , worker_id
386+ ) ) ;
342387
343388 let ( mut browser, mut handler) = spawn_browser_instance ( profile_dir, width, height)
344389 . await
@@ -361,7 +406,9 @@ async fn main() -> Result<(), Box<dyn std::error::Error>> {
361406 ffmpeg_low_memory_clone,
362407 )
363408 . await
364- . map_err ( |error| format ! ( "worker {worker_id}: failed to create ffmpeg writer: {error}" ) ) ?;
409+ . map_err ( |error| {
410+ format ! ( "worker {worker_id}: failed to create ffmpeg writer: {error}" )
411+ } ) ?;
365412
366413 let page = browser
367414 . new_page ( page_url)
@@ -373,6 +420,8 @@ async fn main() -> Result<(), Box<dyn std::error::Error>> {
373420 wait_for_frame_api ( & page) . await ;
374421 wait_for_animation_ready ( & page) . await ;
375422 wait_for_draw_text_ready ( & page) . await ;
423+ wait_for_audio_waveforms_ready ( & page) . await ;
424+ wait_for_psd_ready ( & page) . await ;
376425 wait_for_webgl_ready ( & page) . await ;
377426
378427 for frame in start..end {
@@ -389,9 +438,9 @@ async fn main() -> Result<(), Box<dyn std::error::Error>> {
389438 "# ,
390439 frame
391440 ) ;
392- page. evaluate ( js)
393- . await
394- . map_err ( |error| format ! ( "worker {worker_id}: setFrame eval failed: {error}" ) ) ?;
441+ page. evaluate ( js) . await . map_err ( |error| {
442+ format ! ( "worker {worker_id}: setFrame eval failed: {error}" )
443+ } ) ?;
395444
396445 wait_for_next_frame ( & page) . await ;
397446
@@ -410,10 +459,12 @@ async fn main() -> Result<(), Box<dyn std::error::Error>> {
410459 "# ,
411460 frame
412461 ) ;
413- page. evaluate ( script)
414- . await
415- . map_err ( |error| format ! ( "worker {worker_id}: waitCanvasFrame eval failed: {error}" ) ) ?;
462+ page. evaluate ( script) . await . map_err ( |error| {
463+ format ! ( "worker {worker_id}: waitCanvasFrame eval failed: {error}" )
464+ } ) ?;
416465
466+ wait_for_audio_waveforms_ready ( & page) . await ;
467+ wait_for_psd_frame ( & page, frame) . await ;
417468 wait_for_images_ready ( & page) . await ;
418469 wait_for_webgl_frame ( & page, frame) . await ;
419470
0 commit comments