diff --git a/src/com/android/browser/BrowserActivity.java b/src/com/android/browser/BrowserActivity.java
index 47f12e3..e49d309 100644
--- a/src/com/android/browser/BrowserActivity.java
+++ b/src/com/android/browser/BrowserActivity.java
@@ -623,6 +623,9 @@
     }
 
     @Override public void onCreate(Bundle icicle) {
+        Log.d(LOGTAG, "onCreate start");
+        long start = Process.getElapsedCpuTime();
+
         if (Config.LOGV) {
             Log.v(LOGTAG, this + " onStart");
         }
@@ -745,10 +748,14 @@
                     }
                 }
             };
+            Log.d(LOGTAG, "onCreate used " + (Process.getElapsedCpuTime() - start) + " ms");
     }
 
     @Override
     protected void onNewIntent(Intent intent) {
+        Log.d(LOGTAG, "onNewIntent start");
+        long start = Process.getElapsedCpuTime();
+
         TabControl.Tab current = mTabControl.getCurrentTab();
         // When a tab is closed on exit, the current tab index is set to -1.
         // Reset before proceed as Browser requires the current tab to be set.
@@ -757,6 +764,7 @@
             current = mTabControl.getTab(0);
             if (current == null) {
                 // No tabs at all so just ignore this intent.
+                Log.d(LOGTAG, "onNewIntent no tab");
                 return;
             }
             mTabControl.setCurrentTab(current);
@@ -835,6 +843,7 @@
                 }
             }
         }
+        Log.d(LOGTAG, "onNewIntent used " + (Process.getElapsedCpuTime() - start) + " ms");
     }
 
     private String getUrlFromIntent(Intent intent) {
@@ -989,6 +998,9 @@
     };
 
     @Override protected void onResume() {
+        Log.d(LOGTAG, "onResume start");
+        long start = Process.getElapsedCpuTime();
+
         super.onResume();
         if (Config.LOGV) {
             Log.v(LOGTAG, "BrowserActivity.onResume: this=" + this);
@@ -1029,6 +1041,8 @@
         } else {
             mSensorManager = null;
         }
+
+        Log.d(LOGTAG, "onResume used " + (Process.getElapsedCpuTime() - start) + " ms");
     }
 
     /**
diff --git a/src/com/android/browser/BrowserProvider.java b/src/com/android/browser/BrowserProvider.java
index 42e22a5..1221dd1 100644
--- a/src/com/android/browser/BrowserProvider.java
+++ b/src/com/android/browser/BrowserProvider.java
@@ -36,6 +36,7 @@
 import android.database.sqlite.SQLiteOpenHelper;
 import android.database.sqlite.SQLiteDatabase;
 import android.net.Uri;
+import android.os.Process;
 import android.os.RemoteException;
 import android.os.ServiceManager;
 import android.os.SystemProperties;
@@ -231,6 +232,9 @@
 
     @Override
     public boolean onCreate() {
+        Log.d(TAG, "onCreate start");
+        long start = Process.getElapsedCpuTime();
+
         final Context context = getContext();
         mOpenHelper = new DatabaseHelper(context);
         // we added "picasa web album" into default bookmarks for version 19. 
@@ -247,6 +251,7 @@
                 ed.commit();
             }
         }
+        Log.d(TAG, "onCreate used " + (Process.getElapsedCpuTime() - start) + " ms");
         return true;
     }
 
