1 /*
2  * Copyright (C) 2021 The Android Open Source Project
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 
17 package android.car.builtin.util;
18 
19 import android.annotation.NonNull;
20 import android.annotation.SystemApi;
21 
22 /**
23  * Wrapper class for {@code android.util.TimingsTraceLog}. Check the class for API documentation.
24  * @hide
25  */
26 @SystemApi(client = SystemApi.Client.MODULE_LIBRARIES)
27 public class TimingsTraceLog {
28 
29     private static final class TimingsTraceLogInternal extends android.util.TimingsTraceLog {
30         private final int mMinDurationMs;
31 
32         /**
33          * Same as {@link TimingsTraceLog} except last argument {@code minDurationMs} which
34          * specifies the minimum duration to log the duration.
35          */
TimingsTraceLogInternal(String tag, long traceTag, int minDurationMs)36         TimingsTraceLogInternal(String tag, long traceTag, int minDurationMs) {
37             super(tag, traceTag);
38             mMinDurationMs = minDurationMs;
39         }
40 
41         @Override
logDuration(String name, long timeMs)42         public void logDuration(String name, long timeMs) {
43             if (timeMs >= mMinDurationMs) {
44                 super.logDuration(name, timeMs);
45             }
46         }
47     }
48 
49     private final TimingsTraceLogInternal mTimingsTraceLog;
50 
TimingsTraceLog(@onNull String tag, long traceTag)51     public TimingsTraceLog(@NonNull String tag, long traceTag) {
52         mTimingsTraceLog = new TimingsTraceLogInternal(tag, traceTag, /* minDurationMs= */ 0);
53     }
54 
TimingsTraceLog(@onNull String tag, long traceTag, int minDurationMs)55     public TimingsTraceLog(@NonNull String tag, long traceTag, int minDurationMs) {
56         mTimingsTraceLog = new TimingsTraceLogInternal(tag, traceTag, minDurationMs);
57     }
58 
59     /** Check {@code android.util.Slog}. */
traceBegin(@onNull String name)60     public void traceBegin(@NonNull String name) {
61         mTimingsTraceLog.traceBegin(name);
62     }
63 
64     /** Check {@code android.util.Slog}. */
traceEnd()65     public void traceEnd() {
66         mTimingsTraceLog.traceEnd();
67     }
68 
69     /** Check {@code android.util.Slog}. */
logDuration(@onNull String name, long timeMs)70     public void logDuration(@NonNull String name, long timeMs) {
71         mTimingsTraceLog.logDuration(name, timeMs);
72     }
73 }
74