152613f9084f40100021fbf21173bda329a2d5cc3Rahul Chaturvedi/* 252613f9084f40100021fbf21173bda329a2d5cc3Rahul Chaturvedi * Copyright (C) 2015 The Android Open Source Project 352613f9084f40100021fbf21173bda329a2d5cc3Rahul Chaturvedi * 452613f9084f40100021fbf21173bda329a2d5cc3Rahul Chaturvedi * Licensed under the Apache License, Version 2.0 (the "License"); 552613f9084f40100021fbf21173bda329a2d5cc3Rahul Chaturvedi * you may not use this file except in compliance with the License. 652613f9084f40100021fbf21173bda329a2d5cc3Rahul Chaturvedi * You may obtain a copy of the License at 752613f9084f40100021fbf21173bda329a2d5cc3Rahul Chaturvedi * 852613f9084f40100021fbf21173bda329a2d5cc3Rahul Chaturvedi * http://www.apache.org/licenses/LICENSE-2.0 952613f9084f40100021fbf21173bda329a2d5cc3Rahul Chaturvedi * 1052613f9084f40100021fbf21173bda329a2d5cc3Rahul Chaturvedi * Unless required by applicable law or agreed to in writing, software 1152613f9084f40100021fbf21173bda329a2d5cc3Rahul Chaturvedi * distributed under the License is distributed on an "AS IS" BASIS, 1252613f9084f40100021fbf21173bda329a2d5cc3Rahul Chaturvedi * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1352613f9084f40100021fbf21173bda329a2d5cc3Rahul Chaturvedi * See the License for the specific language governing permissions and 1452613f9084f40100021fbf21173bda329a2d5cc3Rahul Chaturvedi * limitations under the License 1552613f9084f40100021fbf21173bda329a2d5cc3Rahul Chaturvedi */ 1652613f9084f40100021fbf21173bda329a2d5cc3Rahul Chaturvedi 1752613f9084f40100021fbf21173bda329a2d5cc3Rahul Chaturvedipackage android.os; 1852613f9084f40100021fbf21173bda329a2d5cc3Rahul Chaturvedi 1952613f9084f40100021fbf21173bda329a2d5cc3Rahul Chaturvediimport android.util.Log; 2052613f9084f40100021fbf21173bda329a2d5cc3Rahul Chaturvediimport android.util.Size; 2152613f9084f40100021fbf21173bda329a2d5cc3Rahul Chaturvediimport com.android.internal.util.FastPrintWriter; 2252613f9084f40100021fbf21173bda329a2d5cc3Rahul Chaturvedi 2352613f9084f40100021fbf21173bda329a2d5cc3Rahul Chaturvediimport java.io.FileOutputStream; 2452613f9084f40100021fbf21173bda329a2d5cc3Rahul Chaturvediimport java.io.PrintWriter; 2552613f9084f40100021fbf21173bda329a2d5cc3Rahul Chaturvediimport java.util.HashMap; 2652613f9084f40100021fbf21173bda329a2d5cc3Rahul Chaturvediimport java.util.Map; 2752613f9084f40100021fbf21173bda329a2d5cc3Rahul Chaturvedi 2852613f9084f40100021fbf21173bda329a2d5cc3Rahul Chaturvedi/** 2952613f9084f40100021fbf21173bda329a2d5cc3Rahul Chaturvedi * Class used to track binder transactions. It indexes the transactions by the stack trace. 3052613f9084f40100021fbf21173bda329a2d5cc3Rahul Chaturvedi * 3152613f9084f40100021fbf21173bda329a2d5cc3Rahul Chaturvedi * @hide 3252613f9084f40100021fbf21173bda329a2d5cc3Rahul Chaturvedi */ 3352613f9084f40100021fbf21173bda329a2d5cc3Rahul Chaturvedipublic class TransactionTracker { 3452613f9084f40100021fbf21173bda329a2d5cc3Rahul Chaturvedi private Map<String, Long> mTraces; 3552613f9084f40100021fbf21173bda329a2d5cc3Rahul Chaturvedi 3652613f9084f40100021fbf21173bda329a2d5cc3Rahul Chaturvedi private void resetTraces() { 3752613f9084f40100021fbf21173bda329a2d5cc3Rahul Chaturvedi synchronized (this) { 3852613f9084f40100021fbf21173bda329a2d5cc3Rahul Chaturvedi mTraces = new HashMap<String, Long>(); 3952613f9084f40100021fbf21173bda329a2d5cc3Rahul Chaturvedi } 4052613f9084f40100021fbf21173bda329a2d5cc3Rahul Chaturvedi } 4152613f9084f40100021fbf21173bda329a2d5cc3Rahul Chaturvedi 4252613f9084f40100021fbf21173bda329a2d5cc3Rahul Chaturvedi TransactionTracker() { 4352613f9084f40100021fbf21173bda329a2d5cc3Rahul Chaturvedi resetTraces(); 4452613f9084f40100021fbf21173bda329a2d5cc3Rahul Chaturvedi } 4552613f9084f40100021fbf21173bda329a2d5cc3Rahul Chaturvedi 4652613f9084f40100021fbf21173bda329a2d5cc3Rahul Chaturvedi public void addTrace() { 4752613f9084f40100021fbf21173bda329a2d5cc3Rahul Chaturvedi String trace = Log.getStackTraceString(new Throwable()); 4852613f9084f40100021fbf21173bda329a2d5cc3Rahul Chaturvedi synchronized (this) { 4952613f9084f40100021fbf21173bda329a2d5cc3Rahul Chaturvedi if (mTraces.containsKey(trace)) { 5052613f9084f40100021fbf21173bda329a2d5cc3Rahul Chaturvedi mTraces.put(trace, mTraces.get(trace) + 1); 5152613f9084f40100021fbf21173bda329a2d5cc3Rahul Chaturvedi } else { 5252613f9084f40100021fbf21173bda329a2d5cc3Rahul Chaturvedi mTraces.put(trace, Long.valueOf(1)); 5352613f9084f40100021fbf21173bda329a2d5cc3Rahul Chaturvedi } 5452613f9084f40100021fbf21173bda329a2d5cc3Rahul Chaturvedi } 5552613f9084f40100021fbf21173bda329a2d5cc3Rahul Chaturvedi } 5652613f9084f40100021fbf21173bda329a2d5cc3Rahul Chaturvedi 5752613f9084f40100021fbf21173bda329a2d5cc3Rahul Chaturvedi public void writeTracesToFile(ParcelFileDescriptor fd) { 5852613f9084f40100021fbf21173bda329a2d5cc3Rahul Chaturvedi if (mTraces.isEmpty()) { 5952613f9084f40100021fbf21173bda329a2d5cc3Rahul Chaturvedi return; 6052613f9084f40100021fbf21173bda329a2d5cc3Rahul Chaturvedi } 6152613f9084f40100021fbf21173bda329a2d5cc3Rahul Chaturvedi 6252613f9084f40100021fbf21173bda329a2d5cc3Rahul Chaturvedi PrintWriter pw = new FastPrintWriter(new FileOutputStream(fd.getFileDescriptor())); 6352613f9084f40100021fbf21173bda329a2d5cc3Rahul Chaturvedi synchronized (this) { 6452613f9084f40100021fbf21173bda329a2d5cc3Rahul Chaturvedi for (String trace : mTraces.keySet()) { 6552613f9084f40100021fbf21173bda329a2d5cc3Rahul Chaturvedi pw.println("Count: " + mTraces.get(trace)); 6652613f9084f40100021fbf21173bda329a2d5cc3Rahul Chaturvedi pw.println("Trace: " + trace); 6752613f9084f40100021fbf21173bda329a2d5cc3Rahul Chaturvedi pw.println(); 6852613f9084f40100021fbf21173bda329a2d5cc3Rahul Chaturvedi } 6952613f9084f40100021fbf21173bda329a2d5cc3Rahul Chaturvedi } 7052613f9084f40100021fbf21173bda329a2d5cc3Rahul Chaturvedi pw.flush(); 7152613f9084f40100021fbf21173bda329a2d5cc3Rahul Chaturvedi } 7252613f9084f40100021fbf21173bda329a2d5cc3Rahul Chaturvedi 7352613f9084f40100021fbf21173bda329a2d5cc3Rahul Chaturvedi public void clearTraces(){ 7452613f9084f40100021fbf21173bda329a2d5cc3Rahul Chaturvedi resetTraces(); 7552613f9084f40100021fbf21173bda329a2d5cc3Rahul Chaturvedi } 7652613f9084f40100021fbf21173bda329a2d5cc3Rahul Chaturvedi} 77