-
Notifications
You must be signed in to change notification settings - Fork 309
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
複数エンジン対応: DEFAULT_ENGINE_INFOS
に登録されたエンジンのプロセスをすべて起動する(Promise版)
#750
複数エンジン対応: DEFAULT_ENGINE_INFOS
に登録されたエンジンのプロセスをすべて起動する(Promise版)
#750
Conversation
…-process-container
…tiple-engine-process-container-promise
…ne-process-container-promise
#741 マージによるコンフリクトを解消してWindows 10上での動作を確認しました。 |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
少し気になったところを質問しました
とても読みやすくなっていていいと思います!
プロセスの未起動やプロセスの終了を同期的に知らせるために |
|
確かにそうでした!他に場所がないので仕方がないとはいえ、 |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
改めて読んでみてコメントしてみました!
たぶんだいぶすらっとすると思います・・・!
こちら、マージできればと思います! (マージできればみんなでリファクタリングとかもできると思うので!) |
@aoirint さん |
…ne-process-container-promise
… inferencing issue of array.filter
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
LGTM!!!
めちゃくちゃ見通しが良くなった気がします!!
もしよかったら @Segu-g さんも見て頂けると・・・!! |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Electronの終了系イベントについて理解していないので見当違いなことを言っているかもしれませんがbefore-quit
でevent.preventDefault()
を呼んでreturn
した際に、window-all-closed
が再度発火し、エンジンが終了するまで何度もbefore-quit
が呼ばれているように見えます.
何度も呼んでもPromiseがいずれ解決されるなら問題ないのですが、これは想定された動作でしょうか?
Co-authored-by: Segu <51497552+Segu-g@users.noreply.github.com>
ちゃんとわかってないのですが、まあ少なくとも以前と同じ処理がされそうなので大丈夫・・・なはず・・・! |
そうですね、複数エンジン化前にも、もともとwindow-all-closedは2回呼ばれていたと思います。 Xボタンを押したときにwindow.destroyとapp.quitとが両方呼ばれているのかもです。。 過去のPRで終了操作をしてもVOICEVOXが終了できないより、動作に問題ないなら2回呼ばれていてもいい、という方向にした気がします! |
…ne-process-container-promise engineKey to engineId
|
修正ありがとうございます! @Segu-g さん、もしよければまた見て頂けると・・・! |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
LGTM!
終了イベント辺りはCommand + QとかCLOSE_WINDOWの複数の経路があるからややこしくなってますね.... |
起動シーケンス含むライフサイクルについて、とりあえず可視化するissueを作ってみました。 |
マージします!! |
内容
#741 の別バージョン(コールバックではなくPromiseを使った)の実装になります。
こちらでは、エディタがエンジンのプロセスを管理していないとき、エディタが終了しないという #741 の不具合を修正しています。#741 でも修正しました。可読性向上のための変更です。
マージの想定としては、不具合のある #741 の次に このPR または、このPRのみをマージすることを想定しています。npm run electron:serve
を実行エンジンプロセスのキルの流れ
#654 や #741 では、エンジンプロセスをキルする処理をコールバックを使って書いていましたが、このPRではPromiseで実装しています。
アプリケーションのウインドウがすべて閉じられ、app.quitが呼び出されたとき、before-quitイベントが発火します。
before-quitイベントのハンドラでは、event.preventDefaultを同期的に呼び出すことでアプリケーションの終了を回避することができます。
実装では、キルしなければならないエンジンプロセスが1つ以上ある場合、before-quitイベントを同期的にキャンセルし、エンジンプロセス終了後に非同期にapp.quitを再呼び出ししています。これにより、エンジンプロセスが生存したままエディタが終了することを防ぎ、エンジンプロセスの終了を待機してからエディタが終了するようにしています。
#654 や #741 では、エンジンプロセスのキルを非同期に実行しつつ、before-quitイベントを同期的にキャンセルする関数(killEngineとその呼び出し元のこと)を実装するため、
可読性が落ちる(と思っている)のを承知でコールバックを使っていましたが、戻り値を工夫すればPromiseで書けることに気づいたので書き直してみました。
関連 Issue
スクリーンショット・動画など
その他