2020年4月30日木曜日

[C++] -ftime-trace オプションと Chrome でビルド時間の可視化

C++ のビルド速くしたいなーと思ってて、そのためにはまずは計測だよねってことで調べてたら行き着いたのですが、clang に -ftime-trace があり、その出力を Chrome で可視化ができるとのこと! (懐かしき SN Systems..)

早速、仕事でも個人でも使ってみたんですが、これはとても便利ですね。




しかも、 「chrome://tracing」 はフォーマットが公開されているので、これに従って出力すれば他にも可視化できそうです。
Trace Event Format - Google ドキュメント
↓は CircleCI での並列具合を可視化したもの。こちらについては来週ブログにしたいと思います。

今回は以上です。では。


2020年4月23日木曜日

[Bitrise] GitHub Checks に表示されるようにする

公式ドキュメントがすごくわかりやすくまとまっているのでそちらを見ていただくだけで十分ではありますが、今回は Bitrise で GitHub Checks に結果を表示させる方法を紹介します。

セットアップ方法
Bitrise Checks App をインストールする
Bitrise Checks をインストールします。
「Install for free」ボタン押すと確認画面後、リポジトリの選択をして「Install」しましょう。
プロジェクト設定の GitHub Checks を有効にする
Bitrise のプロジェクトから「Settings」の「Enable GitHub Checks」にチェックを入れましょう。
これでセットアップは完了です。
結果
見やすくていいですね!
と、ここで気づいたのですが iutest では iOS/Android 両方のテストをするために 2 プロジェクト作ってるのですが、PR ステータスも Checks も 1 つしか表示されてませんね。。

もし解決方法見つかったらまた記事にしたいと思います。

今回は以上です。ではでは。

2020年4月13日月曜日

[Git] submodule を非 submodule なリポジトリとしてコピペする

リモートワークされてる方が多いと思いますが、
ネットワーク絡みで困ることも多いのではないでしょうか。
めちゃくちゃでかいリポジトリの clone が全然終わらなくて・・ということが筆者もあります。
先日もとあるリポジトリを clone しようとして困ったことに。

そんなときは、clone じゃなく、既に clone 済みのワークスペースを cp して使うことがあります。
ただ、今回は submodule だったので諦めようと思ったのですが・・

submodule は .git フォルダは .git ファイルがある。

親の .git/modules には .git フォルダらしきものがある。


これはイケるのでは?と思ったので試してみた。
(※画像は個人開発のリポジトリです)

やってみた

まずは、submodule のディレクトリをコピー。.git ファイルは消す。
続いて、.git/modules から submodule 名のディレクトリを .git としてコピー。
コピーした .git ディレクトリ内の config ファイルを開くと worktree の設定があるので消す。


結果

これでうまくいきました。
まぁ、これを使うことってそうそうない気もしますが備忘録として。

今回は以上。
ではでは。


2020年4月7日火曜日

Airtest を Android 10 で動かす

Airtest の最新バージョン(v1.2.3)で Android 10 のサポートが入りました。
私物の端末に Android 10 が来ていたので、反射的にアップグレードして Airtest が動かなくなってしまったのですが、助かりました。

ただし、普通に connect した場合におそらく minitouch の Permission denined error が発生すると思います。
[07:11:37][DEBUG] C:\Python27amd64\lib\site-packages\airtest\core\android\static\adb\windows\adb.exe -s BH900FPXD1 shell /data/local/tmp/minitouch -n 'minitouch_19717' 2>&1
[07:11:37][DEBUG] [minitouch_server]'open: Permission denied'
[07:11:37][DEBUG] [minitouch_server]'Unable to open device /dev/input/event8 for inspectionopen: Permission denied'
[07:11:37][DEBUG] [minitouch_server]'Unable to open device /dev/input/event7 for inspectionopen: Permission denied'
[07:11:37][DEBUG] [minitouch_server]'Unable to open device /dev/input/event6 for inspectionopen: Permission denied'
[07:11:37][DEBUG] [minitouch_server]'Unable to open device /dev/input/event5 for inspectionopen: Permission denied'
[07:11:37][DEBUG] [minitouch_server]'Unable to open device /dev/input/event4 for inspectionopen: Permission denied'
[07:11:37][DEBUG] [minitouch_server]'Unable to open device /dev/input/event3 for inspectionopen: Permission denied'
[07:11:37][DEBUG] [minitouch_server]'Unable to open device /dev/input/event0 for inspectionopen: Permission denied'
[07:11:37][DEBUG] [minitouch_server]'Unable to open device /dev/input/event2 for inspectionopen: Permission denied'
[07:11:37][DEBUG] [minitouch_server]'Unable to open device /dev/input/mice for inspectionopen: Permission denied'
[07:11:37][DEBUG] [minitouch_server]'Unable to open device /dev/input/event1 for inspectionUnable to find a suitable touch device'

これの対応に1ステップ必要なので紹介します。

IDE の場合
最新バージョンに更新するのはもちろんですが、 ADB connect のオプションを変える必要があります。

スクリプトの場合
実行する python 環境にインストールされている airtest を更新します。

pip install -U airtest

続いて、スクリプトファイルの auto_setup 後に device の touch_method を ADBTOUCH に変更します。
from airtest.core.api import *
from airtest.core.android import *

auto_setup(__file__)
dev = device()
if isinstance(dev, Android):
    dev.touch_method ="ADBTOUCH"


auto_setup(__file__, ["Android:///?touch_method=ADBTOUCH"])
でも touch_method を指定可能ですが、
IDE のスタートボタンから実行した場合は、auto_setup の時点でデバイスのセットアップ済みのため、
auto_setup で指定した touch_method に切り替わりません。
なので、接続中のデバイスが「Android」だったら touch_method を上書きするようにしています。
この書き方であればスクリプト単体実行と IDE からの実行両方で動作します。


公式ドキュメントだと微妙に名前が違ったりしてハマりましたが、ソースコード解析してなんとか解決できました。。
今回は以上です。では。