Kozaneba開発日記2022-06-08
グループの中の矢印の描画位置がズレるバグを直す
この前の修正でエンバグした?
テストケース作る
こざねの枚数とレンダリング時間の表示をつける
11:00
nishio.icon🍅11:56-12:21 テストケース作る
再現テストケースできた
グループをドラッグした場合に、中身のバウンディングボックスは更新されないが、線分の始点終点は更新されて、計算された交点がずれるバグ
あれれ?今まではなぜ動いてたのか?今までも動いてなかったのか?
前のバージョンをcheckoutしてみたけどバグが再現しないな
12:00
nishio.iconわかった、元から交点計算関数に渡してた引数は間違っていて、グループの中にいる場合はズレていたのだが、古いアルゴリズムは「始点がボックスの中心から出ていると仮定して傾きだけに注目して交点を計算する」というものだったので発覚しなかったんだ
15:00
nishio.icon🍅15:44-16:09 続き
fixed, released✅
16:00
nishio.icon🍅16:42-17:07 枚数とレンダリング時間の表示
とりあえずUIは抜きで、windowに表示する関数を生やそう
表示してるものが500個ちょいあることがわかった
https://gyazo.com/058df9a1617de0a233372cf88fd8e9bf
数を数えるのは簡単だけど、時間の計測はどこを測ればいいかよくわからないな…
17:00
nishio.iconうーん、onWheelの処理に掛かってる時間を計ろうかと思ったがこれはReactの状態更新を行うだけでイベントハンドラ自体はすぐ終わるなぁ
状態管理をReactに任せないで自前でやると動きがなめらかになるのかな?
今それをやってないのはwheelイベントにマウスのドラッグとかと違って「終わり」を示すイベントがないから
21:00
nishio.icon処理時間が1フレームに収まってない部分。onWheelの中ではReactNのGlobalStateManager.setを呼んでるだけなのだけどそれが1フレーム16.7msecのうちの3.7msecを食っている。削れるのはここくらいか
https://gyazo.com/fd71b77d7336cf48b428455f2de706dd
やはり状態更新と画面更新をReactを通さずに自前でやるしかないかなー??
さくさく動いてる時は2msecくらい
https://gyazo.com/f9c8702102b8446c4cd9954c783a5910
うーん、これ、Paint(とそれと同程度の内容不明の時間)が伸びてるのが主要因だから状態更新を削っても改善しないな。「解決したければ新しいMacBookを買ってください」って感じだ
23:00
nishio.iconCPUタブのこの斜線が何なのか気になって調べたら「メインスレッド以外の処理」とのこと。
https://gyazo.com/9f31f26cf2c03f4aa14b0a5460151fb3
メインスレッド以外の処理がこんなにいっぱいいっぱいなのって、なんだろう?
Reactがメインスレッドの外で状態管理をしてるってこと?
そんなわけないか…???
射線だけのゾーンを範囲選択すると、サマリー表示としてはIdleになりますが、実際には処理が間に合わなくてDropped Frameになっています
https://gyazo.com/b4908a7993bd1b884d284c98dcab4660
コールツリーなどの表示も全部空っぽ、多分メインスレッドの処理しか情報を集められてないのだと思います
考察
600枚くらいのこざねを出してるの、ユーザとしてはレアだと思う
メインスレッド外で時間が取られてるので、多分スクリプトで実装されてる処理を頑張って改良しても解決しない
むしろ頑張らないでイベントを間引こう
https://gyazo.com/3f6ab3b2f2a355bf7ea328b25b7b12fd
なんらかのアルゴリズムでタイトルのフォントサイズが大きくなるのが良いと思う
今まで固定サイズだったものが可変になるとバグりそう〜〜〜
最大フォントサイズを決めて、長さがオーバーしたら縮小、かな
フォントサイズの計算を非同期にする?
非同期にするとまあプチハングしてるのと同程度の時間「小さい文字」で表示されるんだよな
計算済みの値をサーバに保存する方がいいかなー
「なければ再計算」なら過去のデータも問題なく読めるし
Scrapboxからコピペした時にリンク記法がどうなるべきか
ScrapboxモードであるならScrapboxとしてパースしても良いのでは
こざねになるべきか、Scrapboxカードになるべきか
こざねになって、そこから展開ができるのが良さそう