Skip to content

[Metronome] Excessive Task creation in ConductorMotionActor at 60Hz #21

Description

@hakaru

概要

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

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions