Home | History | Annotate | Download | only in telephony
      1 /*
      2  * Copyright (C) 2016 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.telephony;
     18 
     19 import android.os.Parcel;
     20 import android.os.Parcelable;
     21 import android.telephony.TelephonyHistogram;
     22 import android.util.SparseArray;
     23 import java.util.ArrayList;
     24 import java.util.List;
     25 
     26 /**
     27  * Parcelable class to store Client request statistics information.
     28  *
     29  * @hide
     30  */
     31 public final class ClientRequestStats implements Parcelable {
     32     public static final Parcelable.Creator<ClientRequestStats> CREATOR =
     33             new Parcelable.Creator<ClientRequestStats>() {
     34 
     35                 public ClientRequestStats createFromParcel(Parcel in) {
     36                     return new ClientRequestStats(in);
     37                 }
     38 
     39                 public ClientRequestStats[] newArray(int size) {
     40                     return new ClientRequestStats[size];
     41                 }
     42             };
     43     private static final int REQUEST_HISTOGRAM_BUCKET_COUNT = 5;
     44     private String mCallingPackage;
     45     /* completed requests wake lock time in milli seconds */
     46     private long mCompletedRequestsWakelockTime = 0;
     47     private long mCompletedRequestsCount = 0;
     48     private long mPendingRequestsWakelockTime = 0;
     49     private long mPendingRequestsCount = 0;
     50     private SparseArray<TelephonyHistogram> mRequestHistograms =
     51             new SparseArray<TelephonyHistogram>();
     52 
     53     public ClientRequestStats(Parcel in) {
     54         readFromParcel(in);
     55     }
     56 
     57     public ClientRequestStats() {
     58     }
     59 
     60     public ClientRequestStats(ClientRequestStats clientRequestStats) {
     61         mCallingPackage = clientRequestStats.getCallingPackage();
     62         mCompletedRequestsCount = clientRequestStats.getCompletedRequestsCount();
     63         mCompletedRequestsWakelockTime = clientRequestStats.getCompletedRequestsWakelockTime();
     64         mPendingRequestsCount = clientRequestStats.getPendingRequestsCount();
     65         mPendingRequestsWakelockTime = clientRequestStats.getPendingRequestsWakelockTime();
     66 
     67         List<TelephonyHistogram> list = clientRequestStats.getRequestHistograms();
     68         for (TelephonyHistogram entry : list) {
     69             mRequestHistograms.put(entry.getId(), entry);
     70         }
     71     }
     72 
     73     public String getCallingPackage() {
     74         return mCallingPackage;
     75     }
     76 
     77     public void setCallingPackage(String mCallingPackage) {
     78         this.mCallingPackage = mCallingPackage;
     79     }
     80 
     81     public long getCompletedRequestsWakelockTime() {
     82         return mCompletedRequestsWakelockTime;
     83     }
     84 
     85     public void addCompletedWakelockTime(long completedRequestsWakelockTime) {
     86         this.mCompletedRequestsWakelockTime += completedRequestsWakelockTime;
     87     }
     88 
     89     public long getPendingRequestsWakelockTime() {
     90         return mPendingRequestsWakelockTime;
     91     }
     92 
     93     public void setPendingRequestsWakelockTime(long pendingRequestsWakelockTime) {
     94         this.mPendingRequestsWakelockTime = pendingRequestsWakelockTime;
     95     }
     96 
     97     public long getCompletedRequestsCount() {
     98         return mCompletedRequestsCount;
     99     }
    100 
    101     public void incrementCompletedRequestsCount() {
    102         this.mCompletedRequestsCount++;
    103     }
    104 
    105     public long getPendingRequestsCount() {
    106         return mPendingRequestsCount;
    107     }
    108 
    109     public void setPendingRequestsCount(long pendingRequestsCount) {
    110         this.mPendingRequestsCount = pendingRequestsCount;
    111     }
    112 
    113     public List<TelephonyHistogram> getRequestHistograms() {
    114         List<TelephonyHistogram> list;
    115         synchronized (mRequestHistograms) {
    116             list = new ArrayList<>(mRequestHistograms.size());
    117             for (int i = 0; i < mRequestHistograms.size(); i++) {
    118                 TelephonyHistogram entry = new TelephonyHistogram(mRequestHistograms.valueAt(i));
    119                 list.add(entry);
    120             }
    121         }
    122         return list;
    123     }
    124 
    125     public void updateRequestHistograms(int requestId, int time) {
    126         synchronized (mRequestHistograms) {
    127             TelephonyHistogram entry = mRequestHistograms.get(requestId);
    128             if (entry == null) {
    129                 entry = new TelephonyHistogram(TelephonyHistogram.TELEPHONY_CATEGORY_RIL,
    130                         requestId, REQUEST_HISTOGRAM_BUCKET_COUNT);
    131                 mRequestHistograms.put(requestId, entry);
    132             }
    133             entry.addTimeTaken(time);
    134         }
    135     }
    136 
    137     @Override
    138     public String toString() {
    139         return "ClientRequestStats{" +
    140                 "mCallingPackage='" + mCallingPackage + '\'' +
    141                 ", mCompletedRequestsWakelockTime=" + mCompletedRequestsWakelockTime +
    142                 ", mCompletedRequestsCount=" + mCompletedRequestsCount +
    143                 ", mPendingRequestsWakelockTime=" + mPendingRequestsWakelockTime +
    144                 ", mPendingRequestsCount=" + mPendingRequestsCount +
    145                 '}';
    146     }
    147 
    148     @Override
    149     public int describeContents() {
    150         return 0;
    151     }
    152 
    153     public void readFromParcel(Parcel in) {
    154         mCallingPackage = in.readString();
    155         mCompletedRequestsWakelockTime = in.readLong();
    156         mCompletedRequestsCount = in.readLong();
    157         mPendingRequestsWakelockTime = in.readLong();
    158         mPendingRequestsCount = in.readLong();
    159         ArrayList<TelephonyHistogram> requestHistograms = new ArrayList<TelephonyHistogram>();
    160         in.readTypedList(requestHistograms, TelephonyHistogram.CREATOR);
    161         for (TelephonyHistogram h : requestHistograms) {
    162             mRequestHistograms.put(h.getId(), h);
    163         }
    164     }
    165 
    166     @Override
    167     public void writeToParcel(Parcel dest, int flags) {
    168         dest.writeString(mCallingPackage);
    169         dest.writeLong(mCompletedRequestsWakelockTime);
    170         dest.writeLong(mCompletedRequestsCount);
    171         dest.writeLong(mPendingRequestsWakelockTime);
    172         dest.writeLong(mPendingRequestsCount);
    173         dest.writeTypedList(getRequestHistograms());
    174     }
    175 }
    176