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

Commit 4d1f6724 authored by Sudheer Shanka's avatar Sudheer Shanka
Browse files

Add tracing to record battery changed broadcast event.

Bug: 365410144
Test: manual
Flag: com.android.server.flags.trace_battery_changed_broadcast_event
Change-Id: I279cb8dc8f1097e5e3b6e898cca721c1ccadee6a
parent 784140a0
Loading
Loading
Loading
Loading
+57 −5
Original line number Original line Diff line number Diff line
@@ -238,13 +238,16 @@ public final class BatteryService extends SystemService {
                final SomeArgs args = (SomeArgs) msg.obj;
                final SomeArgs args = (SomeArgs) msg.obj;
                final Context context;
                final Context context;
                final Intent intent;
                final Intent intent;
                final boolean forceUpdate;
                try {
                try {
                    context = (Context) args.arg1;
                    context = (Context) args.arg1;
                    intent = (Intent) args.arg2;
                    intent = (Intent) args.arg2;
                    forceUpdate = (Boolean) args.arg3;
                } finally {
                } finally {
                    args.recycle();
                    args.recycle();
                }
                }
                broadcastBatteryChangedIntent(context, intent, BATTERY_CHANGED_OPTIONS);
                broadcastBatteryChangedIntent(context, intent, BATTERY_CHANGED_OPTIONS,
                        forceUpdate);
                return true;
                return true;
            }
            }
            case MSG_BROADCAST_POWER_CONNECTION_CHANGED: {
            case MSG_BROADCAST_POWER_CONNECTION_CHANGED: {
@@ -798,7 +801,7 @@ public final class BatteryService extends SystemService {
            // We are doing this after sending the above broadcasts, so anything processing
            // We are doing this after sending the above broadcasts, so anything processing
            // them will get the new sequence number at that point.  (See for example how testing
            // them will get the new sequence number at that point.  (See for example how testing
            // of JobScheduler's BatteryController works.)
            // of JobScheduler's BatteryController works.)
            sendBatteryChangedIntentLocked();
            sendBatteryChangedIntentLocked(force);
            if (mLastBatteryLevel != mHealthInfo.batteryLevel || mLastPlugType != mPlugType) {
            if (mLastBatteryLevel != mHealthInfo.batteryLevel || mLastPlugType != mPlugType) {
                sendBatteryLevelChangedIntentLocked();
                sendBatteryLevelChangedIntentLocked();
            }
            }
@@ -829,7 +832,7 @@ public final class BatteryService extends SystemService {
        }
        }
    }
    }


    private void sendBatteryChangedIntentLocked() {
    private void sendBatteryChangedIntentLocked(boolean forceUpdate) {
        //  Pack up the values and broadcast them to everyone
        //  Pack up the values and broadcast them to everyone
        final Intent intent = new Intent(Intent.ACTION_BATTERY_CHANGED);
        final Intent intent = new Intent(Intent.ACTION_BATTERY_CHANGED);
        intent.addFlags(Intent.FLAG_RECEIVER_REGISTERED_ONLY
        intent.addFlags(Intent.FLAG_RECEIVER_REGISTERED_ONLY
@@ -869,15 +872,17 @@ public final class BatteryService extends SystemService {
            final SomeArgs args = SomeArgs.obtain();
            final SomeArgs args = SomeArgs.obtain();
            args.arg1 = mContext;
            args.arg1 = mContext;
            args.arg2 = intent;
            args.arg2 = intent;
            args.arg3 = forceUpdate;
            mHandler.obtainMessage(MSG_BROADCAST_BATTERY_CHANGED, args).sendToTarget();
            mHandler.obtainMessage(MSG_BROADCAST_BATTERY_CHANGED, args).sendToTarget();
        } else {
        } else {
            mHandler.post(() -> broadcastBatteryChangedIntent(mContext,
            mHandler.post(() -> broadcastBatteryChangedIntent(mContext,
                    intent, BATTERY_CHANGED_OPTIONS));
                    intent, BATTERY_CHANGED_OPTIONS, forceUpdate));
        }
        }
    }
    }


    private static void broadcastBatteryChangedIntent(Context context, Intent intent,
    private static void broadcastBatteryChangedIntent(Context context, Intent intent,
            Bundle options) {
            Bundle options, boolean forceUpdate) {
        traceBatteryChangedBroadcastEvent(intent, forceUpdate);
        // TODO (293959093): It is important that SystemUI receives this broadcast as soon as
        // TODO (293959093): It is important that SystemUI receives this broadcast as soon as
        // possible. Ideally, it should be using binder callbacks but until then, dispatch this
        // possible. Ideally, it should be using binder callbacks but until then, dispatch this
        // as a foreground broadcast to SystemUI.
        // as a foreground broadcast to SystemUI.
@@ -895,6 +900,53 @@ public final class BatteryService extends SystemService {
                AppOpsManager.OP_NONE, options, UserHandle.USER_ALL);
                AppOpsManager.OP_NONE, options, UserHandle.USER_ALL);
    }
    }


    private static void traceBatteryChangedBroadcastEvent(Intent intent, boolean forceUpdate) {
        if (!com.android.server.flags.Flags.traceBatteryChangedBroadcastEvent()) {
            return;
        }
        if (!Trace.isTagEnabled(Trace.TRACE_TAG_SYSTEM_SERVER)) return;

        final StringBuilder builder = new StringBuilder();
        builder.append("broadcastBatteryChanged; ");
        builder.append("force="); builder.append(forceUpdate);
        builder.append(",seq="); builder.append(intent.getIntExtra(
                BatteryManager.EXTRA_SEQUENCE, -1));
        builder.append(",s="); builder.append(intent.getIntExtra(
                BatteryManager.EXTRA_STATUS, -1));
        builder.append(",h="); builder.append(intent.getIntExtra(
                BatteryManager.EXTRA_HEALTH, -1));
        builder.append(",p="); builder.append(intent.getBooleanExtra(
                BatteryManager.EXTRA_PRESENT, false));
        builder.append(",l="); builder.append(intent.getIntExtra(
                BatteryManager.EXTRA_LEVEL, -1));
        builder.append(",bl="); builder.append(intent.getBooleanExtra(
                BatteryManager.EXTRA_BATTERY_LOW, false));
        builder.append(",sc="); builder.append(intent.getIntExtra(
                BatteryManager.EXTRA_SCALE, -1));
        builder.append(",pt="); builder.append(intent.getIntExtra(
                BatteryManager.EXTRA_PLUGGED, -1));
        builder.append(",v="); builder.append(intent.getIntExtra(
                BatteryManager.EXTRA_VOLTAGE, -1));
        builder.append(",t="); builder.append(intent.getIntExtra(
                BatteryManager.EXTRA_TEMPERATURE, -1));
        builder.append(",tech="); builder.append(intent.getStringExtra(
                BatteryManager.EXTRA_TECHNOLOGY));
        builder.append(",invc="); builder.append(intent.getIntExtra(
                BatteryManager.EXTRA_INVALID_CHARGER, -1));
        builder.append(",mcc="); builder.append(intent.getIntExtra(
                BatteryManager.EXTRA_MAX_CHARGING_CURRENT, -1));
        builder.append(",mcv="); builder.append(intent.getIntExtra(
                BatteryManager.EXTRA_MAX_CHARGING_VOLTAGE, -1));
        builder.append(",chc="); builder.append(intent.getIntExtra(
                BatteryManager.EXTRA_CHARGE_COUNTER, -1));
        builder.append(",cc="); builder.append(intent.getIntExtra(
                BatteryManager.EXTRA_CYCLE_COUNT, -1));
        builder.append(",chs="); builder.append(intent.getIntExtra(
                BatteryManager.EXTRA_CHARGING_STATUS, -1));

        Trace.instant(Trace.TRACE_TAG_SYSTEM_SERVER, builder.toString());
    }

    private void sendBatteryLevelChangedIntentLocked() {
    private void sendBatteryLevelChangedIntentLocked() {
        Bundle event = new Bundle();
        Bundle event = new Bundle();
        long now = SystemClock.elapsedRealtime();
        long now = SystemClock.elapsedRealtime();
+11 −0
Original line number Original line Diff line number Diff line
@@ -56,3 +56,14 @@ flag {
        purpose: PURPOSE_BUGFIX
        purpose: PURPOSE_BUGFIX
    }
    }
}
}

flag {
    namespace: "backstage_power"
    name: "trace_battery_changed_broadcast_event"
    description: "Add tracing to record battery changed broadcast event"
    bug: "365410144"
    is_fixed_read_only: true
    metadata {
        purpose: PURPOSE_BUGFIX
    }
}