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

Commit 743708b8 authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Android (Google) Code Review
Browse files

Merge "Revert "Fix the memory leak in BatteryStatsImpl.Timebase.mObservers.""

parents 2f0d41b1 6fc752c7
Loading
Loading
Loading
Loading
+12 −25
Original line number Diff line number Diff line
@@ -106,7 +106,6 @@ import java.io.FileOutputStream;
import java.io.IOException;
import java.io.PrintWriter;
import java.nio.charset.StandardCharsets;
import java.lang.ref.WeakReference;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Calendar;
@@ -1062,7 +1061,7 @@ public class BatteryStatsImpl extends BatteryStats {
    // methods are protected not private to be VisibleForTesting
    public static class TimeBase {
        protected final ArrayList<WeakReference<TimeBaseObs>> mObservers = new ArrayList<>();
        protected final ArrayList<TimeBaseObs> mObservers = new ArrayList<>();
        protected long mUptime;
        protected long mRealtime;
@@ -1106,24 +1105,17 @@ public class BatteryStatsImpl extends BatteryStats {
        }
        public void add(TimeBaseObs observer) {
            mObservers.add(new WeakReference<TimeBaseObs>(observer));
            mObservers.add(observer);
        }
        public void remove(TimeBaseObs observer) {
           if (!mObservers.removeIf(ref -> ref.get() == observer)) {
            if (!mObservers.remove(observer)) {
                Slog.wtf(TAG, "Removed unknown observer: " + observer);
            }
        }
        public boolean hasObserver(TimeBaseObs observer) {
            Iterator<WeakReference<TimeBaseObs>> i = mObservers.iterator();
            while (i.hasNext()) {
                TimeBaseObs obs = i.next().get();
                if (obs == observer) {
                    return true;
                }
            }
            return false;
            return mObservers.contains(observer);
        }
        public void init(long uptime, long realtime) {
@@ -1212,11 +1204,9 @@ public class BatteryStatsImpl extends BatteryStats {
                    mRealtimeStart = realtime;
                    long batteryUptime = mUnpluggedUptime = getUptime(uptime);
                    long batteryRealtime = mUnpluggedRealtime = getRealtime(realtime);
                    for (WeakReference<TimeBaseObs> ref : mObservers) {
                        TimeBaseObs obs = ref.get();
                        if (obs != null) {
                            obs.onTimeStarted(realtime, batteryUptime, batteryRealtime);
                        }
                    for (int i = mObservers.size() - 1; i >= 0; i--) {
                        mObservers.get(i).onTimeStarted(realtime, batteryUptime, batteryRealtime);
                    }
                } else {
                    mPastUptime += uptime - mUptimeStart;
@@ -1224,14 +1214,11 @@ public class BatteryStatsImpl extends BatteryStats {
                    long batteryUptime = getUptime(uptime);
                    long batteryRealtime = getRealtime(realtime);
                    for (WeakReference<TimeBaseObs> ref : mObservers) {
                        TimeBaseObs obs = ref.get();
                        if (obs != null) {
                            obs.onTimeStopped(realtime, batteryUptime, batteryRealtime);
                        }
                    for (int i = mObservers.size() - 1; i >= 0; i--) {
                        mObservers.get(i).onTimeStopped(realtime, batteryUptime, batteryRealtime);
                    }
                }
                mObservers.removeIf(ref -> ref.get() == null);
                return true;
            }
            return false;