canvas要素の再描画

ウインドウリサイズに応じて要素canvasのサイズを変更して再描画する処理でエラーが出て、どの操作が原因なのか再現する条件の意味が分からず長いこと往生した。
WebKitの実装ではDOMのsetAttributeでwidthとheightを変更する事になる。ここで表示位置の再計算を待たずに描画しようとすると最初はうまくいくのだが、二度目以降にエラーが出るようだ。setTimeoutで再描画処理をイベントループに投げてしまえば問題は無いのだが、どうしても反応が悪くなってしまう。イベントループを待たずに再計算させるには、実際の値を表すプロパティを呼べば良い。
一番簡単なのはcanvas要素自身のoffset値を呼ぶ事。どうせ描画するときにはサイズが必要なので、getContextを呼ぶ前にoffsetWidthとoffsetHeightを貰う事にした。