11376d600d8e0eefdbc0aa11d398cf7517fc77129Svetoslav/* 21376d600d8e0eefdbc0aa11d398cf7517fc77129Svetoslav * Copyright (C) 2014 The Android Open Source Project 31376d600d8e0eefdbc0aa11d398cf7517fc77129Svetoslav * 41376d600d8e0eefdbc0aa11d398cf7517fc77129Svetoslav * Licensed under the Apache License, Version 2.0 (the "License"); 51376d600d8e0eefdbc0aa11d398cf7517fc77129Svetoslav * you may not use this file except in compliance with the License. 61376d600d8e0eefdbc0aa11d398cf7517fc77129Svetoslav * You may obtain a copy of the License at 71376d600d8e0eefdbc0aa11d398cf7517fc77129Svetoslav * 81376d600d8e0eefdbc0aa11d398cf7517fc77129Svetoslav * http://www.apache.org/licenses/LICENSE-2.0 91376d600d8e0eefdbc0aa11d398cf7517fc77129Svetoslav * 101376d600d8e0eefdbc0aa11d398cf7517fc77129Svetoslav * Unless required by applicable law or agreed to in writing, software 111376d600d8e0eefdbc0aa11d398cf7517fc77129Svetoslav * distributed under the License is distributed on an "AS IS" BASIS, 121376d600d8e0eefdbc0aa11d398cf7517fc77129Svetoslav * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 131376d600d8e0eefdbc0aa11d398cf7517fc77129Svetoslav * See the License for the specific language governing permissions and 141376d600d8e0eefdbc0aa11d398cf7517fc77129Svetoslav * limitations under the License. 151376d600d8e0eefdbc0aa11d398cf7517fc77129Svetoslav */ 161376d600d8e0eefdbc0aa11d398cf7517fc77129Svetoslav 171376d600d8e0eefdbc0aa11d398cf7517fc77129Svetoslavpackage android.view; 181376d600d8e0eefdbc0aa11d398cf7517fc77129Svetoslav 191376d600d8e0eefdbc0aa11d398cf7517fc77129Svetoslavimport android.os.Parcel; 201376d600d8e0eefdbc0aa11d398cf7517fc77129Svetoslavimport android.os.Parcelable; 211376d600d8e0eefdbc0aa11d398cf7517fc77129Svetoslav 221376d600d8e0eefdbc0aa11d398cf7517fc77129Svetoslav/** 231376d600d8e0eefdbc0aa11d398cf7517fc77129Svetoslav * This class contains window animation frame statistics. For example, a window 241376d600d8e0eefdbc0aa11d398cf7517fc77129Svetoslav * animation is usually performed when the application is transitioning from one 251376d600d8e0eefdbc0aa11d398cf7517fc77129Svetoslav * activity to another. The frame statistics are a snapshot for the time interval 261376d600d8e0eefdbc0aa11d398cf7517fc77129Svetoslav * from {@link #getStartTimeNano()} to {@link #getEndTimeNano()}. 271376d600d8e0eefdbc0aa11d398cf7517fc77129Svetoslav * <p> 281376d600d8e0eefdbc0aa11d398cf7517fc77129Svetoslav * The key idea is that in order to provide a smooth user experience the system should 291376d600d8e0eefdbc0aa11d398cf7517fc77129Svetoslav * run window animations at a specific time interval obtained by calling {@link 301376d600d8e0eefdbc0aa11d398cf7517fc77129Svetoslav * #getRefreshPeriodNano()}. If the system does not render a frame every refresh 311376d600d8e0eefdbc0aa11d398cf7517fc77129Svetoslav * period the user will see irregular window transitions. The time when the frame was 321376d600d8e0eefdbc0aa11d398cf7517fc77129Svetoslav * actually presented on the display by calling {@link #getFramePresentedTimeNano(int)}. 331376d600d8e0eefdbc0aa11d398cf7517fc77129Svetoslav */ 341376d600d8e0eefdbc0aa11d398cf7517fc77129Svetoslavpublic final class WindowAnimationFrameStats extends FrameStats implements Parcelable { 351376d600d8e0eefdbc0aa11d398cf7517fc77129Svetoslav /** 361376d600d8e0eefdbc0aa11d398cf7517fc77129Svetoslav * @hide 371376d600d8e0eefdbc0aa11d398cf7517fc77129Svetoslav */ 381376d600d8e0eefdbc0aa11d398cf7517fc77129Svetoslav public WindowAnimationFrameStats() { 391376d600d8e0eefdbc0aa11d398cf7517fc77129Svetoslav /* do nothing */ 401376d600d8e0eefdbc0aa11d398cf7517fc77129Svetoslav } 411376d600d8e0eefdbc0aa11d398cf7517fc77129Svetoslav 421376d600d8e0eefdbc0aa11d398cf7517fc77129Svetoslav /** 431376d600d8e0eefdbc0aa11d398cf7517fc77129Svetoslav * Initializes this isntance. 441376d600d8e0eefdbc0aa11d398cf7517fc77129Svetoslav * 451376d600d8e0eefdbc0aa11d398cf7517fc77129Svetoslav * @param refreshPeriodNano The display refresh period. 461376d600d8e0eefdbc0aa11d398cf7517fc77129Svetoslav * @param framesPresentedTimeNano The presented frame times. 471376d600d8e0eefdbc0aa11d398cf7517fc77129Svetoslav * 481376d600d8e0eefdbc0aa11d398cf7517fc77129Svetoslav * @hide 491376d600d8e0eefdbc0aa11d398cf7517fc77129Svetoslav */ 501376d600d8e0eefdbc0aa11d398cf7517fc77129Svetoslav public void init(long refreshPeriodNano, long[] framesPresentedTimeNano) { 511376d600d8e0eefdbc0aa11d398cf7517fc77129Svetoslav mRefreshPeriodNano = refreshPeriodNano; 521376d600d8e0eefdbc0aa11d398cf7517fc77129Svetoslav mFramesPresentedTimeNano = framesPresentedTimeNano; 531376d600d8e0eefdbc0aa11d398cf7517fc77129Svetoslav } 541376d600d8e0eefdbc0aa11d398cf7517fc77129Svetoslav 551376d600d8e0eefdbc0aa11d398cf7517fc77129Svetoslav private WindowAnimationFrameStats(Parcel parcel) { 561376d600d8e0eefdbc0aa11d398cf7517fc77129Svetoslav mRefreshPeriodNano = parcel.readLong(); 571376d600d8e0eefdbc0aa11d398cf7517fc77129Svetoslav mFramesPresentedTimeNano = parcel.createLongArray(); 581376d600d8e0eefdbc0aa11d398cf7517fc77129Svetoslav } 591376d600d8e0eefdbc0aa11d398cf7517fc77129Svetoslav 601376d600d8e0eefdbc0aa11d398cf7517fc77129Svetoslav @Override 611376d600d8e0eefdbc0aa11d398cf7517fc77129Svetoslav public int describeContents() { 621376d600d8e0eefdbc0aa11d398cf7517fc77129Svetoslav return 0; 631376d600d8e0eefdbc0aa11d398cf7517fc77129Svetoslav } 641376d600d8e0eefdbc0aa11d398cf7517fc77129Svetoslav 651376d600d8e0eefdbc0aa11d398cf7517fc77129Svetoslav @Override 661376d600d8e0eefdbc0aa11d398cf7517fc77129Svetoslav public void writeToParcel(Parcel parcel, int flags) { 671376d600d8e0eefdbc0aa11d398cf7517fc77129Svetoslav parcel.writeLong(mRefreshPeriodNano); 681376d600d8e0eefdbc0aa11d398cf7517fc77129Svetoslav parcel.writeLongArray(mFramesPresentedTimeNano); 691376d600d8e0eefdbc0aa11d398cf7517fc77129Svetoslav } 701376d600d8e0eefdbc0aa11d398cf7517fc77129Svetoslav 711376d600d8e0eefdbc0aa11d398cf7517fc77129Svetoslav @Override 721376d600d8e0eefdbc0aa11d398cf7517fc77129Svetoslav public String toString() { 731376d600d8e0eefdbc0aa11d398cf7517fc77129Svetoslav StringBuilder builder = new StringBuilder(); 741376d600d8e0eefdbc0aa11d398cf7517fc77129Svetoslav builder.append("WindowAnimationFrameStats["); 751376d600d8e0eefdbc0aa11d398cf7517fc77129Svetoslav builder.append("frameCount:" + getFrameCount()); 761376d600d8e0eefdbc0aa11d398cf7517fc77129Svetoslav builder.append(", fromTimeNano:" + getStartTimeNano()); 771376d600d8e0eefdbc0aa11d398cf7517fc77129Svetoslav builder.append(", toTimeNano:" + getEndTimeNano()); 781376d600d8e0eefdbc0aa11d398cf7517fc77129Svetoslav builder.append(']'); 791376d600d8e0eefdbc0aa11d398cf7517fc77129Svetoslav return builder.toString(); 801376d600d8e0eefdbc0aa11d398cf7517fc77129Svetoslav } 811376d600d8e0eefdbc0aa11d398cf7517fc77129Svetoslav 821376d600d8e0eefdbc0aa11d398cf7517fc77129Svetoslav public static final Creator<WindowAnimationFrameStats> CREATOR = 831376d600d8e0eefdbc0aa11d398cf7517fc77129Svetoslav new Creator<WindowAnimationFrameStats>() { 841376d600d8e0eefdbc0aa11d398cf7517fc77129Svetoslav @Override 851376d600d8e0eefdbc0aa11d398cf7517fc77129Svetoslav public WindowAnimationFrameStats createFromParcel(Parcel parcel) { 861376d600d8e0eefdbc0aa11d398cf7517fc77129Svetoslav return new WindowAnimationFrameStats(parcel); 871376d600d8e0eefdbc0aa11d398cf7517fc77129Svetoslav } 881376d600d8e0eefdbc0aa11d398cf7517fc77129Svetoslav 891376d600d8e0eefdbc0aa11d398cf7517fc77129Svetoslav @Override 901376d600d8e0eefdbc0aa11d398cf7517fc77129Svetoslav public WindowAnimationFrameStats[] newArray(int size) { 911376d600d8e0eefdbc0aa11d398cf7517fc77129Svetoslav return new WindowAnimationFrameStats[size]; 921376d600d8e0eefdbc0aa11d398cf7517fc77129Svetoslav } 931376d600d8e0eefdbc0aa11d398cf7517fc77129Svetoslav }; 941376d600d8e0eefdbc0aa11d398cf7517fc77129Svetoslav} 95