1 /* 2 * Copyright (C) 2006 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 com.android.phone; 18 19 import android.os.SystemClock; 20 import android.util.Log; 21 import android.view.View; 22 import android.view.ViewParent; 23 import android.view.Window; 24 25 /** 26 * Profiling utilities for the Phone app. 27 */ 28 public class Profiler { 29 private static final String LOG_TAG = PhoneGlobals.LOG_TAG; 30 31 // Let the compiler optimize all this code out unless we're actively 32 // doing profiling runs. 33 // TODO: Instead of doing all these "if (PROFILE)" checks here, every 34 // place that *calls* any of these methods should check the value of 35 // Profiler.PROFILE first, so the method calls will get optimized out 36 // too. 37 private static final boolean PROFILE = false; 38 39 static long sTimeCallScreenRequested; 40 static long sTimeCallScreenOnCreate; 41 static long sTimeCallScreenCreated; 42 43 // TODO: Clean up any usage of these times. (There's no "incoming call 44 // panel" in the Phone UI any more; incoming calls just go straight to the 45 // regular in-call UI.) 46 static long sTimeIncomingCallPanelRequested; 47 static long sTimeIncomingCallPanelOnCreate; 48 static long sTimeIncomingCallPanelCreated; 49 50 /** This class is never instantiated. */ Profiler()51 private Profiler() { 52 } 53 profileViewCreate(Window win, String tag)54 static void profileViewCreate(Window win, String tag) { 55 if (false) { 56 ViewParent p = (ViewParent) win.getDecorView(); 57 while (p instanceof View) { 58 p = ((View) p).getParent(); 59 } 60 //((ViewRoot)p).profile(); 61 //((ViewRoot)p).setProfileTag(tag); 62 } 63 } 64 callScreenRequested()65 static void callScreenRequested() { 66 if (PROFILE) { 67 sTimeCallScreenRequested = SystemClock.uptimeMillis(); 68 } 69 } 70 callScreenOnCreate()71 static void callScreenOnCreate() { 72 if (PROFILE) { 73 sTimeCallScreenOnCreate = SystemClock.uptimeMillis(); 74 } 75 } 76 callScreenCreated()77 static void callScreenCreated() { 78 if (PROFILE) { 79 sTimeCallScreenCreated = SystemClock.uptimeMillis(); 80 dumpCallScreenStat(); 81 } 82 } 83 dumpCallScreenStat()84 private static void dumpCallScreenStat() { 85 if (PROFILE) { 86 log(">>> call screen perf stats <<<"); 87 log(">>> request -> onCreate = " + 88 (sTimeCallScreenOnCreate - sTimeCallScreenRequested)); 89 log(">>> onCreate -> created = " + 90 (sTimeCallScreenCreated - sTimeCallScreenOnCreate)); 91 } 92 } 93 incomingCallPanelRequested()94 static void incomingCallPanelRequested() { 95 if (PROFILE) { 96 sTimeIncomingCallPanelRequested = SystemClock.uptimeMillis(); 97 } 98 } 99 incomingCallPanelOnCreate()100 static void incomingCallPanelOnCreate() { 101 if (PROFILE) { 102 sTimeIncomingCallPanelOnCreate = SystemClock.uptimeMillis(); 103 } 104 } 105 incomingCallPanelCreated()106 static void incomingCallPanelCreated() { 107 if (PROFILE) { 108 sTimeIncomingCallPanelCreated = SystemClock.uptimeMillis(); 109 dumpIncomingCallPanelStat(); 110 } 111 } 112 dumpIncomingCallPanelStat()113 private static void dumpIncomingCallPanelStat() { 114 if (PROFILE) { 115 log(">>> incoming call panel perf stats <<<"); 116 log(">>> request -> onCreate = " + 117 (sTimeIncomingCallPanelOnCreate - sTimeIncomingCallPanelRequested)); 118 log(">>> onCreate -> created = " + 119 (sTimeIncomingCallPanelCreated - sTimeIncomingCallPanelOnCreate)); 120 } 121 } 122 log(String msg)123 private static void log(String msg) { 124 Log.d(LOG_TAG, "[Profiler] " + msg); 125 } 126 } 127