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

Commit ac81468f authored by Treehugger Robot's avatar Treehugger Robot Committed by Android (Google) Code Review
Browse files

Merge "Avoid unnecessary inline string allocation when calling Trace.traceBegin" into main

parents 04fb2c4d 7b18842f
Loading
Loading
Loading
Loading
+8 −7
Original line number Diff line number Diff line
@@ -16,6 +16,8 @@

package android.os;

import static android.os.Trace.TRACE_TAG_VIBRATOR;

import android.annotation.CallbackExecutor;
import android.annotation.NonNull;
import android.annotation.Nullable;
@@ -138,14 +140,14 @@ public class SystemVibratorManager extends VibratorManager {
            Log.w(TAG, "Failed to vibrate; no vibrator manager service.");
            return;
        }
        Trace.traceBegin(Trace.TRACE_TAG_VIBRATOR, "vibrate, reason=" + reason);
        Trace.traceBegin(TRACE_TAG_VIBRATOR, "vibrate");
        try {
            mService.vibrate(uid, mContext.getDeviceId(), opPkg, effect, attributes, reason,
                    mToken);
        } catch (RemoteException e) {
            Log.w(TAG, "Failed to vibrate.", e);
        } finally {
            Trace.traceEnd(Trace.TRACE_TAG_VIBRATOR);
            Trace.traceEnd(TRACE_TAG_VIBRATOR);
        }
    }

@@ -155,14 +157,14 @@ public class SystemVibratorManager extends VibratorManager {
            Log.w(TAG, "Failed to perform haptic feedback; no vibrator manager service.");
            return;
        }
        Trace.traceBegin(Trace.TRACE_TAG_VIBRATOR, "performHapticFeedback, reason=" + reason);
        Trace.traceBegin(TRACE_TAG_VIBRATOR, "performHapticFeedback");
        try {
            mService.performHapticFeedback(mUid, mContext.getDeviceId(), mPackageName, constant,
                    reason, flags, privFlags);
        } catch (RemoteException e) {
            Log.w(TAG, "Failed to perform haptic feedback.", e);
        } finally {
            Trace.traceEnd(Trace.TRACE_TAG_VIBRATOR);
            Trace.traceEnd(TRACE_TAG_VIBRATOR);
        }
    }

@@ -174,15 +176,14 @@ public class SystemVibratorManager extends VibratorManager {
                            + " no vibrator manager service.");
            return;
        }
        Trace.traceBegin(Trace.TRACE_TAG_VIBRATOR,
                "performHapticFeedbackForInputDevice, reason=" + reason);
        Trace.traceBegin(TRACE_TAG_VIBRATOR, "performHapticFeedbackForInputDevice");
        try {
            mService.performHapticFeedbackForInputDevice(mUid, mContext.getDeviceId(), mPackageName,
                    constant, inputDeviceId, inputSource, reason, flags, privFlags);
        } catch (RemoteException e) {
            Log.w(TAG, "Failed to perform haptic feedback for input device.", e);
        } finally {
            Trace.traceEnd(Trace.TRACE_TAG_VIBRATOR);
            Trace.traceEnd(TRACE_TAG_VIBRATOR);
        }
    }

+8 −6
Original line number Diff line number Diff line
@@ -16,6 +16,8 @@

package com.android.server.vibrator;

import static android.os.Trace.TRACE_TAG_VIBRATOR;

import android.annotation.NonNull;
import android.annotation.Nullable;
import android.os.PowerManager;
@@ -117,7 +119,7 @@ final class VibrationThread extends Thread {
     *  before the release callback.
     */
    boolean runVibrationOnVibrationThread(VibrationStepConductor conductor) {
        Trace.traceBegin(Trace.TRACE_TAG_VIBRATOR, "runVibrationOnVibrationThread");
        Trace.traceBegin(TRACE_TAG_VIBRATOR, "runVibrationOnVibrationThread");
        try {
            synchronized (mLock) {
                if (mRequestedActiveConductor != null) {
@@ -129,7 +131,7 @@ final class VibrationThread extends Thread {
            }
            return true;
        } finally {
            Trace.traceEnd(Trace.TRACE_TAG_VIBRATOR);
            Trace.traceEnd(TRACE_TAG_VIBRATOR);
        }
    }

@@ -249,17 +251,17 @@ final class VibrationThread extends Thread {
    private void clientVibrationCompleteIfNotAlready(@NonNull Vibration.EndInfo vibrationEndInfo) {
        if (!mCalledVibrationCompleteCallback) {
            mCalledVibrationCompleteCallback = true;
            Trace.traceBegin(Trace.TRACE_TAG_VIBRATOR, "notifyVibrationComplete");
            Trace.traceBegin(TRACE_TAG_VIBRATOR, "notifyVibrationComplete");
            try {
                mExecutingConductor.notifyVibrationComplete(vibrationEndInfo);
            } finally {
                Trace.traceEnd(Trace.TRACE_TAG_VIBRATOR);
                Trace.traceEnd(TRACE_TAG_VIBRATOR);
            }
        }
    }

    private void playVibration() {
        Trace.traceBegin(Trace.TRACE_TAG_VIBRATOR, "playVibration");
        Trace.traceBegin(TRACE_TAG_VIBRATOR, "playVibration");
        try {
            mExecutingConductor.prepareToStart();
            while (!mExecutingConductor.isFinished()) {
@@ -283,7 +285,7 @@ final class VibrationThread extends Thread {
                }
            }
        } finally {
            Trace.traceEnd(Trace.TRACE_TAG_VIBRATOR);
            Trace.traceEnd(TRACE_TAG_VIBRATOR);
        }
    }
}
+26 −22
Original line number Diff line number Diff line
@@ -16,6 +16,8 @@

package com.android.server.vibrator;

import static android.os.Trace.TRACE_TAG_VIBRATOR;

import android.annotation.Nullable;
import android.hardware.vibrator.IVibrator;
import android.os.Binder;
@@ -124,7 +126,7 @@ final class VibratorController {

    /** Reruns the query to the vibrator to load the {@link VibratorInfo}, if not yet successful. */
    public void reloadVibratorInfoIfNeeded() {
        Trace.traceBegin(Trace.TRACE_TAG_VIBRATOR, "VibratorController#reloadVibratorInfoIfNeeded");
        Trace.traceBegin(TRACE_TAG_VIBRATOR, "VibratorController#reloadVibratorInfoIfNeeded");
        try {
            // Early check outside lock, for quick return.
            if (mVibratorInfoLoadSuccessful) {
@@ -143,7 +145,7 @@ final class VibratorController {
                }
            }
        } finally {
            Trace.traceEnd(Trace.TRACE_TAG_VIBRATOR);
            Trace.traceEnd(TRACE_TAG_VIBRATOR);
        }
    }

@@ -199,13 +201,13 @@ final class VibratorController {

    /** Return {@code true} if the underlying vibrator is currently available, false otherwise. */
    public boolean isAvailable() {
        Trace.traceBegin(Trace.TRACE_TAG_VIBRATOR, "VibratorController#isAvailable");
        Trace.traceBegin(TRACE_TAG_VIBRATOR, "VibratorController#isAvailable");
        try {
            synchronized (mLock) {
                return mNativeWrapper.isAvailable();
            }
        } finally {
            Trace.traceEnd(Trace.TRACE_TAG_VIBRATOR);
            Trace.traceEnd(TRACE_TAG_VIBRATOR);
        }
    }

@@ -215,7 +217,9 @@ final class VibratorController {
     * <p>This will affect the state of {@link #isUnderExternalControl()}.
     */
    public void setExternalControl(boolean externalControl) {
        Trace.traceBegin(Trace.TRACE_TAG_VIBRATOR, "setExternalControl(" + externalControl + ")");
        Trace.traceBegin(TRACE_TAG_VIBRATOR,
                externalControl ? "VibratorController#enableExternalControl"
                : "VibratorController#disableExternalControl");
        try {
            if (!mVibratorInfo.hasCapability(IVibrator.CAP_EXTERNAL_CONTROL)) {
                return;
@@ -225,7 +229,7 @@ final class VibratorController {
                mNativeWrapper.setExternalControl(externalControl);
            }
        } finally {
            Trace.traceEnd(Trace.TRACE_TAG_VIBRATOR);
            Trace.traceEnd(TRACE_TAG_VIBRATOR);
        }
    }

@@ -234,7 +238,7 @@ final class VibratorController {
     * if given {@code effect} is {@code null}.
     */
    public void updateAlwaysOn(int id, @Nullable PrebakedSegment prebaked) {
        Trace.traceBegin(Trace.TRACE_TAG_VIBRATOR, "VibratorController#updateAlwaysOn");
        Trace.traceBegin(TRACE_TAG_VIBRATOR, "VibratorController#updateAlwaysOn");
        try {
            if (!mVibratorInfo.hasCapability(IVibrator.CAP_ALWAYS_ON_CONTROL)) {
                return;
@@ -248,13 +252,13 @@ final class VibratorController {
                }
            }
        } finally {
            Trace.traceEnd(Trace.TRACE_TAG_VIBRATOR);
            Trace.traceEnd(TRACE_TAG_VIBRATOR);
        }
    }

    /** Set the vibration amplitude. This will NOT affect the state of {@link #isVibrating()}. */
    public void setAmplitude(float amplitude) {
        Trace.traceBegin(Trace.TRACE_TAG_VIBRATOR, "VibratorController#setAmplitude");
        Trace.traceBegin(TRACE_TAG_VIBRATOR, "VibratorController#setAmplitude");
        try {
            synchronized (mLock) {
                if (mVibratorInfo.hasCapability(IVibrator.CAP_AMPLITUDE_CONTROL)) {
@@ -265,7 +269,7 @@ final class VibratorController {
                }
            }
        } finally {
            Trace.traceEnd(Trace.TRACE_TAG_VIBRATOR);
            Trace.traceEnd(TRACE_TAG_VIBRATOR);
        }
    }

@@ -279,7 +283,7 @@ final class VibratorController {
     * do not support the input or a negative number if the operation failed.
     */
    public long on(long milliseconds, long vibrationId) {
        Trace.traceBegin(Trace.TRACE_TAG_VIBRATOR, "VibratorController#on");
        Trace.traceBegin(TRACE_TAG_VIBRATOR, "VibratorController#on");
        try {
            synchronized (mLock) {
                long duration = mNativeWrapper.on(milliseconds, vibrationId);
@@ -290,7 +294,7 @@ final class VibratorController {
                return duration;
            }
        } finally {
            Trace.traceEnd(Trace.TRACE_TAG_VIBRATOR);
            Trace.traceEnd(TRACE_TAG_VIBRATOR);
        }
    }

@@ -304,7 +308,7 @@ final class VibratorController {
     * do not support the input or a negative number if the operation failed.
     */
    public long on(VibrationEffect.VendorEffect vendorEffect, long vibrationId) {
        Trace.traceBegin(Trace.TRACE_TAG_VIBRATOR, "VibratorController#on (vendor)");
        Trace.traceBegin(TRACE_TAG_VIBRATOR, "VibratorController#on (vendor)");
        synchronized (mLock) {
            Parcel vendorData = Parcel.obtain();
            try {
@@ -320,7 +324,7 @@ final class VibratorController {
                return duration;
            } finally {
                vendorData.recycle();
                Trace.traceEnd(Trace.TRACE_TAG_VIBRATOR);
                Trace.traceEnd(TRACE_TAG_VIBRATOR);
            }
        }
    }
@@ -335,7 +339,7 @@ final class VibratorController {
     * do not support the input or a negative number if the operation failed.
     */
    public long on(PrebakedSegment prebaked, long vibrationId) {
        Trace.traceBegin(Trace.TRACE_TAG_VIBRATOR, "VibratorController#on (Prebaked)");
        Trace.traceBegin(TRACE_TAG_VIBRATOR, "VibratorController#on (Prebaked)");
        try {
            synchronized (mLock) {
                long duration = mNativeWrapper.perform(prebaked.getEffectId(),
@@ -347,7 +351,7 @@ final class VibratorController {
                return duration;
            }
        } finally {
            Trace.traceEnd(Trace.TRACE_TAG_VIBRATOR);
            Trace.traceEnd(TRACE_TAG_VIBRATOR);
        }
    }

@@ -361,7 +365,7 @@ final class VibratorController {
     * do not support the input or a negative number if the operation failed.
     */
    public long on(PrimitiveSegment[] primitives, long vibrationId) {
        Trace.traceBegin(Trace.TRACE_TAG_VIBRATOR, "VibratorController#on (Primitive)");
        Trace.traceBegin(TRACE_TAG_VIBRATOR, "VibratorController#on (Primitive)");
        try {
            if (!mVibratorInfo.hasCapability(IVibrator.CAP_COMPOSE_EFFECTS)) {
                return 0;
@@ -375,7 +379,7 @@ final class VibratorController {
                return duration;
            }
        } finally {
            Trace.traceEnd(Trace.TRACE_TAG_VIBRATOR);
            Trace.traceEnd(TRACE_TAG_VIBRATOR);
        }
    }

@@ -388,7 +392,7 @@ final class VibratorController {
     * @return The duration of the effect playing, or 0 if unsupported.
     */
    public long on(RampSegment[] primitives, long vibrationId) {
        Trace.traceBegin(Trace.TRACE_TAG_VIBRATOR, "VibratorController#on (PWLE)");
        Trace.traceBegin(TRACE_TAG_VIBRATOR, "VibratorController#on (PWLE)");
        try {
            if (!mVibratorInfo.hasCapability(IVibrator.CAP_COMPOSE_PWLE_EFFECTS)) {
                return 0;
@@ -403,7 +407,7 @@ final class VibratorController {
                return duration;
            }
        } finally {
            Trace.traceEnd(Trace.TRACE_TAG_VIBRATOR);
            Trace.traceEnd(TRACE_TAG_VIBRATOR);
        }
    }

@@ -413,7 +417,7 @@ final class VibratorController {
     * <p>This will affect the state of {@link #isVibrating()}.
     */
    public void off() {
        Trace.traceBegin(Trace.TRACE_TAG_VIBRATOR, "VibratorController#off");
        Trace.traceBegin(TRACE_TAG_VIBRATOR, "VibratorController#off");
        try {
            synchronized (mLock) {
                mNativeWrapper.off();
@@ -421,7 +425,7 @@ final class VibratorController {
                notifyListenerOnVibrating(false);
            }
        } finally {
            Trace.traceEnd(Trace.TRACE_TAG_VIBRATOR);
            Trace.traceEnd(TRACE_TAG_VIBRATOR);
        }
    }

+51 −47
Original line number Diff line number Diff line
@@ -16,6 +16,7 @@

package com.android.server.vibrator;

import static android.os.Trace.TRACE_TAG_VIBRATOR;
import static android.os.VibrationAttributes.USAGE_CLASS_ALARM;
import static android.os.VibrationEffect.VibrationParameter.targetAmplitude;
import static android.os.VibrationEffect.VibrationParameter.targetFrequency;
@@ -333,7 +334,7 @@ public class VibratorManagerService extends IVibratorManagerService.Stub {
    @VisibleForTesting
    void systemReady() {
        Slog.v(TAG, "Initializing VibratorManager service...");
        Trace.traceBegin(Trace.TRACE_TAG_VIBRATOR, "systemReady");
        Trace.traceBegin(TRACE_TAG_VIBRATOR, "systemReady");
        try {
            // Will retry to load each vibrator's info, if any request have failed.
            for (int i = 0; i < mVibrators.size(); i++) {
@@ -352,7 +353,7 @@ public class VibratorManagerService extends IVibratorManagerService.Stub {
                mServiceReady = true;
            }
            Slog.v(TAG, "VibratorManager service initialized");
            Trace.traceEnd(Trace.TRACE_TAG_VIBRATOR);
            Trace.traceEnd(TRACE_TAG_VIBRATOR);
        }
    }

@@ -413,7 +414,7 @@ public class VibratorManagerService extends IVibratorManagerService.Stub {
    @Override // Binder call
    public boolean setAlwaysOnEffect(int uid, String opPkg, int alwaysOnId,
            @Nullable CombinedVibration effect, @Nullable VibrationAttributes attrs) {
        Trace.traceBegin(Trace.TRACE_TAG_VIBRATOR, "setAlwaysOnEffect");
        Trace.traceBegin(TRACE_TAG_VIBRATOR, "setAlwaysOnEffect");
        try {
            mContext.enforceCallingOrSelfPermission(
                    android.Manifest.permission.VIBRATE_ALWAYS_ON,
@@ -449,20 +450,25 @@ public class VibratorManagerService extends IVibratorManagerService.Stub {
            }
            return true;
        } finally {
            Trace.traceEnd(Trace.TRACE_TAG_VIBRATOR);
            Trace.traceEnd(TRACE_TAG_VIBRATOR);
        }
    }

    @Override // Binder call
    public void vibrate(int uid, int deviceId, String opPkg, @NonNull CombinedVibration effect,
            @Nullable VibrationAttributes attrs, String reason, IBinder token) {
        Trace.traceBegin(TRACE_TAG_VIBRATOR, "vibrate");
        try {
            vibrateWithPermissionCheck(uid, deviceId, opPkg, effect, attrs, reason, token);
        } finally {
            Trace.traceEnd(TRACE_TAG_VIBRATOR);
        }
    }

    @Override // Binder call
    public void performHapticFeedback(int uid, int deviceId, String opPkg, int constant,
            String reason, int flags, int privFlags) {
        Trace.traceBegin(Trace.TRACE_TAG_VIBRATOR, "performHapticFeedback");
        Trace.traceBegin(TRACE_TAG_VIBRATOR, "performHapticFeedback");
        // Note that the `performHapticFeedback` method does not take a token argument from the
        // caller, and instead, uses this service as the token. This is to mitigate performance
        // impact that would otherwise be caused due to marshal latency. Haptic feedback effects are
@@ -471,7 +477,7 @@ public class VibratorManagerService extends IVibratorManagerService.Stub {
            performHapticFeedbackInternal(uid, deviceId, opPkg, constant, reason, /* token= */
                    this, flags, privFlags);
        } finally {
            Trace.traceEnd(Trace.TRACE_TAG_VIBRATOR);
            Trace.traceEnd(TRACE_TAG_VIBRATOR);
        }
    }

@@ -479,13 +485,13 @@ public class VibratorManagerService extends IVibratorManagerService.Stub {
    public void performHapticFeedbackForInputDevice(int uid, int deviceId, String opPkg,
            int constant, int inputDeviceId, int inputSource, String reason, int flags,
            int privFlags) {
        Trace.traceBegin(Trace.TRACE_TAG_VIBRATOR, "performHapticFeedbackForInputDevice");
        Trace.traceBegin(TRACE_TAG_VIBRATOR, "performHapticFeedbackForInputDevice");
        try {
            performHapticFeedbackForInputDeviceInternal(uid, deviceId, opPkg, constant,
                    inputDeviceId,
                    inputSource, reason, /* token= */ this, flags, privFlags);
        } finally {
            Trace.traceEnd(Trace.TRACE_TAG_VIBRATOR);
            Trace.traceEnd(TRACE_TAG_VIBRATOR);
        }
    }

@@ -563,26 +569,16 @@ public class VibratorManagerService extends IVibratorManagerService.Stub {
    HalVibration vibrateWithPermissionCheck(int uid, int deviceId, String opPkg,
            @NonNull CombinedVibration effect, @Nullable VibrationAttributes attrs,
            String reason, IBinder token) {
        Trace.traceBegin(Trace.TRACE_TAG_VIBRATOR, "vibrate, reason = " + reason);
        try {
        attrs = fixupVibrationAttributes(attrs, effect);
        mContext.enforceCallingOrSelfPermission(
                android.Manifest.permission.VIBRATE, "vibrate");
        return vibrateInternal(uid, deviceId, opPkg, effect, attrs, reason, token);
        } finally {
            Trace.traceEnd(Trace.TRACE_TAG_VIBRATOR);
        }
    }

    HalVibration vibrateWithoutPermissionCheck(int uid, int deviceId, String opPkg,
            @NonNull CombinedVibration effect, @NonNull VibrationAttributes attrs,
            String reason, IBinder token) {
        Trace.traceBegin(Trace.TRACE_TAG_VIBRATOR, "vibrate no perm check, reason = " + reason);
        try {
        return vibrateInternal(uid, deviceId, opPkg, effect, attrs, reason, token);
        } finally {
            Trace.traceEnd(Trace.TRACE_TAG_VIBRATOR);
        }
    }

    private HalVibration vibrateInternal(int uid, int deviceId, String opPkg,
@@ -671,7 +667,7 @@ public class VibratorManagerService extends IVibratorManagerService.Stub {

    @Override // Binder call
    public void cancelVibrate(int usageFilter, IBinder token) {
        Trace.traceBegin(Trace.TRACE_TAG_VIBRATOR, "cancelVibrate");
        Trace.traceBegin(TRACE_TAG_VIBRATOR, "cancelVibrate");
        try {
            mContext.enforceCallingOrSelfPermission(
                    android.Manifest.permission.VIBRATE,
@@ -708,7 +704,7 @@ public class VibratorManagerService extends IVibratorManagerService.Stub {
                }
            }
        } finally {
            Trace.traceEnd(Trace.TRACE_TAG_VIBRATOR);
            Trace.traceEnd(TRACE_TAG_VIBRATOR);
        }
    }

@@ -899,7 +895,7 @@ public class VibratorManagerService extends IVibratorManagerService.Stub {
    @GuardedBy("mLock")
    @Nullable
    private Vibration.EndInfo startVibrationLocked(HalVibration vib) {
        Trace.traceBegin(Trace.TRACE_TAG_VIBRATOR, "startVibrationLocked");
        Trace.traceBegin(TRACE_TAG_VIBRATOR, "startVibrationLocked");
        try {
            if (mInputDeviceDelegate.isAvailable()) {
                return startVibrationOnInputDevicesLocked(vib);
@@ -919,7 +915,7 @@ public class VibratorManagerService extends IVibratorManagerService.Stub {
            mNextVibration = conductor;
            return null;
        } finally {
            Trace.traceEnd(Trace.TRACE_TAG_VIBRATOR);
            Trace.traceEnd(TRACE_TAG_VIBRATOR);
        }
    }

@@ -930,7 +926,7 @@ public class VibratorManagerService extends IVibratorManagerService.Stub {
        int mode = startAppOpModeLocked(vib.callerInfo);
        switch (mode) {
            case AppOpsManager.MODE_ALLOWED:
                Trace.asyncTraceBegin(Trace.TRACE_TAG_VIBRATOR, "vibration", 0);
                Trace.asyncTraceBegin(TRACE_TAG_VIBRATOR, "vibration", 0);
                // Make sure mCurrentVibration is set while triggering the VibrationThread.
                mCurrentVibration = conductor;
                if (!mCurrentVibration.linkToDeath()) {
@@ -1581,7 +1577,7 @@ public class VibratorManagerService extends IVibratorManagerService.Stub {

        @Override
        public boolean prepareSyncedVibration(long requiredCapabilities, int[] vibratorIds) {
            Trace.traceBegin(Trace.TRACE_TAG_VIBRATOR, "prepareSyncedVibration");
            Trace.traceBegin(TRACE_TAG_VIBRATOR, "prepareSyncedVibration");
            try {
                if ((mCapabilities & requiredCapabilities) != requiredCapabilities) {
                    // This sync step requires capabilities this device doesn't have, skipping
@@ -1590,33 +1586,33 @@ public class VibratorManagerService extends IVibratorManagerService.Stub {
                }
                return mNativeWrapper.prepareSynced(vibratorIds);
            } finally {
                Trace.traceEnd(Trace.TRACE_TAG_VIBRATOR);
                Trace.traceEnd(TRACE_TAG_VIBRATOR);
            }
        }

        @Override
        public boolean triggerSyncedVibration(long vibrationId) {
            Trace.traceBegin(Trace.TRACE_TAG_VIBRATOR, "triggerSyncedVibration");
            Trace.traceBegin(TRACE_TAG_VIBRATOR, "triggerSyncedVibration");
            try {
                return mNativeWrapper.triggerSynced(vibrationId);
            } finally {
                Trace.traceEnd(Trace.TRACE_TAG_VIBRATOR);
                Trace.traceEnd(TRACE_TAG_VIBRATOR);
            }
        }

        @Override
        public void cancelSyncedVibration() {
            Trace.traceBegin(Trace.TRACE_TAG_VIBRATOR, "cancelSyncedVibration");
            Trace.traceBegin(TRACE_TAG_VIBRATOR, "cancelSyncedVibration");
            try {
                mNativeWrapper.cancelSynced();
            } finally {
                Trace.traceEnd(Trace.TRACE_TAG_VIBRATOR);
                Trace.traceEnd(TRACE_TAG_VIBRATOR);
            }
        }

        @Override
        public void noteVibratorOn(int uid, long duration) {
            Trace.traceBegin(Trace.TRACE_TAG_VIBRATOR, "noteVibratorOn");
            Trace.traceBegin(TRACE_TAG_VIBRATOR, "noteVibratorOn");
            try {
                if (duration <= 0) {
                    // Tried to turn vibrator ON and got:
@@ -1635,20 +1631,20 @@ public class VibratorManagerService extends IVibratorManagerService.Stub {
            } catch (RemoteException e) {
                Slog.e(TAG, "Error logging VibratorStateChanged to ON", e);
            } finally {
                Trace.traceEnd(Trace.TRACE_TAG_VIBRATOR);
                Trace.traceEnd(TRACE_TAG_VIBRATOR);
            }
        }

        @Override
        public void noteVibratorOff(int uid) {
            Trace.traceBegin(Trace.TRACE_TAG_VIBRATOR, "noteVibratorOff");
            Trace.traceBegin(TRACE_TAG_VIBRATOR, "noteVibratorOff");
            try {
                mBatteryStatsService.noteVibratorOff(uid);
                mFrameworkStatsLogger.writeVibratorStateOffAsync(uid);
            } catch (RemoteException e) {
                Slog.e(TAG, "Error logging VibratorStateChanged to OFF", e);
            } finally {
                Trace.traceEnd(Trace.TRACE_TAG_VIBRATOR);
                Trace.traceEnd(TRACE_TAG_VIBRATOR);
            }
        }

@@ -1657,7 +1653,8 @@ public class VibratorManagerService extends IVibratorManagerService.Stub {
            if (DEBUG) {
                Slog.d(TAG, "VibrationThread released after finished vibration");
            }
            Trace.traceBegin(Trace.TRACE_TAG_VIBRATOR, "onVibrationThreadReleased: " + vibrationId);
            Trace.traceBegin(TRACE_TAG_VIBRATOR, "onVibrationThreadReleased");

            try {
                synchronized (mLock) {
                    if (DEBUG) {
@@ -1686,7 +1683,7 @@ public class VibratorManagerService extends IVibratorManagerService.Stub {
                    }
                }
            } finally {
                Trace.traceEnd(Trace.TRACE_TAG_VIBRATOR);
                Trace.traceEnd(TRACE_TAG_VIBRATOR);
            }
        }
    }
@@ -1994,7 +1991,7 @@ public class VibratorManagerService extends IVibratorManagerService.Stub {

        @Override
        public ExternalVibrationScale onExternalVibrationStart(ExternalVibration vib) {
            Trace.traceBegin(Trace.TRACE_TAG_VIBRATOR, "onExternalVibrationStart");
            Trace.traceBegin(TRACE_TAG_VIBRATOR, "onExternalVibrationStart");
            try {
                // Create Vibration.Stats as close to the received request as possible, for
                // tracking.
@@ -2116,13 +2113,13 @@ public class VibratorManagerService extends IVibratorManagerService.Stub {
                    return externalVibration.getScale();
                }
            } finally {
                Trace.traceEnd(Trace.TRACE_TAG_VIBRATOR);
                Trace.traceEnd(TRACE_TAG_VIBRATOR);
            }
        }

        @Override
        public void onExternalVibrationStop(ExternalVibration vib) {
            Trace.traceBegin(Trace.TRACE_TAG_VIBRATOR, "onExternalVibrationStop");
            Trace.traceBegin(TRACE_TAG_VIBRATOR, "onExternalVibrationStop");
            try {
                synchronized (mLock) {
                    if (mCurrentExternalVibration != null
@@ -2135,7 +2132,7 @@ public class VibratorManagerService extends IVibratorManagerService.Stub {
                    }
                }
            } finally {
                Trace.traceEnd(Trace.TRACE_TAG_VIBRATOR);
                Trace.traceEnd(TRACE_TAG_VIBRATOR);
            }
        }

@@ -2203,32 +2200,39 @@ public class VibratorManagerService extends IVibratorManagerService.Stub {

        @Override
        public int onCommand(String cmd) {
            Trace.traceBegin(Trace.TRACE_TAG_VIBRATOR, "onCommand " + cmd);
            try {
                if ("list".equals(cmd)) {
                    Trace.traceBegin(TRACE_TAG_VIBRATOR, "onCommand: list");
                    return runListVibrators();
                }
                if ("synced".equals(cmd)) {
                    Trace.traceBegin(TRACE_TAG_VIBRATOR, "onCommand: synced");
                    return runMono();
                }
                if ("combined".equals(cmd)) {
                    Trace.traceBegin(TRACE_TAG_VIBRATOR, "onCommand: combined");
                    return runStereo();
                }
                if ("sequential".equals(cmd)) {
                    Trace.traceBegin(TRACE_TAG_VIBRATOR, "onCommand: sequential");
                    return runSequential();
                }
                if ("xml".equals(cmd)) {
                    Trace.traceBegin(TRACE_TAG_VIBRATOR, "onCommand: xml");
                    return runXml();
                }
                if ("cancel".equals(cmd)) {
                    Trace.traceBegin(TRACE_TAG_VIBRATOR, "onCommand: cancel");
                    return runCancel();
                }
                if ("feedback".equals(cmd)) {
                    Trace.traceBegin(TRACE_TAG_VIBRATOR, "onCommand: feedback");
                    return runHapticFeedback();
                }
                Trace.traceBegin(TRACE_TAG_VIBRATOR, "onCommand: default");
                return handleDefaultCommands(cmd);
            } finally {
                Trace.traceEnd(Trace.TRACE_TAG_VIBRATOR);
                Trace.traceEnd(TRACE_TAG_VIBRATOR);
            }
        }