{"action":"created","issue":{"url":"https://api.github.com/repos/chirimen-oh/any-issues/issues/85","repository_url":"https://api.github.com/repos/chirimen-oh/any-issues","labels_url":"https://api.github.com/repos/chirimen-oh/any-issues/issues/85/labels{/name}","comments_url":"https://api.github.com/repos/chirimen-oh/any-issues/issues/85/comments","events_url":"https://api.github.com/repos/chirimen-oh/any-issues/issues/85/events","html_url":"https://github.com/chirimen-oh/any-issues/issues/85","id":163980274,"number":85,"title":"センサ値などの取得に関する課題(Bugzillaでの指摘を具体例でわかりやすいように記載)","user":{"login":"MSakamaki","id":2183053,"avatar_url":"https://avatars.githubusercontent.com/u/2183053?v=3","gravatar_id":"","url":"https://api.github.com/users/MSakamaki","html_url":"https://github.com/MSakamaki","followers_url":"https://api.github.com/users/MSakamaki/followers","following_url":"https://api.github.com/users/MSakamaki/following{/other_user}","gists_url":"https://api.github.com/users/MSakamaki/gists{/gist_id}","starred_url":"https://api.github.com/users/MSakamaki/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/MSakamaki/subscriptions","organizations_url":"https://api.github.com/users/MSakamaki/orgs","repos_url":"https://api.github.com/users/MSakamaki/repos","events_url":"https://api.github.com/users/MSakamaki/events{/privacy}","received_events_url":"https://api.github.com/users/MSakamaki/received_events","type":"User","site_admin":false},"labels":[],"state":"open","locked":false,"assignee":null,"assignees":[],"milestone":null,"comments":2,"created_at":"2016-07-06T01:26:05Z","updated_at":"2016-07-06T01:26:07Z","closed_at":null,"body":"_From @YusukeYamamoto on January 18, 2016 8:37_\n\ntl;dr\r\n\r\nhttps://bugzilla.mozilla.org/show_bug.cgi?id=1166588\r\nにて指摘頂いている課題の具体例の記載。\r\n♯ 指摘内容と、それがアプリに対してどういう制限として繋がるのかを明確にする。\r\n\r\n現状のGPIO APIの実装では、センサ(及びボタンなどのデバイス)からの値を読み取るためには、readをポーリングで処理せねばならない。\r\n\r\nそのため、アプリケーション層から、特定デバイスに対して一定周期でのボーリングにて実装する必要がある。\r\nつまり、センサ(やボタンなど)から値を細かい周期で取ろうと思えば思うほど、UIブロックが発生してしまう。\r\n\r\nJavaScriptはシングルスレッドなのでこれは仕方がない。\r\nなので、Workerスレッドに逃せば出来るかと想像できるが、課題が存在。\r\n\r\nGeckoの実装として、Gaiaのアプリ上からWorkerスレッドを呼べるようにするにはGecko側にWorkerから呼べるように修正が必要。現状の実装ではWorkerから呼べるようにしていないので、GPIO/I2CはWokerから呼べない( (試していないため、確認は必要だが )。\r\n※ ここで書いているのは、Kyleから指摘されているe10s/IPCとは別な話。WebAPIとして、Gaiaのアプリケーション層から操作するための話。\r\n\r\nなので、現状の結論からでは、以下の制限が発生。\r\n　例えば、CHIRIMENに加速度センサを付けて傾きに応じて、LEDにを光らす / UIを更新するアプリ。\r\n　傾き検知の値を細かい値にすればするほど、メインスレッドでポーリングが必要。\r\n　そのため、メインスレッドにてブロッキングが発生。\r\n　LEDを光らすのはもちろん、描画更新も出来ないし、何もできなくなる。\r\n　センサ値取得処理をWorkerスレッドに逃そうにもWorkerスレッドからは呼べない(はず)なので、現時点においては、回避方法はない。\r\n　→要はメインスレッド内で処理できるキャパシティが決まっているので、センサをセンシティブに取得して、DOM操作、他のGPIO/I2C操作など凝った動作をしようと思うと制限が出てくる。「センサ取得を荒くして、DOM操作に割く」、「センサ取得がセンシティブだが、DOM操作は制限」など、作りこみが大きくなればなるほど影響が出てくる。\r\n\r\n\n\n_Copied from original issue: MozOpenHard/CHIRIMEN#47_"},"comment":{"url":"https://api.github.com/repos/chirimen-oh/any-issues/issues/comments/230648715","html_url":"https://github.com/chirimen-oh/any-issues/issues/85#issuecomment-230648715","issue_url":"https://api.github.com/repos/chirimen-oh/any-issues/issues/85","id":230648715,"user":{"login":"MSakamaki","id":2183053,"avatar_url":"https://avatars.githubusercontent.com/u/2183053?v=3","gravatar_id":"","url":"https://api.github.com/users/MSakamaki","html_url":"https://github.com/MSakamaki","followers_url":"https://api.github.com/users/MSakamaki/followers","following_url":"https://api.github.com/users/MSakamaki/following{/other_user}","gists_url":"https://api.github.com/users/MSakamaki/gists{/gist_id}","starred_url":"https://api.github.com/users/MSakamaki/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/MSakamaki/subscriptions","organizations_url":"https://api.github.com/users/MSakamaki/orgs","repos_url":"https://api.github.com/users/MSakamaki/repos","events_url":"https://api.github.com/users/MSakamaki/events{/privacy}","received_events_url":"https://api.github.com/users/MSakamaki/received_events","type":"User","site_admin":false},"created_at":"2016-07-06T01:26:07Z","updated_at":"2016-07-06T01:26:07Z","body":"_From @YusukeYamamoto on January 18, 2016 14:16_\n\n私もworkerにAPI追加したことは無いので、さきほどコードを読んだ範囲でですが、\r\n\r\nGaiaのアプリ上でWorkerから呼べるようにするためには\r\n実APIをWebIDLで定義、WorkerNavigatorのWebIDLからも定義、worker側への実装が入り口(API)として最低限必要みたいです。\r\n\r\nその上で、実体をGecko側に実装が必要。これはKyleから指摘もらっているようにe10s/IPCを用いて実装し、非同期で処理できるようにすることが、Workerとしてmustか否かは不明。不要なら今のままでもとりあえず動くはず。\r\n※APIの口として、Gecko/Gaia のつなぎ部分のみworkerとしての実装が必要なのか、はたまた処理内部も分ける必要があるのか。こちらは要確認。できればMozillaさん内部で確認してくれたほうが確実な情報になりますし、確度あがるのでみなさん嬉しいと思いますが。\r\n\r\nですので、ご質問については、\r\n> 実装としては現在 navigator に備わっている mozGpio ないし mozI2c を WorkerNavigator ( https://developer.mozilla.org/ja/docs/Web/API/WorkerNavigator ) に実装するか，\r\n\r\n→半分Yesです。それだけだと対応不足。この対応はmsut。これしないとGaiaのアプリから呼べない。\r\n\r\n> Gecko のメソッド内で worker スレッドを作るかでしょうか．\r\n\r\n→多分No。\r\n\r\nあとは、本制限によってどの程度アプリ作成に制約が出てくるかですかねぇ。\r\nハードに詳しくないのでどの程度の解像度(周期)でのセンサ値の読み取りがほしいのかわかりませんが、\r\n先日、Fab蔵の佐々木さんとお話した際には1msec間隔以下でセンサ値は読み込みたいといったお話がありましたので、\r\n用途依存ですが厳しそうな感じがします。\r\n\r\n個人的な見解ですが、\r\n現状実装に影響を与えずに対応するには、もともとの羽多野さんspecにあったonchangeをGecko側にWorker経由で呼び出せるように実装すればとりあえずは本件回避できるので一番リーズナブルかと思います。\r\n\r\nあくまでも個人的なイチ意見ですが。"}}
{"actor":{"display_login":"MSakamaki"}}