| /* |
| * Copyright (C) 2017 The Android Open Source Project |
| * |
| * Licensed under the Apache License, Version 2.0 (the "License"); |
| * you may not use this file except in compliance with the License. |
| * You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| * See the License for the specific language governing permissions and |
| * limitations under the License. |
| */ |
| |
| package com.android.tv.perf; |
| |
| import static com.android.tv.perf.EventNames.EventName; |
| |
| import android.content.Context; |
| import com.google.errorprone.annotations.CompileTimeConstant; |
| |
| /** Measures Performance. */ |
| public interface PerformanceMonitor { |
| |
| /** |
| * Starts monitoring application's lifecylce for interesting memory events, captures and records |
| * memory usage data whenever these events are fired. |
| */ |
| void startMemoryMonitor(); |
| |
| /** |
| * Collects and records memory usage for a specific custom event |
| * |
| * @param eventName to record |
| */ |
| void recordMemory(@EventName @CompileTimeConstant String eventName); |
| |
| /** |
| * Starts a timer for a global event to allow measuring the event's latency across activities If |
| * multiple events with the same name are started, only the last event is retained. |
| * |
| * @param eventName for which the timer starts |
| */ |
| void startGlobalTimer(@EventName @CompileTimeConstant String eventName); |
| |
| /** |
| * Stops a cross activities timer for a specific eventName and records the timer duration. If no |
| * timer found for the event specified an error will be logged, and recording will be skipped. |
| * |
| * @param eventName for which the timer stops |
| */ |
| void stopGlobalTimer(@EventName @CompileTimeConstant String eventName); |
| |
| /** |
| * Starts a timer to record latency of a specific scenario or event. Use this method to track |
| * latency in the same method/class |
| * |
| * @return TimerEvent object to be used for stopping/recording the timer for a specific event. |
| * If PerformanceMonitor is not initialized for any reason, an empty TimerEvent will be |
| * returned. |
| */ |
| TimerEvent startTimer(); |
| |
| /** |
| * Stops timer for a specific event and records the timer duration. passing a null TimerEvent |
| * will cause this operation to be skipped. |
| * |
| * @param event that needs to be stopped |
| * @param eventName for which the timer stops. This must be constant with no PII. |
| */ |
| void stopTimer(TimerEvent event, @EventName @CompileTimeConstant String eventName); |
| |
| /** |
| * Starts recording jank for a specific scenario or event. |
| * |
| * <p>If jank recording was started already for an event with the current name, but was never |
| * stopped, the previously recorded event will be skipped. |
| * |
| * @param eventName of the event for which tracking is started |
| */ |
| void startJankRecorder(@EventName @CompileTimeConstant String eventName); |
| |
| /** |
| * Stops recording jank for a specific event and records the jank event. |
| * |
| * @param eventName of the event that needs to be stopped |
| */ |
| void stopJankRecorder(@EventName @CompileTimeConstant String eventName); |
| |
| /** |
| * Starts activity to display PerformanceMonitor events recorded in local database for debug |
| * purpose. |
| * |
| * @return true if the activity is available to start |
| */ |
| boolean startPerformanceMonitorEventDebugActivity(Context context); |
| |
| /** |
| * Initialize crash monitoring for an app by wrapping the default {@link |
| * Thread.UncaughtExceptionHandler} with a handler that can report crashes to the performance |
| * montitor and then delegate the handling of the UncaughtException to the original default |
| * {@link Thread.UncaughtExceptionHandler}. |
| * |
| * <p>Note: This will override the current {@link Thread.UncaughtExceptionHandler}. |
| */ |
| void startCrashMonitor(); |
| } |