• Jasmine Chen's avatar
    VCD: Migrate to use SetCallbacksAssociated · 2291e961
    Jasmine Chen authored
    This addresses a subtle race condition in
    CameraModuleCallbacks::SetCallbacks().
    
    The key sequence of events,
    1. CameraHalClient receives a pending remote of CameraModule
    2. CameraHalClient calls CameraModule::GetNumberOfCameras()
    3. CameraHalClient calls CameraModule::SetCallbacks() to pass a pending
       remote of CameraModuleCallbacks.
    4. CameraModule receiver would fire
       CameraModuleCallbacks::CameraDeviceStatusChange()
    5. CameraModule receiver then fires CameraModule::SetCallbacksCallback
    
    The expectation was that 4 would be received before 5. However, since
    CameraModule and CameraModuleCallbacks run on different message pipes, 4
    can actually be received after 5, not meeting the expectation.
    
    So here we make CameraModuleCallbacks an associated interface of
    CameraModule.
    Please see crrev.com/c/2434712 for the implementation on CameraModule.
    
    Bug: b/169324225
    Test: With the following,
        1. Open Chrome Camera App (CCA)
        2. restart cros-camera
        3. Verify CameraDeviceStatusChange is received before
           SetCallbacksCallback
        4. Repeat and passes 20/20 times.
        Additionally,
        1. Build capture_unittests and scp to DUT
        2. tast run dut 'camera.CaptureUnittests'
    
    Change-Id: I79f6006b7827d2e556b01e7d57df43916ca7913e
    Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2470898Reviewed-by: default avatarWei Lee <wtlee@chromium.org>
    Reviewed-by: default avatarDaniel Cheng <dcheng@chromium.org>
    Commit-Queue: Daniel Cheng <dcheng@chromium.org>
    Cr-Commit-Position: refs/heads/master@{#841019}
    2291e961
camera_common.mojom 4.69 KB