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

Commit 6ed5a696 authored by Avichal Rakesh's avatar Avichal Rakesh Committed by Android (Google) Code Review
Browse files

Merge "cameraservice: Add metrics for extension sessions" into udc-dev

parents 0dbcec5c 6e57a2bc
Loading
Loading
Loading
Loading
+2 −1
Original line number Diff line number Diff line
@@ -142,14 +142,15 @@ cc_library_host_static {
filegroup {
    name: "libcamera_client_aidl",
    srcs: [
        "aidl/android/hardware/CameraExtensionSessionStats.aidl",
        "aidl/android/hardware/ICameraService.aidl",
        "aidl/android/hardware/ICameraServiceListener.aidl",
        "aidl/android/hardware/ICameraServiceProxy.aidl",
        "aidl/android/hardware/camera2/ICameraDeviceCallbacks.aidl",
        "aidl/android/hardware/camera2/ICameraDeviceUser.aidl",
        "aidl/android/hardware/camera2/ICameraOfflineSession.aidl",
        "aidl/android/hardware/camera2/ICameraInjectionCallback.aidl",
        "aidl/android/hardware/camera2/ICameraInjectionSession.aidl",
        "aidl/android/hardware/camera2/ICameraOfflineSession.aidl",
    ],
    path: "aidl",
}
+16 −2
Original line number Diff line number Diff line
@@ -279,7 +279,8 @@ CameraSessionStats::CameraSessionStats() :
        mResultErrorCount(0),
        mDeviceError(false),
        mVideoStabilizationMode(-1),
        mSessionIndex(0) {}
        mSessionIndex(0),
        mCameraExtensionSessionStats() {}

CameraSessionStats::CameraSessionStats(const String16& cameraId,
        int facing, int newCameraState, const String16& clientName,
@@ -299,7 +300,8 @@ CameraSessionStats::CameraSessionStats(const String16& cameraId,
                mResultErrorCount(0),
                mDeviceError(0),
                mVideoStabilizationMode(-1),
                mSessionIndex(0) {}
                mSessionIndex(0),
                mCameraExtensionSessionStats() {}

status_t CameraSessionStats::readFromParcel(const android::Parcel* parcel) {
    if (parcel == NULL) {
@@ -417,6 +419,12 @@ status_t CameraSessionStats::readFromParcel(const android::Parcel* parcel) {
        return err;
    }

    CameraExtensionSessionStats extStats{};
    if ((err = extStats.readFromParcel(parcel)) != OK) {
        ALOGE("%s: Failed to read extension session stats from parcel", __FUNCTION__);
        return err;
    }

    mCameraId = id;
    mFacing = facing;
    mNewCameraState = newCameraState;
@@ -435,6 +443,7 @@ status_t CameraSessionStats::readFromParcel(const android::Parcel* parcel) {
    mUserTag = userTag;
    mVideoStabilizationMode = videoStabilizationMode;
    mSessionIndex = sessionIdx;
    mCameraExtensionSessionStats = extStats;

    return OK;
}
@@ -537,6 +546,11 @@ status_t CameraSessionStats::writeToParcel(android::Parcel* parcel) const {
        return err;
    }

    if ((err = mCameraExtensionSessionStats.writeToParcel(parcel)) != OK) {
        ALOGE("%s: Failed to write extension sessions stats!", __FUNCTION__);
        return err;
    }

    return OK;
}

+69 −0
Original line number Diff line number Diff line
/*
 * Copyright (C) 2023 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package android.hardware;

/**
 * Metrics specific to Extension Sessions (see CameraExtensionSession) for logging.
 *
 * Each Extension Session is mapped to one camera session internally, and will be sent to
 * CameraServiceProxy with IDLE/CLOSE calls.
 * @hide
 */
parcelable CameraExtensionSessionStats {
    /**
     * Value should match {@code CameraExtensionCharacteristics#EXTENSION_*}
     */
    @Backing(type="int")
    enum Type {
        EXTENSION_NONE = -1,
        EXTENSION_AUTOMATIC = 0,
        EXTENSION_FACE_RETOUCH = 1,
        EXTENSION_BOKEH = 2,
        EXTENSION_HDR = 3,
        EXTENSION_NIGHT = 4
    }

    /**
     * Key to uniquely identify the session this stat is associated with. The first call to
     * 'ICameraService.reportExtensionSessionStats' should set this to an empty string.
     * 'ICameraService.reportExtensionSessionStats' will return the key which should be used with
     * the next calls.
     */
    String key;

    /**
     * Camera ID for which the stats is being reported.
     */
    String cameraId;

    /**
     * Package name of the client using the camera
     */
    String clientName;


    /**
     * Type of extension session requested by the app. Note that EXTENSION_AUTOMATIC is reported
     * as such.
     */
    Type type = Type.EXTENSION_NONE;

    /**
     * true if advanced extensions are being used, false otherwise
     */
    boolean isAdvanced = false;
}
 No newline at end of file
+21 −0
Original line number Diff line number Diff line
@@ -30,6 +30,7 @@ import android.hardware.camera2.impl.CameraMetadataNative;
import android.hardware.ICameraServiceListener;
import android.hardware.CameraInfo;
import android.hardware.CameraStatus;
import android.hardware.CameraExtensionSessionStats;

/**
 * Binder interface for the native camera service running in mediaserver.
@@ -214,6 +215,26 @@ interface ICameraService
     */
    oneway void notifyDeviceStateChange(long newState);

    /**
     * Report Extension specific metrics to camera service for logging. This should only be called
     * by CameraExtensionSession to log extension metrics. All calls after the first must set
     * CameraExtensionSessionStats.key to the value returned by this function.
     *
     * Each subsequent call fully overwrites the existing CameraExtensionSessionStats for the
     * current session, so the caller is responsible for keeping the stats complete.
     *
     * Due to cameraservice and cameraservice_proxy architecture, there is no guarantee that
     * {@code stats} will be logged immediately (or at all). CameraService will log whatever
     * extension stats it has at the time of camera session closing which may be before the app
     * process receives a session/device closed callback; so CameraExtensionSession
     * should send metrics to the cameraservice preriodically, and cameraservice must handle calls
     * to this function from sessions that have not been logged yet and from sessions that have
     * already been closed.
     *
     * @return the key that must be used to report updates to previously reported stats.
     */
    String reportExtensionSessionStats(in CameraExtensionSessionStats stats);

    // Bitfield constants for notifyDeviceStateChange
    // All bits >= 32 are for custom vendor states
    // Written as ints since AIDL does not support long constants.
+1 −0
Original line number Diff line number Diff line
@@ -17,6 +17,7 @@
package android.hardware;

import android.hardware.CameraSessionStats;
import android.hardware.CameraExtensionSessionStats;

/**
 * Binder interface for the camera service proxy running in system_server.
Loading