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

Commit b8674b79 authored by Lais Andrade's avatar Lais Andrade
Browse files

Collect VibrationReported metrics

Report atom VibrationReported on each vibration request received by the
VibratorManagerService.

This atom includes the vibration status, introduced as a proto enum to
be logged as an integer, the latency values and API trigger counts.

Bug: 232902688
Test: VibratorManagerServiceTest
Change-Id: Ic50def27d0fc9585941387fb7b8bfa5dceb42d78
parent de765a95
Loading
Loading
Loading
Loading
+35 −3
Original line number Diff line number Diff line
@@ -86,7 +86,7 @@ message VibrationAttributesProto {
    optional int32 flags = 3;
}

// Next id: 8
// Next Tag: 9
message VibrationProto {
    option (.android.msg_privacy).dest = DEST_AUTOMATIC;
    optional int64 start_time = 1;
@@ -94,11 +94,43 @@ message VibrationProto {
    optional CombinedVibrationEffectProto effect = 3;
    optional CombinedVibrationEffectProto original_effect = 4;
    optional VibrationAttributesProto attributes = 5;
    optional int32 status = 6;
    optional int64 duration_ms = 7;
    optional Status status = 8;
    reserved 6; // prev int32 status

    // Also used by VibrationReported from frameworks/proto_logging/stats/atoms.proto.
    // Next Tag: 26
    enum Status {
        UNKNOWN = 0;
        RUNNING = 1;
        FINISHED = 2;
        FINISHED_UNEXPECTED = 3;  // Didn't terminate in the usual way.
        FORWARDED_TO_INPUT_DEVICES = 4;
        CANCELLED_BINDER_DIED = 5;
        CANCELLED_BY_SCREEN_OFF = 6;
        CANCELLED_BY_SETTINGS_UPDATE = 7;
        CANCELLED_BY_USER = 8;
        CANCELLED_BY_UNKNOWN_REASON = 9;
        CANCELLED_SUPERSEDED = 10;
        IGNORED_ERROR_APP_OPS = 11;
        IGNORED_ERROR_CANCELLING = 12;
        IGNORED_ERROR_SCHEDULING = 13;
        IGNORED_ERROR_TOKEN= 14;
        IGNORED_APP_OPS = 15;
        IGNORED_BACKGROUND = 16;
        IGNORED_UNKNOWN_VIBRATION = 17;
        IGNORED_UNSUPPORTED = 18;
        IGNORED_FOR_EXTERNAL = 19;
        IGNORED_FOR_HIGHER_IMPORTANCE = 20;
        IGNORED_FOR_ONGOING = 21;
        IGNORED_FOR_POWER = 22;
        IGNORED_FOR_RINGER_MODE = 23;
        IGNORED_FOR_SETTINGS = 24;
        IGNORED_SUPERSEDED = 25;
    }
}

// Next id: 25
// Next Tag: 25
message VibratorManagerServiceDumpProto {
    option (.android.msg_privacy).dest = DEST_AUTOMATIC;
    repeated int32 vibrator_ids = 1;
+4 −0
Original line number Diff line number Diff line
@@ -96,6 +96,7 @@ abstract class AbstractVibratorStep extends Step {
                    "Turning off vibrator " + getVibratorId());
        }
        controller.off();
        getVibration().stats().reportVibratorOff();
    }

    protected void changeAmplitude(float amplitude) {
@@ -104,6 +105,7 @@ abstract class AbstractVibratorStep extends Step {
                    "Amplitude changed on vibrator " + getVibratorId() + " to " + amplitude);
        }
        controller.setAmplitude(amplitude);
        getVibration().stats().reportSetAmplitude();
    }

    /**
@@ -147,6 +149,8 @@ abstract class AbstractVibratorStep extends Step {
        if (nextSegmentIndex >= effectSize && repeatIndex >= 0) {
            // Count the loops that were played.
            int loopSize = effectSize - repeatIndex;
            int loopSegmentsPlayed = nextSegmentIndex - repeatIndex;
            getVibration().stats().reportRepetition(loopSegmentsPlayed / loopSize);
            nextSegmentIndex = repeatIndex + ((nextSegmentIndex - effectSize) % loopSize);
        }
        Step nextStep = conductor.nextVibrateStep(nextStartTime, controller, effect,
+4 −3
Original line number Diff line number Diff line
@@ -67,9 +67,10 @@ final class ComposePrimitivesVibratorStep extends AbstractVibratorStep {
                Slog.d(VibrationThread.TAG, "Compose " + primitives + " primitives on vibrator "
                        + controller.getVibratorInfo().getId());
            }
            mVibratorOnResult = controller.on(
                    primitives.toArray(new PrimitiveSegment[primitives.size()]),
                    getVibration().id);
            PrimitiveSegment[] primitivesArray =
                    primitives.toArray(new PrimitiveSegment[primitives.size()]);
            mVibratorOnResult = controller.on(primitivesArray, getVibration().id);
            getVibration().stats().reportComposePrimitives(mVibratorOnResult, primitivesArray);

            return nextSteps(/* segmentsPlayed= */ primitives.size());
        } finally {
+3 −2
Original line number Diff line number Diff line
@@ -68,8 +68,9 @@ final class ComposePwleVibratorStep extends AbstractVibratorStep {
                Slog.d(VibrationThread.TAG, "Compose " + pwles + " PWLEs on vibrator "
                        + controller.getVibratorInfo().getId());
            }
            mVibratorOnResult = controller.on(pwles.toArray(new RampSegment[pwles.size()]),
                    getVibration().id);
            RampSegment[] pwlesArray = pwles.toArray(new RampSegment[pwles.size()]);
            mVibratorOnResult = controller.on(pwlesArray, getVibration().id);
            getVibration().stats().reportComposePwle(mVibratorOnResult, pwlesArray);

            return nextSteps(/* segmentsPlayed= */ pwles.size());
        } finally {
+1 −0
Original line number Diff line number Diff line
@@ -62,6 +62,7 @@ final class PerformPrebakedVibratorStep extends AbstractVibratorStep {

            VibrationEffect fallback = getVibration().getFallback(prebaked.getEffectId());
            mVibratorOnResult = controller.on(prebaked, getVibration().id);
            getVibration().stats().reportPerformEffect(mVibratorOnResult, prebaked);

            if (mVibratorOnResult == 0 && prebaked.shouldFallback()
                    && (fallback instanceof VibrationEffect.Composed)) {
Loading