blob: 3fbe6fe8a4e5b83ab4bc915786b1bd2516d9946a [file] [log] [blame]
Svetoslav1376d602014-03-13 11:17:26 -07001/*
2 * Copyright (C) 2014 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
17package android.view;
18
Svetoslav1376d602014-03-13 11:17:26 -070019/**
20 * This is the base class for frame statistics.
21 */
22public abstract class FrameStats {
23 /**
24 * Undefined time.
25 */
26 public static final long UNDEFINED_TIME_NANO = -1;
27
Svetoslav53dcd392014-09-04 18:37:31 -070028 /** @hide */
Svetoslav1376d602014-03-13 11:17:26 -070029 protected long mRefreshPeriodNano;
Svetoslav53dcd392014-09-04 18:37:31 -070030
31 /** @hide */
Svetoslav1376d602014-03-13 11:17:26 -070032 protected long[] mFramesPresentedTimeNano;
33
34 /**
35 * Gets the refresh period of the display hosting the window(s) for
36 * which these statistics apply.
37 *
38 * @return The refresh period in nanoseconds.
39 */
40 public final long getRefreshPeriodNano() {
41 return mRefreshPeriodNano;
42 }
43
44 /**
45 * Gets the number of frames for which there is data.
46 *
47 * @return The number of frames.
48 */
49 public final int getFrameCount() {
50 return mFramesPresentedTimeNano != null
51 ? mFramesPresentedTimeNano.length : 0;
52 }
53
54 /**
55 * Gets the start time of the interval for which these statistics
56 * apply. The start interval is the time when the first frame was
57 * presented.
58 *
59 * @return The start time in nanoseconds or {@link #UNDEFINED_TIME_NANO}
60 * if there is no frame data.
61 */
62 public final long getStartTimeNano() {
63 if (getFrameCount() <= 0) {
64 return UNDEFINED_TIME_NANO;
65 }
66 return mFramesPresentedTimeNano[0];
67 }
68
69 /**
70 * Gets the end time of the interval for which these statistics
71 * apply. The end interval is the time when the last frame was
72 * presented.
73 *
74 * @return The end time in nanoseconds or {@link #UNDEFINED_TIME_NANO}
75 * if there is no frame data.
76 */
77 public final long getEndTimeNano() {
78 if (getFrameCount() <= 0) {
79 return UNDEFINED_TIME_NANO;
80 }
81 return mFramesPresentedTimeNano[mFramesPresentedTimeNano.length - 1];
82 }
83
84 /**
85 * Get the time a frame at a given index was presented.
86 *
87 * @param index The frame index.
88 * @return The presented time in nanoseconds or {@link #UNDEFINED_TIME_NANO}
89 * if the frame is not presented yet.
90 */
91 public final long getFramePresentedTimeNano(int index) {
92 if (mFramesPresentedTimeNano == null) {
93 throw new IndexOutOfBoundsException();
94 }
95 return mFramesPresentedTimeNano[index];
96 }
97}