Skip to content

【openscreen】編集プレビューの余分な待機と描画順序によるカクつきを改善する #9

Closed

Description

@nanameru

課題 / 目的

編集プレビューのカクつきを軽減する。利用者はローカルmacOS版利用者。

対象範囲 / 対象外

対象: native previewのフレーム取得間隔と非同期描画の順序。4Kエクスポートと録画素材は変更しない。

完了条件

  • フレーム取得遅延後に不要なrAF待機が追加されない。
  • bitmap描画を直列化し、古いフレームの後着描画を防ぐ。
  • 回帰テスト、型検査、lint、buildが成功する。実機未確認の場合は明記する。

実装計画 / テスト計画

  1. フレーム数ベースの間引きを経過時間ベースの最大60fps制御に変更。
  2. フレーム取得からbitmap描画完了までを1つの処理として管理。
  3. 遅延・非同期描画・unmountの回帰テストと既存テストを検証。

制約 / 停止条件

新しいsecret不要。ソース素材の不規則なフレーム間隔の修復は対象外。配布、merge、未保存データ破棄は行わない。重大な追加仕様が必要なら停止する。

ナレッジログ

直近録画は2880x1800、30.85秒、1024フレーム。最大フレーム間隔約0.87秒。ただし静止画面の省略の可能性がありコマ落ちとは断定しない。
現行previewはinFlight中のtickを数えず、完了後さらに1tickスキップする。createImageBitmap完了前にinFlightを解除しており描画順序も保証されない。
非UI修正なのでFigma工程は省略。

Beads TODO

  • Epic ID: herdr-cvl
  • GitHub Issue: #9
  • ゴールの正本: GitHub Issue
  • 実行TODOの正本: Beads
Beads ID TODO 状態 依存先
herdr-cvl.1 【openscreen】取得間隔と描画順序を修正して検証する open —

更新方法: 同じ計画JSONでSkill同梱の scripts/issue_to_beads.py --apply --write-issue を再実行する。

Activity

  1. nanameru commented on Sep 5, 2026

    @nanameru
    OwnerAuthor

    Closes #9

    編集プレビューはIPC待機後も追加でフレームを間引き、bitmap作成が並行すると古い画像が後から描かれる可能性がありました。経過時間ベースの最大60fps制御と、取得から描画完了までの直列処理に変更します。録画・書き出し画質の設定は変更しません。

    検証: 全体190ファイル・2259テスト成功(2 skipped)、型検査2種類成功、lint error 0 / 既存warning 15、build-vite成功。TC-013を追加。実アプリでプロジェクト再読込・再生進行・映像更新・一時停止を確認。実fps比較は未計測、シーク検証はユーザー操作検出により省略。

    ローカル統合版をbaseにしたDraft PRです。録画の不規則なフレーム間隔そのものはこの変更で復元できません。高解像度プレビューでの負荷は実機の追加評価が必要です。

  2. nanameru commented on Sep 5, 2026

    @nanameru
    OwnerAuthor

    ローカル更新完了: /Applications/OpenScreen.app にbuild-vite成果物を反映し、既存と同じ署名identityで再署名。元のネイティブ部品・依存関係・bundle IDを保持し、ElectronAsarIntegrityも更新。codesign --verify --deep --strict 成功。

    旧版退避先: /Applications/OpenScreen.pre-preview-20260906.app。録画素材とプロジェクトは削除していない。

    実機: 保存済みの30.9秒プロジェクトが再起動後も復元。再生時間0:03.8→0:11.6と画面更新、一時停止0:21.7を確認。シーク前にユーザー操作検出でUI操作終了。実fps改善率は未計測。

    Beads完了登録は embeddeddolt: store is read-only により失敗。GitHubとtest-boardの検証結果を正本とする。

  3. nanameru commented on Sep 5, 2026

    @nanameru
    OwnerAuthor

    追加調査: ユーザーから依然コマ送りに見えるとの報告。useNativePlaybackSyncが再生中のsourceTimeを等倍壁時計と比較し、100ms超でsetNativeTimeを発行していた。1.5倍速では約200msごとに誤った補正シークが発生し得る。native実測時計を使わない推定であるため、通常再生中の自動シークを廃止し、明示的なユーザーシークrequestIdだけを転送する。停止中のシークとクリップ変更のatomic切替は維持する。

    追加完了条件: 0.5/1/1.5/2倍速の通常tickでシーク0回、再生中のユーザーシークは1回、停止時は再同期。対象hookとshellの配線を回帰テスト・型検査・build・実機で検証する。

  4. nanameru commented on Sep 5, 2026

    @nanameru
    OwnerAuthor

    追補: 倍速再生中の誤った補正シークを廃止。明示的なユーザーシークIDをshellから転送し、停止中の同期を維持。回帰テスト5件成功、app/test TypeScript検査成功、lint error 0(既存warning15)。全体テストとbuildはディスク空き0.26GiB・swap約19GiBのため中止。今回の追加修正はアプリ未反映、実機未検証。TC-014に紐付け。再開点: 空き容量確保後build→署名済みアプリ更新→倍速再生・再生中シークを確認。

  5. nanameru commented on Sep 5, 2026

    @nanameru
    OwnerAuthor

    空き容量確保後の追加修正反映・検証

    • 追加修正コミット 566eeaf9 は push 済み。作業ツリーは clean。
    • npm run build-vite 成功。tsc -p tsconfig.test.json --noEmit 成功。npm run lint 成功(既存 warning 15、error 0)。
    • 最初の全体テストは Node 25 の Web Storage と jsdom の衝突(localStorage.getItem is not a function)で中止。テストコードを弱めず、NODE_OPTIONS=--no-experimental-webstorage npm test -- --maxWorkers=2 で再実行し、191ファイル・2264件成功、2件skip。
    • ローカルアプリの既存native部品と署名identityを保持して dist/dist-electron を更新。asar integrity更新・codesign --verify --deep --strict 成功。/Applications/OpenScreen.app に反映済み。旧版は /Applications/OpenScreen.pre-sync-20260906.app に退避。
    • 実機: 保存済み30.9秒の既存プロジェクト(1.5倍速領域あり)を開き、再生が3.8→16.1秒へ進行することを確認。停止中シーク8.9秒、再生再開9.6秒、再生中シーク11.0秒、その後23.8秒まで進行し映像も更新。録画素材や編集設定の変更なし。
    • Checker: 通常tickと明示seekRequestIdを区別し、停止時同期を維持。0.5/1/1.5/2倍速と明示シークの回帰テストが成功。実機FPSや音声同期の定量測定は未実施。素材由来の不規則フレーム間隔は修復していない。
    • 現在空き6.03GiB。npmキャッシュ整理後にビルド再開、追加のユーザーデータ削除なし。
    • GitHub checkはDiscord同期のみ成功。品質ゲートの証拠は上記ローカル実行。Draft PR 【openscreen】プレビュー再生の待機と描画順序を改善する #10 を維持し、merge・公開は行わない。Beadsは前回記録のDB書き込み制約が残る。
  6. nanameru commented on Sep 5, 2026

    @nanameru
    OwnerAuthor

    ユーザーの明示的なマージ承認を受け、PR #10 を local-issue-4-5-app へマージしました。merge commit: 04b88de。検証済みhead 566eeaf9と一致すること、競合なし、GitHub check成功を確認。前回のローカル品質ゲート2264件成功・build・型検査・lint・実機確認の記録を採用。ローカルアプリは既に同じ修正版を反映済み。公式upstreamへの変更、mainへの追加マージ、リリース公開、ブランチ削除は行っていません。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions