Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 96be8bb7 authored by Eino-Ville Talvala's avatar Eino-Ville Talvala Committed by Android (Google) Code Review
Browse files

Merge "Camera3: Be busy as soon as work arrives." into klp-dev

parents 51ec03c2 26fe6c7c
Loading
Loading
Loading
Loading
+18 −1
Original line number Diff line number Diff line
@@ -1424,6 +1424,8 @@ status_t Camera3Device::RequestThread::queueRequest(
    Mutex::Autolock l(mRequestLock);
    mRequestQueue.push_back(request);

    unpauseForNewRequests();

    return OK;
}

@@ -1489,6 +1491,9 @@ status_t Camera3Device::RequestThread::setRepeatingRequests(
    mRepeatingRequests.clear();
    mRepeatingRequests.insert(mRepeatingRequests.begin(),
            requests.begin(), requests.end());

    unpauseForNewRequests();

    return OK;
}

@@ -1791,7 +1796,9 @@ sp<Camera3Device::CaptureRequest>
        mRequestQueue.erase(firstRequest);
    }

    // Not paused
    // In case we've been unpaused by setPaused clearing mDoPause, need to
    // update internal pause state (capture/setRepeatingRequest unpause
    // directly).
    Mutex::Autolock pl(mPauseLock);
    mPaused = false;

@@ -1824,6 +1831,16 @@ bool Camera3Device::RequestThread::waitIfPaused() {
    return false;
}

void Camera3Device::RequestThread::unpauseForNewRequests() {
    // With work to do, mark thread as unpaused.
    // If paused by request (setPaused), don't resume, to avoid
    // extra signaling/waiting overhead to waitUntilPaused
    Mutex::Autolock p(mPauseLock);
    if (!mDoPause) {
        mPaused = false;
    }
}

void Camera3Device::RequestThread::setErrorState(const char *fmt, ...) {
    sp<Camera3Device> parent = mParent.promote();
    if (parent != NULL) {
+1 −0
Original line number Diff line number Diff line
@@ -314,6 +314,7 @@ class Camera3Device :

        // Pause handling
        bool               waitIfPaused();
        void               unpauseForNewRequests();

        // Relay error to parent device object setErrorState
        void               setErrorState(const char *fmt, ...);