• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // Copyright 2023 The Chromium Authors
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4 
5 package org.chromium.base.jank_tracker;
6 
7 import android.view.Window;
8 
9 import org.chromium.base.Log;
10 
11 /**
12  * A simple holder class to enable easy starting and stopping of metric listening as well as
13  * periodic reporting. This is used by JankTrackerImpl to hold the listener reference and this class
14  * should be hooked up to some sort of listener to when to start/stop listening and periodic
15  * metrics.
16  */
17 public class JankTrackerStateController {
18     private static final String TAG = "JankTracker";
19     protected final FrameMetricsListener mFrameMetricsListener;
20     protected final JankReportingScheduler mReportingScheduler;
21 
JankTrackerStateController( FrameMetricsListener listener, JankReportingScheduler scheduler)22     public JankTrackerStateController(
23             FrameMetricsListener listener, JankReportingScheduler scheduler) {
24         mFrameMetricsListener = listener;
25         mReportingScheduler = scheduler;
26     }
27 
startPeriodicReporting()28     public void startPeriodicReporting() {
29         mReportingScheduler.startReportingPeriodicMetrics();
30     }
31 
stopPeriodicReporting()32     public void stopPeriodicReporting() {
33         mReportingScheduler.stopReportingPeriodicMetrics();
34     }
35 
startMetricCollection(Window window)36     public void startMetricCollection(Window window) {
37         mFrameMetricsListener.setIsListenerRecording(true);
38         if (window != null) {
39             window.addOnFrameMetricsAvailableListener(
40                     mFrameMetricsListener, mReportingScheduler.getOrCreateHandler());
41         }
42     }
43 
stopMetricCollection(Window window)44     public void stopMetricCollection(Window window) {
45         mFrameMetricsListener.setIsListenerRecording(false);
46         if (window != null) {
47             try {
48                 window.removeOnFrameMetricsAvailableListener(mFrameMetricsListener);
49             } catch (IllegalArgumentException e) {
50                 // Adding the listener failed for whatever reason, so it could not be unregistered.
51                 Log.e(
52                         TAG,
53                         "Could not remove listener %s from window %s",
54                         mFrameMetricsListener,
55                         window);
56             }
57         }
58     }
59 
60     // Extra methods for subclasses that need to perform extra work on initialization/destruction.
initialize()61     public void initialize() {}
62 
destroy()63     public void destroy() {}
64 }
65