| /* |
| * Copyright (C) 2006 The Android Open Source Project |
| * |
| * Licensed under the Apache License, Version 2.0 (the "License"); |
| * you may not use this file except in compliance with the License. |
| * You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| * See the License for the specific language governing permissions and |
| * limitations under the License. |
| */ |
| |
| package com.android.phone; |
| |
| import android.os.SystemClock; |
| import android.util.Log; |
| import android.view.View; |
| import android.view.ViewParent; |
| import android.view.Window; |
| |
| /** |
| * Profiling utilities for the Phone app. |
| */ |
| public class Profiler { |
| private static final String LOG_TAG = PhoneGlobals.LOG_TAG; |
| |
| // Let the compiler optimize all this code out unless we're actively |
| // doing profiling runs. |
| // TODO: Instead of doing all these "if (PROFILE)" checks here, every |
| // place that *calls* any of these methods should check the value of |
| // Profiler.PROFILE first, so the method calls will get optimized out |
| // too. |
| private static final boolean PROFILE = false; |
| |
| static long sTimeCallScreenRequested; |
| static long sTimeCallScreenOnCreate; |
| static long sTimeCallScreenCreated; |
| |
| // TODO: Clean up any usage of these times. (There's no "incoming call |
| // panel" in the Phone UI any more; incoming calls just go straight to the |
| // regular in-call UI.) |
| static long sTimeIncomingCallPanelRequested; |
| static long sTimeIncomingCallPanelOnCreate; |
| static long sTimeIncomingCallPanelCreated; |
| |
| /** This class is never instantiated. */ |
| private Profiler() { |
| } |
| |
| static void profileViewCreate(Window win, String tag) { |
| if (false) { |
| ViewParent p = (ViewParent) win.getDecorView(); |
| while (p instanceof View) { |
| p = ((View) p).getParent(); |
| } |
| //((ViewRoot)p).profile(); |
| //((ViewRoot)p).setProfileTag(tag); |
| } |
| } |
| |
| static void callScreenRequested() { |
| if (PROFILE) { |
| sTimeCallScreenRequested = SystemClock.uptimeMillis(); |
| } |
| } |
| |
| static void callScreenOnCreate() { |
| if (PROFILE) { |
| sTimeCallScreenOnCreate = SystemClock.uptimeMillis(); |
| } |
| } |
| |
| static void callScreenCreated() { |
| if (PROFILE) { |
| sTimeCallScreenCreated = SystemClock.uptimeMillis(); |
| dumpCallScreenStat(); |
| } |
| } |
| |
| private static void dumpCallScreenStat() { |
| if (PROFILE) { |
| log(">>> call screen perf stats <<<"); |
| log(">>> request -> onCreate = " + |
| (sTimeCallScreenOnCreate - sTimeCallScreenRequested)); |
| log(">>> onCreate -> created = " + |
| (sTimeCallScreenCreated - sTimeCallScreenOnCreate)); |
| } |
| } |
| |
| static void incomingCallPanelRequested() { |
| if (PROFILE) { |
| sTimeIncomingCallPanelRequested = SystemClock.uptimeMillis(); |
| } |
| } |
| |
| static void incomingCallPanelOnCreate() { |
| if (PROFILE) { |
| sTimeIncomingCallPanelOnCreate = SystemClock.uptimeMillis(); |
| } |
| } |
| |
| static void incomingCallPanelCreated() { |
| if (PROFILE) { |
| sTimeIncomingCallPanelCreated = SystemClock.uptimeMillis(); |
| dumpIncomingCallPanelStat(); |
| } |
| } |
| |
| private static void dumpIncomingCallPanelStat() { |
| if (PROFILE) { |
| log(">>> incoming call panel perf stats <<<"); |
| log(">>> request -> onCreate = " + |
| (sTimeIncomingCallPanelOnCreate - sTimeIncomingCallPanelRequested)); |
| log(">>> onCreate -> created = " + |
| (sTimeIncomingCallPanelCreated - sTimeIncomingCallPanelOnCreate)); |
| } |
| } |
| |
| private static void log(String msg) { |
| Log.d(LOG_TAG, "[Profiler] " + msg); |
| } |
| } |