えるくりん月報 2024年4月号
4月号です。
今月も仕事と私事についてランダムに書きます。
Window state の configure-sync がようやく終わった
2月号に引き続き3月号に引き続き今月まで取り組んでいたconfigure syncがようやく完了した。3回revertされ4度目の正直で離陸成功。いつの間にか影響範囲の大きい変更になってしまったが、世に放たれてから2週間経って未だbug reportはこないのでセーフ。
Reland "wayland: Support window state and insets in configure-sync model"
revertされた原因のテストを再現するのがかなり大変だった。最初の2回のrevertは、westonを立ち上げて外部から走らせれば落ちないもののwarning messageが出たので確認ができた。
しかし、3回目のrevertはかなりタフで、1. westonの中のターミナルからテストを実行する(外からWAYLAND_DISPLAYを指定するんじゃダメ(なんで???)), 2. DCHECKをオフにする の2条件が必要だった。どちらもバラバラでは試したんだが、この組み合わせにたどり着くまでに2日くらいかかった。
ところでwestonの中のターミナルに入力するのは至難の業で、押しても反応しないこともあれば1回押したら10文字分一気に打ち込まれたりするし、クリップボードも共有されていないので、テスト名を正しく打ち込むのが至難の業だった。
この問題を解決するためにやった副産物リスト
- そもそも既存のコードが間違っており、しかし大量のテストが壊れた挙動に準拠しているので、壊れた挙動を維持しないといけなかった。その結果ForceApplyWindowStateDoNotUse というクソが生まれた。
Good Naming賞ノミネート作品です pic.twitter.com/eoiYwStVBa
— える@銀英伝はいいぞ (@elkurin_) April 19, 2024 - frame insets がWidgetの初期化時パラメータに追加されていたが、これも嘘。そもそもX11では実装されていなくて壊れてそうだし、初期化パラメータとして登録してもウィンドウを最大化したときなどにinsetsが更新されると初期値が失われていてバグった実装だった。しかし、各特殊実装ではこのinsetsの値を自由に決めたいらしいのでGetCustomInsetsInDIP()というAPIを追加し、その中でカスタマイズする計算式をいれてもらうデザインにした。
- Window stateだけでなくfullscreen typeも同期しないといけなかった。やることは作業ゲーだが、テストの落ち方が意味不明で下人を突き止めるのが大変だった。
- 同じwindow stateが2度以上リクエストされたときに無視するという謎ハックが埋め込まれていたことで、サーバーからのリクエストといい感じ(悪い感じ)にすれ違うと壊れるバグもあった。謎ハックは今回の自分の変更で治ったので消した。
- Deprecatedなはずだが消すとテストが壊れるせいで残ってたコードを消した。テスト中、Popupを開くけどShowしないで走っている間違ったテストがあったので、それを直したらOKだった。
- スケールが変わるたびにGeometryをセットするハックを消した。これはInsetが正しく同期できてなかったから必要だったコードパーツ。
- GetPlatformWindowStateのAPIを全WaylandWindowでサポートした。挙動自体は変わってないが、以前はフォールバック先の関数はhard codeだったので、マシになったかな?
いろいろあったね。
Window ManagerのVersion skewテストをしたい
Lacrosの導入により、ChromeOSでもブラウザとOS(語弊あり)の間にバージョン違いが発生するようになった。今も一部のテストはバージョン違い環境で走っているが、Window Managerに関するテストは走っていない。既存のフレームワークだとできないので、新しいのをデザイン中。
今は手元でおもちゃ作成中。
外のチームを含め色んな人と議論・交渉しないといけないプロジェクトなので頑張るぞい。
Gesture Event Handleの相互干渉を解決した
3本指でスクロールするイベントのバグについて3月号でも言及したが、調査を進めるとちょっとややこしい問題が埋まっていた。
EventHandlerやEventTargeterとは、クリックなどのイベントが来たときに誰がどのようにそのイベントを解釈するか決めるシステム。このとき、イベントの処理ルールが一意に定まっていればいいが、そうでない場合はEventHandlerの登録順で決まる。ところで、スクロールのようなイベントは長いスクロールをひとつのイベントとするのではなく、短い距離のバラバラのイベントとして扱われる。つまり、ひとつの長いスクロールでも一瞬方向が変わって水平スクロール・垂直スクロールが切り替わったりすると、違うEventHandlerに吸われちゃったりする。
ベストなのはスクロールイベントをグループとして扱えるようにすることかもしれない。
今回はCaptureという、イベントをこのWindow・Widgetで回収しますと宣言する機能を使うことで、一連のスクロールを処理することができた。
Reland "TabScrubber: Set capture on scrubbing to stop overview"
その他
- Lacros起動ロジック周りを//chromeから独立させるためにコード整理を進めている。各コンポーネンツをどこに移すかについて各所で議論が勃発する。(bug link)
- EXPECT_CALLというテスト用メソッドは、とある関数が(何回)呼ばれるかをチェックしさらにその返り値を偽装できるやつで、Verifyしてあげるタイミングでこのチェックを完了する機能。もしVerifyしないと、想定と違うタイミングや違う理由により走ったせいで壊れていることに気づかなずテストが通るケースが生まれてしまう。しかし、このVerifyが別スレッドで走るタスクでは走っていなかったことに気づいたので直した。(bug link)
- Policyの初期化についていっぱい調べものした。結果、Policyのコードは難しいということがわかった。ぴえん
- スキマ時間にメモリリークをいくつか直した。
- ほげほげほげ、ほげほげほげ(オープンソースでない仕事のためフィルター)。
- 新卒が入ってきて、廊下ですれ違ったときにおしゃべりする人が増えて嬉しい。
マーダーミステリー自作
これが最近の人生の多くを占めている。はやめに仕事を切り上げて夜な夜なマダミス制作をしていて仕事の進捗がない。困った。
ちなみに今テストプレイ可能なものが2.5個くらいあって、対面でもオンラインでも出来るので、興味のある方やテストしてやってもいいぜって方は声掛けてください🙇♀️
今用意があるのは
- マフィアもの。5人プレイ。
俺が最初に作るとなったらこういうテーマになるよね。ちょうど人狼TLPTという劇団がMISSIONという犯罪者設定の公演をやっていたのにひきずられました。 - ドラクエ風RPG世界観。4人プレイ。
ドラクエとフリーレンに引きずられた。だいぶ気に入っている。 - 合コンマダミス。6人プレイ。
ギャグシナリオです…。シナリオ書いてるの俺だからお上品だよ。イラスト・デザイン担当の方との共同制作。
テストプレイでウケがそれなりに良かったら公開します。
T1がMSIに出場!
良かった〜〜〜〜〜〜〜〜〜〜
HLEに0-3でボコされて泣いてたら、次の週には4-0で勝った。やはり土壇場のT1。ありがとうT1。
LCK決勝もかなり内容良かったし、近年稀に見る素晴らしいBO5だった。
第二シードではあるけど,Play-inからいっぱい試合見れるわけだしもはやご褒美。T1もだんだん調子上げていくチームだから、Play-inで場数踏めるのはむしろラッキー。
FAKER WHAT WAS THAT pic.twitter.com/LcdffaCICH
— LoL Esports (@lolesports) 2024年4月14日
T1 파이팅!
祖母の家に泊まった
ばあちゃん氏、何歳になっても元気。ChromebookでYoutube開いてレシピ調べて振る舞ってくれたり、麻雀の動画見たりしてる。
これはばあちゃんの新作かばん。
かあちゃんは絵も料理も上手いし、とうちゃんは精密な手術してるのに、おいらの手はどうしてこんなぶきっちょに
これはきれいな公園。
CHICAGOを観てきた
ミュージカル「CHICAGO」を観てきた。ロキシー天晴れ!
会社帰りにシアターオーブに行くのQOL高いのでオススメ。
いい喫茶店を発見
無限におすすめのお茶が出てくる素敵な紅茶屋さんを発見した。
10分に1回のスパンで新しい紅茶がでてくるフリーフローのサービスをしている面白いお店。また行きたい。
体調を崩した
ちょっとだけね。ぴえん。
今月のelkurin-daily-notes
今月は就業後の時間をマダミス制作に費やしていたので、daily notesサボりがちです。
今月のおもしろノート→
ノート一覧
- このブログ
総括
- Week1: T1が大変なことに
- Week2: 主人公T1の帰還
- Week3: マダミス作る面白さに気づいてしまった
- Week4: 体調崩したけど復活した
今月もオツカレ!