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

Commit 1cc13b6d authored by Brad Fitzpatrick's avatar Brad Fitzpatrick
Browse files

Annotate ListView with StrictMode.Span

Change-Id: Ibee1bfa73c85dac2e8103eb5900f0609cbb30ee7
parent 0dcea08a
Loading
Loading
Loading
Loading
+5 −1
Original line number Diff line number Diff line
@@ -1276,11 +1276,14 @@ public final class StrictMode {
                    state.mActiveHead = mNext;
                }

                state.mActiveSize--;

                if (LOG_V) Log.d(TAG, "Span finished=" + mName + "; size=" + state.mActiveSize);

                this.mCreateMillis = -1;
                this.mName = null;
                this.mPrev = null;
                this.mNext = null;
                state.mActiveSize--;

                // Add ourselves to the freeList, if it's not already
                // too big.
@@ -1367,6 +1370,7 @@ public final class StrictMode {
            if (span.mNext != null) {
                span.mNext.mPrev = span;
            }
            if (LOG_V) Log.d(TAG, "Span enter=" + name + "; size=" + state.mActiveSize);
        }
        return span;
    }
+39 −0
Original line number Diff line number Diff line
@@ -29,6 +29,7 @@ import android.os.Debug;
import android.os.Handler;
import android.os.Parcel;
import android.os.Parcelable;
import android.os.StrictMode;
import android.text.Editable;
import android.text.TextUtils;
import android.text.TextWatcher;
@@ -459,6 +460,15 @@ public abstract class AbsListView extends AdapterView<ListAdapter> implements Te
    private static final boolean PROFILE_FLINGING = false;
    private boolean mFlingProfilingStarted = false;

    /**
     * The StrictMode "critical time span" objects to catch animation
     * stutters.  Non-null when a time-sensitive animation is
     * in-flight.  Must call finish() on them when done animating.
     * These are no-ops on user builds.
     */
    private StrictMode.Span mScrollStrictSpan = null;
    private StrictMode.Span mFlingStrictSpan = null;

    /**
     * The last CheckForLongPress runnable we posted, if any
     */
@@ -2089,6 +2099,16 @@ public abstract class AbsListView extends AdapterView<ListAdapter> implements Te
            mAdapter.unregisterDataSetObserver(mDataSetObserver);
            mDataSetObserver = null;
        }

        if (mScrollStrictSpan != null) {
            mScrollStrictSpan.finish();
            mScrollStrictSpan = null;
        }

        if (mFlingStrictSpan != null) {
            mFlingStrictSpan.finish();
            mFlingStrictSpan = null;
        }
    }

    @Override
@@ -2559,6 +2579,11 @@ public abstract class AbsListView extends AdapterView<ListAdapter> implements Te
                    }
                }

                if (mScrollStrictSpan == null) {
                    // If it's non-null, we're already in a scroll.
                    mScrollStrictSpan = StrictMode.enterCriticalSpan("AbsListView-scroll");
                }

                if (y != mLastY) {
                    // We may be here after stopping a fling and continuing to scroll.
                    // If so, we haven't disallowed intercepting touch events yet.
@@ -2722,6 +2747,11 @@ public abstract class AbsListView extends AdapterView<ListAdapter> implements Te
                    mScrollProfilingStarted = false;
                }
            }

            if (mScrollStrictSpan != null) {
                mScrollStrictSpan.finish();
                mScrollStrictSpan = null;
            }
            break;
        }

@@ -2934,6 +2964,10 @@ public abstract class AbsListView extends AdapterView<ListAdapter> implements Te
                    mFlingProfilingStarted = true;
                }
            }

            if (mFlingStrictSpan == null) {
                mFlingStrictSpan = StrictMode.enterCriticalSpan("AbsListView-fling");
            }
        }

        void startScroll(int distance, int duration) {
@@ -3012,6 +3046,11 @@ public abstract class AbsListView extends AdapterView<ListAdapter> implements Te
                            mFlingProfilingStarted = false;
                        }
                    }

                    if (mFlingStrictSpan != null) {
                        mFlingStrictSpan.finish();
                        mFlingStrictSpan = null;
                    }
                }
                break;
            }