chromium/base/android/javatests/src/org/chromium/base/jank_tracker/JankTrackerTest.java

// Copyright 2024 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

package org.chromium.base.jank_tracker;

import androidx.test.filters.SmallTest;

import org.junit.Assert;
import org.junit.Test;
import org.junit.runner.RunWith;

import org.chromium.base.test.BaseJUnit4ClassRunner;
import org.chromium.base.test.util.DoNotBatch;

@RunWith(BaseJUnit4ClassRunner.class)
@DoNotBatch(reason = "Test spawns a new thread, ideally don't batch with other tests.")
public class JankTrackerTest {

    private int numThreadsWithName(String name) {
        int count = 0;
        for (Thread thread : Thread.getAllStackTraces().keySet()) {
            if (thread.getName().equals(name)) {
                count++;
            }
        }
        return count;
    }

    @Test
    @SmallTest
    public void testOneJankTrackerThreadForMultipleSchedulers() {
        Assert.assertEquals(0, numThreadsWithName("Jank-Tracker"));

        JankReportingScheduler scheduler = new JankReportingScheduler(new FrameMetricsStore());
        // To trigger static initialization.
        scheduler.getOrCreateHandler();
        Assert.assertEquals(1, numThreadsWithName("Jank-Tracker"));

        JankReportingScheduler scheduler2 = new JankReportingScheduler(new FrameMetricsStore());
        scheduler2.getOrCreateHandler();
        Assert.assertEquals(1, numThreadsWithName("Jank-Tracker"));
    }
}