diff options
Diffstat (limited to 'src/com/android/phone/Profiler.java')
-rw-r--r-- | src/com/android/phone/Profiler.java | 126 |
1 files changed, 126 insertions, 0 deletions
diff --git a/src/com/android/phone/Profiler.java b/src/com/android/phone/Profiler.java new file mode 100644 index 00000000..234073cd --- /dev/null +++ b/src/com/android/phone/Profiler.java @@ -0,0 +1,126 @@ +/* + * 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); + } +} |