概要
ConductorMotionActor において、CMMotionManager からの 60Hz のセンサー更新のたびに新しい Task を生成して handleSample を呼び出しています。
詳細
ConductorMotionActor.swift の以下の部分:
manager.startDeviceMotionUpdates(to: queue) { [weak self] motion, _ in ... Task { await self.handleSample(sample) } }
毎秒 60 個の Task が生成されるため、iOS デバイスにおいて CPU 負荷の増大、バッテリー消費、およびスケジューリングのジッター(ictus 検出精度の低下)を引き起こす可能性があります。
期待される動作
Task を毎回生成するのではなく、AsyncStream の continuation に直接センサーデータを流し込むか、Actor 内部のバッファで処理を行うなど、Task 生成のオーバーヘッドを避ける実装が望ましいです。
優先度
High
概要
ConductorMotionActor において、CMMotionManager からの 60Hz のセンサー更新のたびに新しい Task を生成して handleSample を呼び出しています。
詳細
ConductorMotionActor.swift の以下の部分:
manager.startDeviceMotionUpdates(to: queue) { [weak self] motion, _ in ... Task { await self.handleSample(sample) } }毎秒 60 個の Task が生成されるため、iOS デバイスにおいて CPU 負荷の増大、バッテリー消費、およびスケジューリングのジッター(ictus 検出精度の低下)を引き起こす可能性があります。
期待される動作
Task を毎回生成するのではなく、AsyncStream の continuation に直接センサーデータを流し込むか、Actor 内部のバッファで処理を行うなど、Task 生成のオーバーヘッドを避ける実装が望ましいです。
優先度
High