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

Commit 3785f150 authored by Jayant Chowdhary's avatar Jayant Chowdhary Committed by Android (Google) Code Review
Browse files

Merge "cameraserver: Add stream ids to last request info in dumpsys" into main

parents 72f47036 02939eff
Loading
Loading
Loading
Loading
+10 −0
Original line number Diff line number Diff line
@@ -267,3 +267,13 @@ flag {
        purpose: PURPOSE_BUGFIX
    }
}

flag {
    namespace: "camera_platform"
    name: "dumpsys_request_stream_ids"
    description: "Add stream id information to last request dumpsys"
    bug: "357913929"
    metadata {
        purpose: PURPOSE_BUGFIX
    }
}
 No newline at end of file
+49 −14
Original line number Diff line number Diff line
@@ -612,10 +612,35 @@ status_t Camera3Device::dump(int fd, [[maybe_unused]] const Vector<String16> &ar

    {
        lines = "    Last request sent:\n";
        LatestRequestInfo lastRequestInfo = getLatestRequestInfoLocked();
        // Print out output and input stream ids
        if (flags::dumpsys_request_stream_ids()) {
            if (lastRequestInfo.outputStreamIds.size() != 0) {
                lines += "      Output Stream Ids:\n";
                for (const auto &streamId: lastRequestInfo.outputStreamIds) {
                    lines +=  "         " + std::to_string(streamId) + "\n";
                }
            }
            if (lastRequestInfo.inputStreamId != -1) {
                lines += "       Input Stream Id: " + std::to_string(lastRequestInfo.inputStreamId)
                        + "\n";
            }
        }
        // Keeping this write() outside the flagged if makes it easier while
        // removing the flag.
        write(fd, lines.c_str(), lines.size());
        lines = "    Logical request settings:\n";
        CameraMetadata lastRequestSettings = lastRequestInfo.requestSettings;
        write(fd, lines.c_str(), lines.size());

        CameraMetadata lastRequest = getLatestRequestLocked();
        lastRequest.dump(fd, /*verbosity*/2, /*indentation*/6);
        lastRequestSettings.dump(fd, /*verbosity=all info*/2, /*indentation*/6);
        if (flags::dumpsys_request_stream_ids()) {
            for (const auto& pair: lastRequestInfo.physicalRequestSettings) {
                lines = "    Physical request settings for camera id " + pair.first + ":\n";
                write(fd, lines.c_str(), lines.size());
                pair.second.dump(fd, /*verbosity=all info*/2, /*indentation*/8);
            }
        }
    }

    if (dumpTemplates) {
@@ -2911,13 +2936,13 @@ void Camera3Device::flushInflightRequests() {
    camera3::flushInflightRequests(states);
}

CameraMetadata Camera3Device::getLatestRequestLocked() {
Camera3Device::LatestRequestInfo Camera3Device::getLatestRequestInfoLocked() {
    ALOGV("%s", __FUNCTION__);

    CameraMetadata retVal;
    LatestRequestInfo retVal;

    if (mRequestThread != NULL) {
        retVal = mRequestThread->getLatestRequest();
        retVal = mRequestThread->getLatestRequestInfo();
    }

    return retVal;
@@ -3487,13 +3512,15 @@ void Camera3Device::RequestThread::updateNextRequest(NextRequest& nextRequest) {
    if (halRequest.settings != nullptr) { // Don't update if they were unchanged
        Mutex::Autolock al(mLatestRequestMutex);

        // Fill in latest request and physical request
        camera_metadata_t *cloned = clone_camera_metadata(halRequest.settings);
        mLatestRequest.acquire(cloned);
        mLatestRequestInfo.requestSettings.acquire(cloned);

        mLatestPhysicalRequest.clear();
        mLatestRequestInfo.physicalRequestSettings.clear();
        mLatestRequestInfo.outputStreamIds.clear();
        for (uint32_t i = 0; i < halRequest.num_physcam_settings; i++) {
            cloned = clone_camera_metadata(halRequest.physcam_settings[i]);
            mLatestPhysicalRequest.emplace(halRequest.physcam_id[i],
            mLatestRequestInfo.physicalRequestSettings.emplace(halRequest.physcam_id[i],
                                           CameraMetadata(cloned));
        }

@@ -3501,16 +3528,24 @@ void Camera3Device::RequestThread::updateNextRequest(NextRequest& nextRequest) {
            int32_t inputStreamId = -1;
            if (halRequest.input_buffer != nullptr) {
              inputStreamId = Camera3Stream::cast(halRequest.input_buffer->stream)->getId();
              mLatestRequestInfo.inputStreamId = inputStreamId;
            }

           for (size_t i = 0; i < halRequest.num_output_buffers; i++) {
               int32_t outputStreamId =
                       Camera3Stream::cast(halRequest.output_buffers[i].stream)->getId();
               mLatestRequestInfo.outputStreamIds.emplace(outputStreamId);
           }

            parent->monitorMetadata(TagMonitor::REQUEST,
                    halRequest.frame_number,
                    0, mLatestRequest, mLatestPhysicalRequest, halRequest.output_buffers,
                    0, mLatestRequestInfo.requestSettings,
                    mLatestRequestInfo.physicalRequestSettings, halRequest.output_buffers,
                    halRequest.num_output_buffers, inputStreamId);
        }
    }
    if (parent != nullptr) {
        parent->collectRequestStats(halRequest.frame_number, mLatestRequest);
        parent->collectRequestStats(halRequest.frame_number, mLatestRequestInfo.requestSettings);
    }

    if (halRequest.settings != nullptr) {
@@ -4170,13 +4205,13 @@ status_t Camera3Device::RequestThread::prepareHalRequests() {
    return OK;
}

CameraMetadata Camera3Device::RequestThread::getLatestRequest() const {
Camera3Device::LatestRequestInfo Camera3Device::RequestThread::getLatestRequestInfo() const {
    ATRACE_CALL();
    Mutex::Autolock al(mLatestRequestMutex);

    ALOGV("RequestThread::%s", __FUNCTION__);

    return mLatestRequest;
    return mLatestRequestInfo;
}

bool Camera3Device::RequestThread::isStreamPending(
+10 −4
Original line number Diff line number Diff line
@@ -736,12 +736,19 @@ class Camera3Device :
    virtual void applyMaxBatchSizeLocked(
            RequestList* requestList, const sp<camera3::Camera3OutputStreamInterface>& stream) = 0;

    struct LatestRequestInfo {
        CameraMetadata requestSettings;
        std::unordered_map<std::string, CameraMetadata> physicalRequestSettings;
        int32_t inputStreamId = -1;
        std::set<int32_t> outputStreamIds;
    };

    /**
     * Get the last request submitted to the hal by the request thread.
     *
     * Must be called with mLock held.
     */
    virtual CameraMetadata getLatestRequestLocked();
    virtual LatestRequestInfo getLatestRequestInfoLocked();

    virtual status_t injectionCameraInitialize(const std::string &injectCamId,
            sp<CameraProviderManager> manager) = 0;
@@ -992,7 +999,7 @@ class Camera3Device :
         * Get the latest request that was sent to the HAL
         * with process_capture_request.
         */
        CameraMetadata getLatestRequest() const;
        LatestRequestInfo getLatestRequestInfo() const;

        /**
         * Returns true if the stream is a target of any queued or repeating
@@ -1192,8 +1199,7 @@ class Camera3Device :
        // android.request.id for latest process_capture_request
        int32_t            mLatestRequestId;
        int32_t            mLatestFailedRequestId;
        CameraMetadata     mLatestRequest;
        std::unordered_map<std::string, CameraMetadata> mLatestPhysicalRequest;
        LatestRequestInfo mLatestRequestInfo;

        typedef KeyedVector<uint32_t/*tag*/, RequestTrigger> TriggerMap;
        Mutex              mTriggerMutex;