Merge "Touch moves cursor in text refactored"
diff --git a/api/current.txt b/api/current.txt
index ab2ef54..7c05ed6 100644
--- a/api/current.txt
+++ b/api/current.txt
@@ -7981,8 +7981,8 @@
     method public void drawPoint(float, float, android.graphics.Paint);
     method public void drawPoints(float[], int, int, android.graphics.Paint);
     method public void drawPoints(float[], android.graphics.Paint);
-    method public void drawPosText(char[], int, int, float[], android.graphics.Paint);
-    method public void drawPosText(java.lang.String, float[], android.graphics.Paint);
+    method public deprecated void drawPosText(char[], int, int, float[], android.graphics.Paint);
+    method public deprecated void drawPosText(java.lang.String, float[], android.graphics.Paint);
     method public void drawRGB(int, int, int);
     method public void drawRect(android.graphics.RectF, android.graphics.Paint);
     method public void drawRect(android.graphics.Rect, android.graphics.Paint);
@@ -8000,8 +8000,8 @@
     method public int getDensity();
     method public android.graphics.DrawFilter getDrawFilter();
     method public int getHeight();
-    method public void getMatrix(android.graphics.Matrix);
-    method public final android.graphics.Matrix getMatrix();
+    method public deprecated void getMatrix(android.graphics.Matrix);
+    method public final deprecated android.graphics.Matrix getMatrix();
     method public int getMaximumBitmapHeight();
     method public int getMaximumBitmapWidth();
     method public int getSaveCount();
@@ -8331,7 +8331,7 @@
     method public final boolean isDither();
     method public final boolean isFakeBoldText();
     method public final boolean isFilterBitmap();
-    method public final boolean isLinearText();
+    method public final deprecated boolean isLinearText();
     method public final boolean isStrikeThruText();
     method public final boolean isSubpixelText();
     method public final boolean isUnderlineText();
@@ -8351,7 +8351,7 @@
     method public void setFilterBitmap(boolean);
     method public void setFlags(int);
     method public void setHinting(int);
-    method public void setLinearText(boolean);
+    method public deprecated void setLinearText(boolean);
     method public android.graphics.MaskFilter setMaskFilter(android.graphics.MaskFilter);
     method public android.graphics.PathEffect setPathEffect(android.graphics.PathEffect);
     method public android.graphics.Rasterizer setRasterizer(android.graphics.Rasterizer);
diff --git a/cmds/servicemanager/binder.c b/cmds/servicemanager/binder.c
index 918d4d4..1985756 100644
--- a/cmds/servicemanager/binder.c
+++ b/cmds/servicemanager/binder.c
@@ -412,7 +412,7 @@
         return;
     }
 
-    bio->data = bio->data0 = data + n;
+    bio->data = bio->data0 = (char *) data + n;
     bio->offs = bio->offs0 = data;
     bio->data_avail = maxdata - n;
     bio->offs_avail = maxoffs;
diff --git a/core/java/android/app/ActivityThread.java b/core/java/android/app/ActivityThread.java
index bac3c6c..455d2f0 100644
--- a/core/java/android/app/ActivityThread.java
+++ b/core/java/android/app/ActivityThread.java
@@ -486,7 +486,6 @@
         private static final String HEAP_COLUMN = "%13s %8s %8s %8s %8s %8s %8s";
         private static final String ONE_COUNT_COLUMN = "%21s %8d";
         private static final String TWO_COUNT_COLUMNS = "%21s %8d %21s %8d";
-        private static final String TWO_COUNT_COLUMNS_DB = "%21s %8d %21s %8d";
         private static final String DB_INFO_FORMAT = "  %8s %8s %14s %14s  %s";
 
         // Formatting for checkin service - update version if row format changes
@@ -867,7 +866,6 @@
             int binderProxyObjectCount = Debug.getBinderProxyObjectCount();
             int binderDeathObjectCount = Debug.getBinderDeathObjectCount();
             long openSslSocketCount = Debug.countInstancesOfClass(OpenSSLSocketImpl.class);
-            long sqliteAllocated = SQLiteDebug.getHeapAllocatedSize() / 1024;
             SQLiteDebug.PagerStats stats = SQLiteDebug.getDatabaseInfo();
 
             // For checkin, we print one long comma-separated list of values
@@ -935,9 +933,9 @@
                 pw.print(openSslSocketCount); pw.print(',');
 
                 // SQL
-                pw.print(sqliteAllocated); pw.print(',');
                 pw.print(stats.memoryUsed / 1024); pw.print(',');
-                pw.print(stats.pageCacheOverflo / 1024); pw.print(',');
+                pw.print(stats.memoryUsed / 1024); pw.print(',');
+                pw.print(stats.pageCacheOverflow / 1024); pw.print(',');
                 pw.print(stats.largestMemAlloc / 1024);
                 for (int i = 0; i < stats.dbStats.size(); i++) {
                     DbStats dbStats = stats.dbStats.get(i);
@@ -1003,10 +1001,9 @@
             // SQLite mem info
             pw.println(" ");
             pw.println(" SQL");
-            printRow(pw, TWO_COUNT_COLUMNS_DB, "heap:", sqliteAllocated, "MEMORY_USED:",
-                    stats.memoryUsed / 1024);
-            printRow(pw, TWO_COUNT_COLUMNS_DB, "PAGECACHE_OVERFLOW:",
-                    stats.pageCacheOverflo / 1024, "MALLOC_SIZE:", stats.largestMemAlloc / 1024);
+            printRow(pw, ONE_COUNT_COLUMN, "MEMORY_USED:", stats.memoryUsed / 1024);
+            printRow(pw, TWO_COUNT_COLUMNS, "PAGECACHE_OVERFLOW:",
+                    stats.pageCacheOverflow / 1024, "MALLOC_SIZE:", stats.largestMemAlloc / 1024);
             pw.println(" ");
             int N = stats.dbStats.size();
             if (N > 0) {
diff --git a/core/java/android/database/sqlite/SQLiteConnection.java b/core/java/android/database/sqlite/SQLiteConnection.java
index aeca62d..2ea936e 100644
--- a/core/java/android/database/sqlite/SQLiteConnection.java
+++ b/core/java/android/database/sqlite/SQLiteConnection.java
@@ -84,6 +84,7 @@
  */
 public final class SQLiteConnection {
     private static final String TAG = "SQLiteConnection";
+    private static final boolean DEBUG = false;
 
     private static final String[] EMPTY_STRING_ARRAY = new String[0];
     private static final byte[] EMPTY_BYTE_ARRAY = new byte[0];
@@ -668,11 +669,12 @@
                 // When remove() is called, the cache will invoke its entryRemoved() callback,
                 // which will in turn call finalizePreparedStatement() to finalize and
                 // recycle the statement.
-                if (SQLiteDebug.DEBUG_SQL_CACHE) {
-                    Log.v(TAG, "Could not reset prepared statement due to an exception.  "
+                if (DEBUG) {
+                    Log.d(TAG, "Could not reset prepared statement due to an exception.  "
                             + "Removing it from the cache.  SQL: "
                             + trimSqlForDisplay(statement.mSql), ex);
                 }
+
                 mPreparedStatementCache.remove(statement.mSql);
             }
         } else {
@@ -995,7 +997,7 @@
     }
 
     private static final class OperationLog {
-        private static final int MAX_RECENT_OPERATIONS = 10;
+        private static final int MAX_RECENT_OPERATIONS = 20;
         private static final int COOKIE_GENERATION_SHIFT = 8;
         private static final int COOKIE_INDEX_MASK = 0xff;
 
diff --git a/core/java/android/database/sqlite/SQLiteCursor.java b/core/java/android/database/sqlite/SQLiteCursor.java
index 9dcb498..946300f 100644
--- a/core/java/android/database/sqlite/SQLiteCursor.java
+++ b/core/java/android/database/sqlite/SQLiteCursor.java
@@ -269,7 +269,6 @@
                         mStackTrace);
                 }
                 close();
-                SQLiteDebug.notifyActiveCursorFinalized();
             }
         } finally {
             super.finalize();
diff --git a/core/java/android/database/sqlite/SQLiteDebug.java b/core/java/android/database/sqlite/SQLiteDebug.java
index a64251b..95350ba 100644
--- a/core/java/android/database/sqlite/SQLiteDebug.java
+++ b/core/java/android/database/sqlite/SQLiteDebug.java
@@ -29,6 +29,8 @@
  * {@hide}
  */
 public final class SQLiteDebug {
+    private static native void nativeGetPagerStats(PagerStats stats);
+
     /**
      * Controls the printing of informational SQL log messages.
      */
@@ -49,31 +51,6 @@
             Log.isLoggable("SQLiteTime", Log.VERBOSE);
 
     /**
-     * Controls the printing of compiled-sql-statement cache stats.
-     */
-    public static final boolean DEBUG_SQL_CACHE =
-            Log.isLoggable("SQLiteCompiledSql", Log.VERBOSE);
-
-    /**
-     * Controls the stack trace reporting of active cursors being
-     * finalized.
-     */
-    public static final boolean DEBUG_ACTIVE_CURSOR_FINALIZATION =
-            Log.isLoggable("SQLiteCursorClosing", Log.VERBOSE);
-
-    /**
-     * Controls the tracking of time spent holding the database lock.
-     */
-    public static final boolean DEBUG_LOCK_TIME_TRACKING =
-            Log.isLoggable("SQLiteLockTime", Log.VERBOSE);
-
-    /**
-     * Controls the printing of stack traces when tracking the time spent holding the database lock.
-     */
-    public static final boolean DEBUG_LOCK_TIME_TRACKING_STACK_TRACE =
-            Log.isLoggable("SQLiteLockStackTrace", Log.VERBOSE);
-
-    /**
      * True to enable database performance testing instrumentation.
      * @hide
      */
@@ -98,30 +75,9 @@
     /**
      * Contains statistics about the active pagers in the current process.
      *
-     * @see #getPagerStats(PagerStats)
+     * @see #nativeGetPagerStats(PagerStats)
      */
     public static class PagerStats {
-        /** The total number of bytes in all pagers in the current process
-         * @deprecated not used any longer
-         */
-        @Deprecated
-        public long totalBytes;
-        /** The number of bytes in referenced pages in all pagers in the current process
-         * @deprecated not used any longer
-         * */
-        @Deprecated
-        public long referencedBytes;
-        /** The number of bytes in all database files opened in the current process
-         * @deprecated not used any longer
-         */
-        @Deprecated
-        public long databaseBytes;
-        /** The number of pagers opened in the current process
-         * @deprecated not used any longer
-         */
-        @Deprecated
-        public int numPagers;
-
         /** the current amount of memory checked out by sqlite using sqlite3_malloc().
          * documented at http://www.sqlite.org/c3ref/c_status_malloc_size.html
          */
@@ -134,7 +90,7 @@
          * that overflowed because no space was left in the page cache.
          * documented at http://www.sqlite.org/c3ref/c_status_malloc_size.html
          */
-        public int pageCacheOverflo;
+        public int pageCacheOverflow;
 
         /** records the largest memory allocation request handed to sqlite3.
          * documented at http://www.sqlite.org/c3ref/c_status_malloc_size.html
@@ -182,7 +138,8 @@
      */
     public static PagerStats getDatabaseInfo() {
         PagerStats stats = new PagerStats();
-        getPagerStats(stats);
+        SQLiteGlobal.initializeOnce();
+        nativeGetPagerStats(stats);
         stats.dbStats = SQLiteDatabase.getDbStats();
         return stats;
     }
@@ -202,48 +159,4 @@
 
         SQLiteDatabase.dumpAll(printer, verbose);
     }
-
-    /**
-     * Gathers statistics about all pagers in the current process.
-     */
-    public static native void getPagerStats(PagerStats stats);
-
-    /**
-     * Returns the size of the SQLite heap.
-     * @return The size of the SQLite heap in bytes.
-     */
-    public static native long getHeapSize();
-
-    /**
-     * Returns the amount of allocated memory in the SQLite heap.
-     * @return The allocated size in bytes.
-     */
-    public static native long getHeapAllocatedSize();
-
-    /**
-     * Returns the amount of free memory in the SQLite heap.
-     * @return The freed size in bytes.
-     */
-    public static native long getHeapFreeSize();
-
-    /**
-     * Determines the number of dirty belonging to the SQLite
-     * heap segments of this process.  pages[0] returns the number of
-     * shared pages, pages[1] returns the number of private pages
-     */
-    public static native void getHeapDirtyPages(int[] pages);
-
-    private static int sNumActiveCursorsFinalized = 0;
-
-    /**
-     * Returns the number of active cursors that have been finalized. This depends on the GC having
-     * run but is still useful for tests.
-     */
-    public static int getNumActiveCursorsFinalized() {
-        return sNumActiveCursorsFinalized;
-    }
-
-    static synchronized void notifyActiveCursorFinalized() {
-        sNumActiveCursorsFinalized++;
-    }
 }
diff --git a/core/java/android/database/sqlite/SQLiteOpenHelper.java b/core/java/android/database/sqlite/SQLiteOpenHelper.java
index 31da7e4..46d9369 100644
--- a/core/java/android/database/sqlite/SQLiteOpenHelper.java
+++ b/core/java/android/database/sqlite/SQLiteOpenHelper.java
@@ -81,7 +81,8 @@
      * @param name of the database file, or null for an in-memory database
      * @param factory to use for creating cursor objects, or null for the default
      * @param version number of the database (starting at 1); if the database is older,
-     *     {@link #onUpgrade} will be used to upgrade the database
+     *     {@link #onUpgrade} will be used to upgrade the database; if the database is
+     *     newer, {@link #onDowngrade} will be used to downgrade the database
      * @param errorHandler the {@link DatabaseErrorHandler} to be used when sqlite reports database
      * corruption.
      */
@@ -100,7 +101,7 @@
     }
 
     /**
-     * Return the name of the SQLite database being opened, as given tp
+     * Return the name of the SQLite database being opened, as given to
      * the constructor.
      */
     public String getDatabaseName() {
@@ -297,7 +298,7 @@
     public abstract void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion);
 
     /**
-     * Called when the database needs to be downgraded. This is stricly similar to
+     * Called when the database needs to be downgraded. This is strictly similar to
      * onUpgrade() method, but is called whenever current version is newer than requested one.
      * However, this method is not abstract, so it is not mandatory for a customer to
      * implement it. If not overridden, default implementation will reject downgrade and
diff --git a/core/java/android/database/sqlite/SQLiteUnfinalizedObjectsException.java b/core/java/android/database/sqlite/SQLiteUnfinalizedObjectsException.java
deleted file mode 100644
index bcf95e2..0000000
--- a/core/java/android/database/sqlite/SQLiteUnfinalizedObjectsException.java
+++ /dev/null
@@ -1,31 +0,0 @@
-/*
- * Copyright (C) 2010 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 android.database.sqlite;
-
-/**
- * Thrown if the database can't be closed because of some un-closed
- * Cursor or SQLiteStatement objects. Could happen when a thread is trying to close
- * the database while another thread still hasn't closed a Cursor on that database.
- * @hide
- */
-public class SQLiteUnfinalizedObjectsException extends SQLiteException {
-    public SQLiteUnfinalizedObjectsException() {}
-
-    public SQLiteUnfinalizedObjectsException(String error) {
-        super(error);
-    }
-}
diff --git a/core/java/android/view/GLES20Canvas.java b/core/java/android/view/GLES20Canvas.java
index 5a436c4..e06d661 100644
--- a/core/java/android/view/GLES20Canvas.java
+++ b/core/java/android/view/GLES20Canvas.java
@@ -908,12 +908,20 @@
 
     @Override
     public void drawPicture(Picture picture) {
+        if (picture.createdFromStream) {
+            return;
+        }
+
         picture.endRecording();
         // TODO: Implement rendering
     }
 
     @Override
     public void drawPicture(Picture picture, Rect dst) {
+        if (picture.createdFromStream) {
+            return;
+        }
+
         save();
         translate(dst.left, dst.top);
         if (picture.getWidth() > 0 && picture.getHeight() > 0) {
@@ -925,6 +933,10 @@
 
     @Override
     public void drawPicture(Picture picture, RectF dst) {
+        if (picture.createdFromStream) {
+            return;
+        }
+
         save();
         translate(dst.left, dst.top);
         if (picture.getWidth() > 0 && picture.getHeight() > 0) {
diff --git a/core/java/android/widget/AutoCompleteTextView.java b/core/java/android/widget/AutoCompleteTextView.java
index 07523e3..f7a6b272 100644
--- a/core/java/android/widget/AutoCompleteTextView.java
+++ b/core/java/android/widget/AutoCompleteTextView.java
@@ -1085,10 +1085,11 @@
 
                 for (int i = 0; i < count; i++) {
                     if (adapter.isEnabled(i)) {
-                        realCount++;
                         Object item = adapter.getItem(i);
                         long id = adapter.getItemId(i);
-                        completions[i] = new CompletionInfo(id, i, convertSelectionToString(item));
+                        completions[realCount] = new CompletionInfo(id, realCount,
+                                convertSelectionToString(item));
+                        realCount++;
                     }
                 }
                 
diff --git a/core/java/android/widget/TextView.java b/core/java/android/widget/TextView.java
index b2112ed..f78c247 100644
--- a/core/java/android/widget/TextView.java
+++ b/core/java/android/widget/TextView.java
@@ -8913,14 +8913,12 @@
             wordIterator.setCharSequence(mText, minOffset, maxOffset);
 
             selectionStart = wordIterator.getBeginning(minOffset);
-            if (selectionStart == BreakIterator.DONE) return false;
-
             selectionEnd = wordIterator.getEnd(maxOffset);
-            if (selectionEnd == BreakIterator.DONE) return false;
 
-            if (selectionStart == selectionEnd) {
+            if (selectionStart == BreakIterator.DONE || selectionEnd == BreakIterator.DONE ||
+                    selectionStart == selectionEnd) {
                 // Possible when the word iterator does not properly handle the text's language
-                long range = getCharRange(selectionStart);
+                long range = getCharRange(minOffset);
                 selectionStart = extractRangeStartFromLong(range);
                 selectionEnd = extractRangeEndFromLong(range);
             }
diff --git a/core/jni/android_database_SQLiteCommon.cpp b/core/jni/android_database_SQLiteCommon.cpp
index d5fdb15..a94b9d2 100644
--- a/core/jni/android_database_SQLiteCommon.cpp
+++ b/core/jni/android_database_SQLiteCommon.cpp
@@ -109,9 +109,6 @@
         case SQLITE_MISMATCH:
            exceptionClass = "android/database/sqlite/SQLiteDatatypeMismatchException";
            break;
-        case SQLITE_UNCLOSED:
-           exceptionClass = "android/database/sqlite/SQLiteUnfinalizedObjectsException";
-           break;
         default:
            exceptionClass = "android/database/sqlite/SQLiteException";
            break;
diff --git a/core/jni/android_database_SQLiteDebug.cpp b/core/jni/android_database_SQLiteDebug.cpp
index 20ff00b..c1e7305 100644
--- a/core/jni/android_database_SQLiteDebug.cpp
+++ b/core/jni/android_database_SQLiteDebug.cpp
@@ -14,171 +14,42 @@
  * limitations under the License.
  */
 
-#include <JNIHelp.h>
+#define LOG_TAG "SQLiteDebug"
+
 #include <jni.h>
-#include <utils/misc.h>
+#include <JNIHelp.h>
+#include <android_runtime/AndroidRuntime.h>
+
 #include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
 #include <unistd.h>
-#include <cutils/mspace.h>
 #include <utils/Log.h>
 
 #include <sqlite3.h>
 
-// From mem_mspace.c in libsqlite
-extern "C" mspace sqlite3_get_mspace();
-
 namespace android {
 
-static jfieldID gMemoryUsedField;
-static jfieldID gPageCacheOverfloField;
-static jfieldID gLargestMemAllocField;
+static struct {
+    jfieldID memoryUsed;
+    jfieldID pageCacheOverflow;
+    jfieldID largestMemAlloc;
+} gSQLiteDebugPagerStatsClassInfo;
 
-
-#define USE_MSPACE 0
-
-static void getPagerStats(JNIEnv *env, jobject clazz, jobject statsObj)
+static void nativeGetPagerStats(JNIEnv *env, jobject clazz, jobject statsObj)
 {
     int memoryUsed;
-    int pageCacheOverflo;
+    int pageCacheOverflow;
     int largestMemAlloc;
     int unused;
 
     sqlite3_status(SQLITE_STATUS_MEMORY_USED, &memoryUsed, &unused, 0);
     sqlite3_status(SQLITE_STATUS_MALLOC_SIZE, &unused, &largestMemAlloc, 0);
-    sqlite3_status(SQLITE_STATUS_PAGECACHE_OVERFLOW, &pageCacheOverflo, &unused, 0);
-    env->SetIntField(statsObj, gMemoryUsedField, memoryUsed);
-    env->SetIntField(statsObj, gPageCacheOverfloField, pageCacheOverflo);
-    env->SetIntField(statsObj, gLargestMemAllocField, largestMemAlloc);
-}
-
-static jlong getHeapSize(JNIEnv *env, jobject clazz)
-{
-#if !NO_MALLINFO
-    struct mallinfo info = mspace_mallinfo(sqlite3_get_mspace());
-    struct mallinfo info = dlmallinfo();
-    return (jlong) info.usmblks;
-#elif USE_MSPACE
-    mspace space = sqlite3_get_mspace();
-    if (space != 0) {
-        return mspace_footprint(space);
-    } else {
-        return 0;
-    }
-#else
-    return 0;
-#endif
-}
-
-static jlong getHeapAllocatedSize(JNIEnv *env, jobject clazz)
-{
-#if !NO_MALLINFO
-    struct mallinfo info = mspace_mallinfo(sqlite3_get_mspace());
-    return (jlong) info.uordblks;
-#else
-    return sqlite3_memory_used();
-#endif
-}
-
-static jlong getHeapFreeSize(JNIEnv *env, jobject clazz)
-{
-#if !NO_MALLINFO
-    struct mallinfo info = mspace_mallinfo(sqlite3_get_mspace());
-    return (jlong) info.fordblks;
-#else
-    return getHeapSize(env, clazz) - sqlite3_memory_used();
-#endif
-}
-
-static int read_mapinfo(FILE *fp,
-        int *sharedPages, int *privatePages)
-{
-    char line[1024];
-    int len;
-    int skip;
-
-    unsigned start = 0, size = 0, resident = 0;
-    unsigned shared_clean = 0, shared_dirty = 0;
-    unsigned private_clean = 0, private_dirty = 0;
-    unsigned referenced = 0;
-
-    int isAnon = 0;
-    int isHeap = 0;
-
-again:
-    skip = 0;
-    
-    if(fgets(line, 1024, fp) == 0) return 0;
-
-    len = strlen(line);
-    if (len < 1) return 0;
-    line[--len] = 0;
-
-    /* ignore guard pages */
-    if (line[18] == '-') skip = 1;
-
-    start = strtoul(line, 0, 16);
-
-    if (len > 50 && !strncmp(line + 49, "/tmp/sqlite-heap", strlen("/tmp/sqlite-heap"))) {
-        isHeap = 1;
-    }
-
-    if (fgets(line, 1024, fp) == 0) return 0;
-    if (sscanf(line, "Size: %d kB", &size) != 1) return 0;
-    if (fgets(line, 1024, fp) == 0) return 0;
-    if (sscanf(line, "Rss: %d kB", &resident) != 1) return 0;
-    if (fgets(line, 1024, fp) == 0) return 0;
-    if (sscanf(line, "Shared_Clean: %d kB", &shared_clean) != 1) return 0;
-    if (fgets(line, 1024, fp) == 0) return 0;
-    if (sscanf(line, "Shared_Dirty: %d kB", &shared_dirty) != 1) return 0;
-    if (fgets(line, 1024, fp) == 0) return 0;
-    if (sscanf(line, "Private_Clean: %d kB", &private_clean) != 1) return 0;
-    if (fgets(line, 1024, fp) == 0) return 0;
-    if (sscanf(line, "Private_Dirty: %d kB", &private_dirty) != 1) return 0;
-    if (fgets(line, 1024, fp) == 0) return 0;
-    if (sscanf(line, "Referenced: %d kB", &referenced) != 1) return 0;
-    
-    if (skip) {
-        goto again;
-    }
-
-    if (isHeap) {
-        *sharedPages += shared_dirty;
-        *privatePages += private_dirty;
-    }
-    return 1;
-}
-
-static void load_maps(int pid, int *sharedPages, int *privatePages)
-{
-    char tmp[128];
-    FILE *fp;
-    
-    sprintf(tmp, "/proc/%d/smaps", pid);
-    fp = fopen(tmp, "r");
-    if (fp == 0) return;
-    
-    while (read_mapinfo(fp, sharedPages, privatePages) != 0) {
-        // Do nothing
-    }
-    fclose(fp);
-}
-
-static void getHeapDirtyPages(JNIEnv *env, jobject clazz, jintArray pages)
-{
-    int _pages[2];
-
-    _pages[0] = 0;
-    _pages[1] = 0;
-
-    load_maps(getpid(), &_pages[0], &_pages[1]);
-
-    // Convert from kbytes to 4K pages
-    _pages[0] /= 4;
-    _pages[1] /= 4;
-
-    env->SetIntArrayRegion(pages, 0, 2, _pages);
+    sqlite3_status(SQLITE_STATUS_PAGECACHE_OVERFLOW, &pageCacheOverflow, &unused, 0);
+    env->SetIntField(statsObj, gSQLiteDebugPagerStatsClassInfo.memoryUsed, memoryUsed);
+    env->SetIntField(statsObj, gSQLiteDebugPagerStatsClassInfo.pageCacheOverflow,
+            pageCacheOverflow);
+    env->SetIntField(statsObj, gSQLiteDebugPagerStatsClassInfo.largestMemAlloc, largestMemAlloc);
 }
 
 /*
@@ -187,43 +58,31 @@
 
 static JNINativeMethod gMethods[] =
 {
-    { "getPagerStats", "(Landroid/database/sqlite/SQLiteDebug$PagerStats;)V",
-            (void*) getPagerStats },
-    { "getHeapSize", "()J", (void*) getHeapSize },
-    { "getHeapAllocatedSize", "()J", (void*) getHeapAllocatedSize },
-    { "getHeapFreeSize", "()J", (void*) getHeapFreeSize },
-    { "getHeapDirtyPages", "([I)V", (void*) getHeapDirtyPages },
+    { "nativeGetPagerStats", "(Landroid/database/sqlite/SQLiteDebug$PagerStats;)V",
+            (void*) nativeGetPagerStats },
 };
 
+#define FIND_CLASS(var, className) \
+        var = env->FindClass(className); \
+        LOG_FATAL_IF(! var, "Unable to find class " className);
+
+#define GET_FIELD_ID(var, clazz, fieldName, fieldDescriptor) \
+        var = env->GetFieldID(clazz, fieldName, fieldDescriptor); \
+        LOG_FATAL_IF(! var, "Unable to find field " fieldName);
+
 int register_android_database_SQLiteDebug(JNIEnv *env)
 {
     jclass clazz;
+    FIND_CLASS(clazz, "android/database/sqlite/SQLiteDebug$PagerStats");
 
-    clazz = env->FindClass("android/database/sqlite/SQLiteDebug$PagerStats");
-    if (clazz == NULL) {
-        ALOGE("Can't find android/database/sqlite/SQLiteDebug$PagerStats");
-        return -1;
-    }
+    GET_FIELD_ID(gSQLiteDebugPagerStatsClassInfo.memoryUsed, clazz,
+            "memoryUsed", "I");
+    GET_FIELD_ID(gSQLiteDebugPagerStatsClassInfo.largestMemAlloc, clazz,
+            "largestMemAlloc", "I");
+    GET_FIELD_ID(gSQLiteDebugPagerStatsClassInfo.pageCacheOverflow, clazz,
+            "pageCacheOverflow", "I");
 
-    gMemoryUsedField = env->GetFieldID(clazz, "memoryUsed", "I");
-    if (gMemoryUsedField == NULL) {
-        ALOGE("Can't find memoryUsed");
-        return -1;
-    }
-
-    gLargestMemAllocField = env->GetFieldID(clazz, "largestMemAlloc", "I");
-    if (gLargestMemAllocField == NULL) {
-        ALOGE("Can't find largestMemAlloc");
-        return -1;
-    }
-
-    gPageCacheOverfloField = env->GetFieldID(clazz, "pageCacheOverflo", "I");
-    if (gPageCacheOverfloField == NULL) {
-        ALOGE("Can't find pageCacheOverflo");
-        return -1;
-    }
-
-    return jniRegisterNativeMethods(env, "android/database/sqlite/SQLiteDebug",
+    return AndroidRuntime::registerNativeMethods(env, "android/database/sqlite/SQLiteDebug",
             gMethods, NELEM(gMethods));
 }
 
diff --git a/core/jni/android_media_AudioSystem.cpp b/core/jni/android_media_AudioSystem.cpp
index 5f61e16..6b4c5e8 100644
--- a/core/jni/android_media_AudioSystem.cpp
+++ b/core/jni/android_media_AudioSystem.cpp
@@ -155,12 +155,6 @@
 }
 
 static int
-android_media_AudioSystem_setRingerMode(JNIEnv *env, jobject thiz, jint mode, jint mask)
-{
-    return check_AudioSystem_Command(AudioSystem::setRingerMode(mode, mask));
-}
-
-static int
 android_media_AudioSystem_setForceUse(JNIEnv *env, jobject thiz, jint usage, jint config)
 {
     return check_AudioSystem_Command(AudioSystem::setForceUse(static_cast <audio_policy_force_use_t>(usage),
@@ -227,7 +221,6 @@
     {"setDeviceConnectionState", "(IILjava/lang/String;)I", (void *)android_media_AudioSystem_setDeviceConnectionState},
     {"getDeviceConnectionState", "(ILjava/lang/String;)I",  (void *)android_media_AudioSystem_getDeviceConnectionState},
     {"setPhoneState",       "(I)I",     (void *)android_media_AudioSystem_setPhoneState},
-    {"setRingerMode",       "(II)I",    (void *)android_media_AudioSystem_setRingerMode},
     {"setForceUse",         "(II)I",    (void *)android_media_AudioSystem_setForceUse},
     {"getForceUse",         "(I)I",     (void *)android_media_AudioSystem_getForceUse},
     {"initStreamVolume",    "(III)I",   (void *)android_media_AudioSystem_initStreamVolume},
diff --git a/core/jni/android_media_JetPlayer.cpp b/core/jni/android_media_JetPlayer.cpp
index 85c0a9c..9f9bedb 100644
--- a/core/jni/android_media_JetPlayer.cpp
+++ b/core/jni/android_media_JetPlayer.cpp
@@ -523,7 +523,7 @@
             jetPlayerClass,
             JAVA_NATIVEJETPLAYERINJAVAOBJ_FIELD_NAME, "I");
     if (javaJetPlayerFields.nativePlayerInJavaObj == NULL) {
-        ALOGE("Can't find AudioTrack.%s", JAVA_NATIVEJETPLAYERINJAVAOBJ_FIELD_NAME);
+        ALOGE("Can't find JetPlayer.%s", JAVA_NATIVEJETPLAYERINJAVAOBJ_FIELD_NAME);
         return -1;
     }
 
diff --git a/graphics/java/android/graphics/Canvas.java b/graphics/java/android/graphics/Canvas.java
index 5cac42a..dcda67d 100644
--- a/graphics/java/android/graphics/Canvas.java
+++ b/graphics/java/android/graphics/Canvas.java
@@ -130,8 +130,7 @@
      */
     public Canvas(Bitmap bitmap) {
         if (!bitmap.isMutable()) {
-            throw new IllegalStateException(
-                            "Immutable bitmap passed to Canvas constructor");
+            throw new IllegalStateException("Immutable bitmap passed to Canvas constructor");
         }
         throwIfRecycled(bitmap);
         mNativeCanvas = initRaster(bitmap.ni());
@@ -361,8 +360,8 @@
     /**
      * Helper version of saveLayer() that takes 4 values rather than a RectF.
      */
-    public int saveLayer(float left, float top, float right, float bottom,
-                         Paint paint, int saveFlags) {
+    public int saveLayer(float left, float top, float right, float bottom, Paint paint,
+            int saveFlags) {
         return native_saveLayer(mNativeCanvas, left, top, right, bottom,
                                 paint != null ? paint.mNativePaint : 0,
                                 saveFlags);
@@ -392,8 +391,8 @@
     /**
      * Helper for saveLayerAlpha() that takes 4 values instead of a RectF.
      */
-    public int saveLayerAlpha(float left, float top, float right, float bottom,
-                              int alpha, int saveFlags) {
+    public int saveLayerAlpha(float left, float top, float right, float bottom, int alpha,
+            int saveFlags) {
         return native_saveLayerAlpha(mNativeCanvas, left, top, right, bottom,
                                      alpha, saveFlags);
     }
@@ -496,9 +495,15 @@
     /**
      * Completely replace the current matrix with the specified matrix. If the
      * matrix parameter is null, then the current matrix is reset to identity.
+     * 
+     * <strong>Note:</strong> it is recommended to use {@link #concat(Matrix)},
+     * {@link #scale(float, float)}, {@link #translate(float, float)} and
+     * {@link #rotate(float)} instead of this method.
      *
      * @param matrix The matrix to replace the current matrix with. If it is
      *               null, set the current matrix to identity.
+     *               
+     * @see #concat(Matrix) 
      */
     public void setMatrix(Matrix matrix) {
         native_setMatrix(mNativeCanvas,
@@ -509,6 +514,7 @@
      * Return, in ctm, the current transformation matrix. This does not alter
      * the matrix in the canvas, but just returns a copy of it.
      */
+    @Deprecated
     public void getMatrix(Matrix ctm) {
         native_getCTM(mNativeCanvas, ctm.native_instance);
     }
@@ -517,8 +523,10 @@
      * Return a new matrix with a copy of the canvas' current transformation
      * matrix.
      */
+    @Deprecated
     public final Matrix getMatrix() {
         Matrix m = new Matrix();
+        //noinspection deprecation
         getMatrix(m);
         return m;
     }
@@ -531,9 +539,8 @@
      * @return true if the resulting clip is non-empty
      */
     public boolean clipRect(RectF rect, Region.Op op) {
-        return native_clipRect(mNativeCanvas,
-                               rect.left, rect.top, rect.right, rect.bottom,
-                               op.nativeInt);
+        return native_clipRect(mNativeCanvas, rect.left, rect.top, rect.right, rect.bottom,
+                op.nativeInt);
     }
 
     /**
@@ -545,9 +552,8 @@
      * @return true if the resulting clip is non-empty
      */
     public boolean clipRect(Rect rect, Region.Op op) {
-        return native_clipRect(mNativeCanvas,
-                               rect.left, rect.top, rect.right, rect.bottom,
-                               op.nativeInt);
+        return native_clipRect(mNativeCanvas, rect.left, rect.top, rect.right, rect.bottom,
+                op.nativeInt);
     }
 
     /**
@@ -583,10 +589,8 @@
      * @param op     How the clip is modified
      * @return       true if the resulting clip is non-empty
      */
-    public boolean clipRect(float left, float top, float right, float bottom,
-                            Region.Op op) {
-        return native_clipRect(mNativeCanvas, left, top, right, bottom,
-                               op.nativeInt);
+    public boolean clipRect(float left, float top, float right, float bottom, Region.Op op) {
+        return native_clipRect(mNativeCanvas, left, top, right, bottom, op.nativeInt);
     }
 
     /**
@@ -602,9 +606,8 @@
      *               clip
      * @return       true if the resulting clip is non-empty
      */
-    public native boolean clipRect(float left, float top,
-                                   float right, float bottom);
-    
+    public native boolean clipRect(float left, float top, float right, float bottom);
+
     /**
      * Intersect the current clip with the specified rectangle, which is
      * expressed in local coordinates.
@@ -618,9 +621,8 @@
      *               clip
      * @return       true if the resulting clip is non-empty
      */
-    public native boolean clipRect(int left, int top,
-                                   int right, int bottom);
-    
+    public native boolean clipRect(int left, int top, int right, int bottom);
+
     /**
         * Modify the current clip with the specified path.
      *
@@ -753,8 +755,7 @@
      * @return            true if the rect (transformed by the canvas' matrix)
      *                    does not intersect with the canvas' clip
      */
-    public boolean quickReject(float left, float top, float right, float bottom,
-                               EdgeType type) {
+    public boolean quickReject(float left, float top, float right, float bottom, EdgeType type) {
         return native_quickReject(mNativeCanvas, left, top, right, bottom,
                                   type.nativeInt);
     }
@@ -854,8 +855,7 @@
      *                 "points" that are drawn is really (count >> 1).
      * @param paint    The paint used to draw the points
      */
-    public native void drawPoints(float[] pts, int offset, int count,
-                                  Paint paint);
+    public native void drawPoints(float[] pts, int offset, int count, Paint paint);
 
     /**
      * Helper for drawPoints() that assumes you want to draw the entire array
@@ -878,10 +878,8 @@
      * @param startY The y-coordinate of the start point of the line
      * @param paint  The paint used to draw the line
      */
-    public void drawLine(float startX, float startY, float stopX, float stopY,
-                         Paint paint) {
-        native_drawLine(mNativeCanvas, startX, startY, stopX, stopY,
-                        paint.mNativePaint);
+    public void drawLine(float startX, float startY, float stopX, float stopY, Paint paint) {
+        native_drawLine(mNativeCanvas, startX, startY, stopX, stopY, paint.mNativePaint);
     }
 
     /**
@@ -899,8 +897,7 @@
      *                 (count >> 2).
      * @param paint    The paint used to draw the points
      */
-    public native void drawLines(float[] pts, int offset, int count,
-                                 Paint paint);
+    public native void drawLines(float[] pts, int offset, int count, Paint paint);
 
     public void drawLines(float[] pts, Paint paint) {
         drawLines(pts, 0, pts.length, paint);
@@ -939,10 +936,8 @@
      * @param bottom The bottom side of the rectangle to be drawn
      * @param paint  The paint used to draw the rect
      */
-    public void drawRect(float left, float top, float right, float bottom,
-                         Paint paint) {
-        native_drawRect(mNativeCanvas, left, top, right, bottom,
-                        paint.mNativePaint);
+    public void drawRect(float left, float top, float right, float bottom, Paint paint) {
+        native_drawRect(mNativeCanvas, left, top, right, bottom, paint.mNativePaint);
     }
 
     /**
@@ -969,8 +964,7 @@
      * @param paint  The paint used to draw the circle
      */
     public void drawCircle(float cx, float cy, float radius, Paint paint) {
-        native_drawCircle(mNativeCanvas, cx, cy, radius,
-                          paint.mNativePaint);
+        native_drawCircle(mNativeCanvas, cx, cy, radius, paint.mNativePaint);
     }
 
     /**
@@ -996,8 +990,8 @@
                         close it if it is being stroked. This will draw a wedge
      * @param paint      The paint used to draw the arc
      */
-    public void drawArc(RectF oval, float startAngle, float sweepAngle,
-                        boolean useCenter, Paint paint) {
+    public void drawArc(RectF oval, float startAngle, float sweepAngle, boolean useCenter,
+            Paint paint) {
         if (oval == null) {
             throw new NullPointerException();
         }
@@ -1035,8 +1029,7 @@
     
     private static void throwIfRecycled(Bitmap bitmap) {
         if (bitmap.isRecycled()) {
-            throw new RuntimeException(
-                        "Canvas: trying to use a recycled bitmap " + bitmap);
+            throw new RuntimeException("Canvas: trying to use a recycled bitmap " + bitmap);
         }
     }
 
@@ -1077,8 +1070,7 @@
     public void drawBitmap(Bitmap bitmap, float left, float top, Paint paint) {
         throwIfRecycled(bitmap);
         native_drawBitmap(mNativeCanvas, bitmap.ni(), left, top,
-                paint != null ? paint.mNativePaint : 0, mDensity, mScreenDensity,
-                bitmap.mDensity);
+                paint != null ? paint.mNativePaint : 0, mDensity, mScreenDensity, bitmap.mDensity);
     }
 
     /**
@@ -1109,8 +1101,7 @@
         }
         throwIfRecycled(bitmap);
         native_drawBitmap(mNativeCanvas, bitmap.ni(), src, dst,
-                          paint != null ? paint.mNativePaint : 0,
-                          mScreenDensity, bitmap.mDensity);
+                          paint != null ? paint.mNativePaint : 0, mScreenDensity, bitmap.mDensity);
     }
 
     /**
@@ -1141,8 +1132,7 @@
         }
         throwIfRecycled(bitmap);
         native_drawBitmap(mNativeCanvas, bitmap.ni(), src, dst,
-                          paint != null ? paint.mNativePaint : 0,
-                          mScreenDensity, bitmap.mDensity);
+                          paint != null ? paint.mNativePaint : 0, mScreenDensity, bitmap.mDensity);
     }
     
     /**
@@ -1164,9 +1154,8 @@
      *                 be 0xFF for every pixel).
      * @param paint  May be null. The paint used to draw the bitmap
      */
-    public void drawBitmap(int[] colors, int offset, int stride, float x,
-                           float y, int width, int height, boolean hasAlpha,
-                           Paint paint) {
+    public void drawBitmap(int[] colors, int offset, int stride, float x, float y,
+            int width, int height, boolean hasAlpha, Paint paint) {
         // check for valid input
         if (width < 0) {
             throw new IllegalArgumentException("width must be >= 0");
@@ -1195,8 +1184,7 @@
     /** Legacy version of drawBitmap(int[] colors, ...) that took ints for x,y
      */
     public void drawBitmap(int[] colors, int offset, int stride, int x, int y,
-                           int width, int height, boolean hasAlpha,
-                           Paint paint) {
+            int width, int height, boolean hasAlpha, Paint paint) {
         // call through to the common float version
         drawBitmap(colors, offset, stride, (float)x, (float)y, width, height,
                    hasAlpha, paint);
@@ -1250,8 +1238,7 @@
      * @param paint  May be null. The paint used to draw the bitmap
      */
     public void drawBitmapMesh(Bitmap bitmap, int meshWidth, int meshHeight,
-                               float[] verts, int vertOffset,
-                               int[] colors, int colorOffset, Paint paint) {
+            float[] verts, int vertOffset, int[] colors, int colorOffset, Paint paint) {
         if ((meshWidth | meshHeight | vertOffset | colorOffset) < 0) {
             throw new ArrayIndexOutOfBoundsException();
         }
@@ -1269,7 +1256,7 @@
                              verts, vertOffset, colors, colorOffset,
                              paint != null ? paint.mNativePaint : 0);
     }
-        
+
     public enum VertexMode {
         TRIANGLES(0),
         TRIANGLE_STRIP(1),
@@ -1315,12 +1302,9 @@
      * @param indexCount number of entries in the indices array (if not null).
      * @param paint Specifies the shader to use if the texs array is non-null. 
      */
-    public void drawVertices(VertexMode mode, int vertexCount,
-                             float[] verts, int vertOffset,
-                             float[] texs, int texOffset,
-                             int[] colors, int colorOffset,
-                             short[] indices, int indexOffset,
-                             int indexCount, Paint paint) {
+    public void drawVertices(VertexMode mode, int vertexCount, float[] verts, int vertOffset,
+            float[] texs, int texOffset, int[] colors, int colorOffset,
+            short[] indices, int indexOffset, int indexCount, Paint paint) {
         checkRange(verts.length, vertOffset, vertexCount);
         if (texs != null) {
             checkRange(texs.length, texOffset, vertexCount);
@@ -1345,8 +1329,7 @@
      * @param y     The y-coordinate of the origin of the text being drawn
      * @param paint The paint used for the text (e.g. color, size, style)
      */
-    public void drawText(char[] text, int index, int count, float x, float y,
-                         Paint paint) {
+    public void drawText(char[] text, int index, int count, float x, float y, Paint paint) {
         if ((index | count | (index + count) |
             (text.length - index - count)) < 0) {
             throw new IndexOutOfBoundsException();
@@ -1380,8 +1363,7 @@
      * @param y     The y-coordinate of the origin of the text being drawn
      * @param paint The paint used for the text (e.g. color, size, style)
      */
-    public void drawText(String text, int start, int end, float x, float y,
-                         Paint paint) {
+    public void drawText(String text, int start, int end, float x, float y, Paint paint) {
         if ((start | end | (end - start) | (text.length() - end)) < 0) {
             throw new IndexOutOfBoundsException();
         }
@@ -1402,8 +1384,7 @@
      * @param y        The y-coordinate of origin for where to draw the text
      * @param paint The paint used for the text (e.g. color, size, style)
      */
-    public void drawText(CharSequence text, int start, int end, float x,
-                         float y, Paint paint) {
+    public void drawText(CharSequence text, int start, int end, float x, float y, Paint paint) {
         if (text instanceof String || text instanceof SpannedString ||
             text instanceof SpannableString) {
             native_drawText(mNativeCanvas, text.toString(), start, end, x, y,
@@ -1441,9 +1422,8 @@
      * @param paint the paint
      * @hide
      */
-    public void drawTextRun(char[] text, int index, int count,
-            int contextIndex, int contextCount, float x, float y, int dir,
-            Paint paint) {
+    public void drawTextRun(char[] text, int index, int count, int contextIndex, int contextCount,
+            float x, float y, int dir, Paint paint) {
 
         if (text == null) {
             throw new NullPointerException("text is null");
@@ -1479,9 +1459,8 @@
      * @param paint the paint
      * @hide
      */
-    public void drawTextRun(CharSequence text, int start, int end,
-            int contextStart, int contextEnd, float x, float y, int dir,
-            Paint paint) {
+    public void drawTextRun(CharSequence text, int start, int end, int contextStart, int contextEnd,
+            float x, float y, int dir, Paint paint) {
 
         if (text == null) {
             throw new NullPointerException("text is null");
@@ -1527,8 +1506,8 @@
      *                 character
      * @param paint    The paint used for the text (e.g. color, size, style)
      */
-    public void drawPosText(char[] text, int index, int count, float[] pos,
-                            Paint paint) {
+    @Deprecated
+    public void drawPosText(char[] text, int index, int count, float[] pos, Paint paint) {
         if (index < 0 || index + count > text.length || count*2 > pos.length) {
             throw new IndexOutOfBoundsException();
         }
@@ -1547,6 +1526,7 @@
      * @param pos   Array of [x,y] positions, used to position each character
      * @param paint The paint used for the text (e.g. color, size, style)
      */
+    @Deprecated
     public void drawPosText(String text, float[] pos, Paint paint) {
         if (text.length()*2 > pos.length) {
             throw new ArrayIndexOutOfBoundsException();
@@ -1568,7 +1548,7 @@
      * @param paint    The paint used for the text (e.g. color, size, style)
      */
     public void drawTextOnPath(char[] text, int index, int count, Path path,
-                               float hOffset, float vOffset, Paint paint) {
+            float hOffset, float vOffset, Paint paint) {
         if (index < 0 || index + count > text.length) {
             throw new ArrayIndexOutOfBoundsException();
         }
@@ -1590,12 +1570,10 @@
      *                 the text
      * @param paint    The paint used for the text (e.g. color, size, style)
      */
-    public void drawTextOnPath(String text, Path path, float hOffset,
-                               float vOffset, Paint paint) {
+    public void drawTextOnPath(String text, Path path, float hOffset, float vOffset, Paint paint) {
         if (text.length() > 0) {
-            native_drawTextOnPath(mNativeCanvas, text, path.ni(),
-                                  hOffset, vOffset, paint.mBidiFlags,
-                                  paint.mNativePaint);
+            native_drawTextOnPath(mNativeCanvas, text, path.ni(), hOffset, vOffset,
+                    paint.mBidiFlags, paint.mNativePaint);
         }
     }
 
@@ -1618,8 +1596,7 @@
         save();
         translate(dst.left, dst.top);
         if (picture.getWidth() > 0 && picture.getHeight() > 0) {
-            scale(dst.width() / picture.getWidth(),
-                  dst.height() / picture.getHeight());
+            scale(dst.width() / picture.getWidth(), dst.height() / picture.getHeight());
         }
         drawPicture(picture);
         restore();
@@ -1632,8 +1609,8 @@
         save();
         translate(dst.left, dst.top);
         if (picture.getWidth() > 0 && picture.getHeight() > 0) {
-            scale((float)dst.width() / picture.getWidth(),
-                  (float)dst.height() / picture.getHeight());
+            scale((float) dst.width() / picture.getWidth(),
+                    (float) dst.height() / picture.getHeight());
         }
         drawPicture(picture);
         restore();
diff --git a/graphics/java/android/graphics/DrawFilter.java b/graphics/java/android/graphics/DrawFilter.java
index 6b44ed7..1f64539 100644
--- a/graphics/java/android/graphics/DrawFilter.java
+++ b/graphics/java/android/graphics/DrawFilter.java
@@ -28,7 +28,11 @@
     /* package */ int mNativeInt;    // pointer to native object
 
     protected void finalize() throws Throwable {
-        nativeDestructor(mNativeInt);
+        try {
+            nativeDestructor(mNativeInt);
+        } finally {
+            super.finalize();
+        }
     }
     
     private static native void nativeDestructor(int nativeDrawFilter);
diff --git a/graphics/java/android/graphics/Paint.java b/graphics/java/android/graphics/Paint.java
index ce42612..c97785e 100644
--- a/graphics/java/android/graphics/Paint.java
+++ b/graphics/java/android/graphics/Paint.java
@@ -528,6 +528,7 @@
      *
      * @return true if the lineartext bit is set in the paint's flags
      */
+    @Deprecated
     public final boolean isLinearText() {
         return (getFlags() & LINEAR_TEXT_FLAG) != 0;
     }
@@ -538,6 +539,7 @@
      * @param linearText true to set the linearText bit in the paint's flags,
      *                   false to clear it.
      */
+    @Deprecated
     public native void setLinearText(boolean linearText);
 
     /**
@@ -2142,8 +2144,6 @@
     private static native void native_setTextAlign(int native_object,
                                                    int align);
 
-    private static native float native_getFontMetrics(int native_paint,
-                                                      FontMetrics metrics);
     private static native int native_getTextWidths(int native_object,
                             char[] text, int index, int count, float[] widths);
     private static native int native_getTextWidths(int native_object,
diff --git a/graphics/java/android/graphics/Picture.java b/graphics/java/android/graphics/Picture.java
index 9c06fed..997141d 100644
--- a/graphics/java/android/graphics/Picture.java
+++ b/graphics/java/android/graphics/Picture.java
@@ -32,10 +32,15 @@
     private Canvas mRecordingCanvas;
     private final int mNativePicture;
 
+    /**
+     * @hide
+     */
+    public final boolean createdFromStream;
+
     private static final int WORKING_STREAM_STORAGE = 16 * 1024;
 
     public Picture() {
-        this(nativeConstructor(0));
+        this(nativeConstructor(0), false);
     }
 
     /**
@@ -44,7 +49,7 @@
      * changes will not be reflected in this picture.
      */
     public Picture(Picture src) {
-        this(nativeConstructor(src != null ? src.mNativePicture : 0));
+        this(nativeConstructor(src != null ? src.mNativePicture : 0), false);
     }
     
     /**
@@ -101,15 +106,24 @@
     /**
      * Create a new picture (already recorded) from the data in the stream. This
      * data was generated by a previous call to writeToStream().
+     * 
+     * <strong>Note:</strong> a picture created from an input stream cannot be
+     * replayed on a hardware accelerated canvas.
+     * 
+     * @see #writeToStream(java.io.OutputStream) 
      */
     public static Picture createFromStream(InputStream stream) {
-        return new Picture(
-            nativeCreateFromStream(stream, new byte[WORKING_STREAM_STORAGE]));
+        return new Picture(nativeCreateFromStream(stream, new byte[WORKING_STREAM_STORAGE]), true);
     }
 
     /**
      * Write the picture contents to a stream. The data can be used to recreate
      * the picture in this or another process by calling createFromStream.
+     *
+     * <strong>Note:</strong> a picture created from an input stream cannot be
+     * replayed on a hardware accelerated canvas.
+     * 
+     * @see #createFromStream(java.io.InputStream) 
      */
     public void writeToStream(OutputStream stream) {
         // do explicit check before calling the native method
@@ -129,16 +143,17 @@
             super.finalize();
         }
     }
-    
-    /*package*/ final int ni() {
+
+    final int ni() {
         return mNativePicture;
     }
     
-    private Picture(int nativePicture) {
+    private Picture(int nativePicture, boolean fromStream) {
         if (nativePicture == 0) {
             throw new RuntimeException();
         }
         mNativePicture = nativePicture;
+        createdFromStream = fromStream;
     }
 
     // return empty picture if src is 0, or a copy of the native src
diff --git a/include/media/AudioSystem.h b/include/media/AudioSystem.h
index 4415d33..49e5690 100644
--- a/include/media/AudioSystem.h
+++ b/include/media/AudioSystem.h
@@ -149,7 +149,6 @@
     static status_t setDeviceConnectionState(audio_devices_t device, audio_policy_dev_state_t state, const char *device_address);
     static audio_policy_dev_state_t getDeviceConnectionState(audio_devices_t device, const char *device_address);
     static status_t setPhoneState(audio_mode_t state);
-    static status_t setRingerMode(uint32_t mode, uint32_t mask);
     static status_t setForceUse(audio_policy_force_use_t usage, audio_policy_forced_cfg_t config);
     static audio_policy_forced_cfg_t getForceUse(audio_policy_force_use_t usage);
     static audio_io_handle_t getOutput(audio_stream_type_t stream,
diff --git a/include/media/IAudioPolicyService.h b/include/media/IAudioPolicyService.h
index a83d806..8ddbe0a 100644
--- a/include/media/IAudioPolicyService.h
+++ b/include/media/IAudioPolicyService.h
@@ -46,7 +46,6 @@
     virtual audio_policy_dev_state_t getDeviceConnectionState(audio_devices_t device,
                                                                           const char *device_address) = 0;
     virtual status_t setPhoneState(audio_mode_t state) = 0;
-    virtual status_t setRingerMode(uint32_t mode, uint32_t mask) = 0;
     virtual status_t setForceUse(audio_policy_force_use_t usage, audio_policy_forced_cfg_t config) = 0;
     virtual audio_policy_forced_cfg_t getForceUse(audio_policy_force_use_t usage) = 0;
     virtual audio_io_handle_t getOutput(audio_stream_type_t stream,
diff --git a/include/media/thread_init.h b/include/media/thread_init.h
deleted file mode 100644
index 2feac86..0000000
--- a/include/media/thread_init.h
+++ /dev/null
@@ -1,24 +0,0 @@
-/*
- * Copyright (C) 2008 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.
- */
-
-#ifndef THREAD_INIT_H
-#define THREAD_INIT_H
-
-bool InitializeForThread();
-void UninitializeForThread();
-
-#endif /* THREAD_INIT_H*/
-	
diff --git a/libs/hwui/DisplayListRenderer.h b/libs/hwui/DisplayListRenderer.h
index dd7ec4f..422184e 100644
--- a/libs/hwui/DisplayListRenderer.h
+++ b/libs/hwui/DisplayListRenderer.h
@@ -422,7 +422,7 @@
             return;
         }
 
-        SkPaint* paintCopy =  mPaintMap.valueFor(paint);
+        SkPaint* paintCopy = mPaintMap.valueFor(paint);
         if (paintCopy == NULL || paintCopy->getGenerationID() != paint->getGenerationID()) {
             paintCopy = new SkPaint(*paint);
             mPaintMap.add(paint, paintCopy);
diff --git a/media/java/android/media/AudioSystem.java b/media/java/android/media/AudioSystem.java
index 81145d3..3080497 100644
--- a/media/java/android/media/AudioSystem.java
+++ b/media/java/android/media/AudioSystem.java
@@ -313,7 +313,6 @@
     public static native int setDeviceConnectionState(int device, int state, String device_address);
     public static native int getDeviceConnectionState(int device, String device_address);
     public static native int setPhoneState(int state);
-    public static native int setRingerMode(int mode, int mask);
     public static native int setForceUse(int usage, int config);
     public static native int getForceUse(int usage);
     public static native int initStreamVolume(int stream, int indexMin, int indexMax);
diff --git a/media/jni/Android.mk b/media/jni/Android.mk
index d4b326c..ee96a95 100644
--- a/media/jni/Android.mk
+++ b/media/jni/Android.mk
@@ -26,7 +26,6 @@
     libgui \
     libstagefright \
     libcamera_client \
-    libsqlite \
     libmtp \
     libusbhost \
     libexif
diff --git a/media/libmedia/AudioSystem.cpp b/media/libmedia/AudioSystem.cpp
index 7379d68..5ca868a 100644
--- a/media/libmedia/AudioSystem.cpp
+++ b/media/libmedia/AudioSystem.cpp
@@ -49,7 +49,7 @@
 const sp<IAudioFlinger>& AudioSystem::get_audio_flinger()
 {
     Mutex::Autolock _l(gLock);
-    if (gAudioFlinger.get() == 0) {
+    if (gAudioFlinger == 0) {
         sp<IServiceManager> sm = defaultServiceManager();
         sp<IBinder> binder;
         do {
@@ -499,7 +499,7 @@
 const sp<IAudioPolicyService>& AudioSystem::get_audio_policy_service()
 {
     gLock.lock();
-    if (gAudioPolicyService.get() == 0) {
+    if (gAudioPolicyService == 0) {
         sp<IServiceManager> sm = defaultServiceManager();
         sp<IBinder> binder;
         do {
@@ -555,13 +555,6 @@
     return aps->setPhoneState(state);
 }
 
-status_t AudioSystem::setRingerMode(uint32_t mode, uint32_t mask)
-{
-    const sp<IAudioPolicyService>& aps = AudioSystem::get_audio_policy_service();
-    if (aps == 0) return PERMISSION_DENIED;
-    return aps->setRingerMode(mode, mask);
-}
-
 status_t AudioSystem::setForceUse(audio_policy_force_use_t usage, audio_policy_forced_cfg_t config)
 {
     const sp<IAudioPolicyService>& aps = AudioSystem::get_audio_policy_service();
diff --git a/media/libmedia/AudioTrack.cpp b/media/libmedia/AudioTrack.cpp
index 837fcc3..17e3d4b 100644
--- a/media/libmedia/AudioTrack.cpp
+++ b/media/libmedia/AudioTrack.cpp
@@ -43,6 +43,8 @@
 #include <system/audio.h>
 #include <system/audio_policy.h>
 
+#include <audio_utils/primitives.h>
+
 namespace android {
 // ---------------------------------------------------------------------------
 
@@ -1017,12 +1019,7 @@
         if (mFormat == AUDIO_FORMAT_PCM_8_BIT && !(mFlags & AUDIO_POLICY_OUTPUT_FLAG_DIRECT)) {
             // Divide capacity by 2 to take expansion into account
             toWrite = audioBuffer.size>>1;
-            // 8 to 16 bit conversion
-            int count = toWrite;
-            int16_t *dst = (int16_t *)(audioBuffer.i8);
-            while(count--) {
-                *dst++ = (int16_t)(*src++^0x80) << 8;
-            }
+            memcpy_to_i16_from_u8(audioBuffer.i16, (const uint8_t *) src, toWrite);
         } else {
             toWrite = audioBuffer.size;
             memcpy(audioBuffer.i8, src, toWrite);
@@ -1143,13 +1140,8 @@
         if (writtenSize > reqSize) writtenSize = reqSize;
 
         if (mFormat == AUDIO_FORMAT_PCM_8_BIT && !(mFlags & AUDIO_POLICY_OUTPUT_FLAG_DIRECT)) {
-            // 8 to 16 bit conversion
-            const int8_t *src = audioBuffer.i8 + writtenSize-1;
-            int count = writtenSize;
-            int16_t *dst = audioBuffer.i16 + writtenSize-1;
-            while(count--) {
-                *dst-- = (int16_t)(*src--^0x80) << 8;
-            }
+            // 8 to 16 bit conversion, note that source and destination are the same address
+            memcpy_to_i16_from_u8(audioBuffer.i16, (const uint8_t *) audioBuffer.i8, writtenSize);
             writtenSize <<= 1;
         }
 
diff --git a/media/libmedia/IAudioPolicyService.cpp b/media/libmedia/IAudioPolicyService.cpp
index 6205ebd..e363101 100644
--- a/media/libmedia/IAudioPolicyService.cpp
+++ b/media/libmedia/IAudioPolicyService.cpp
@@ -33,7 +33,7 @@
     SET_DEVICE_CONNECTION_STATE = IBinder::FIRST_CALL_TRANSACTION,
     GET_DEVICE_CONNECTION_STATE,
     SET_PHONE_STATE,
-    SET_RINGER_MODE,
+    SET_RINGER_MODE,    // reserved, no longer used
     SET_FORCE_USE,
     GET_FORCE_USE,
     GET_OUTPUT,
@@ -100,16 +100,6 @@
         return static_cast <status_t> (reply.readInt32());
     }
 
-    virtual status_t setRingerMode(uint32_t mode, uint32_t mask)
-    {
-        Parcel data, reply;
-        data.writeInterfaceToken(IAudioPolicyService::getInterfaceDescriptor());
-        data.writeInt32(mode);
-        data.writeInt32(mask);
-        remote()->transact(SET_RINGER_MODE, data, &reply);
-        return static_cast <status_t> (reply.readInt32());
-    }
-
     virtual status_t setForceUse(audio_policy_force_use_t usage, audio_policy_forced_cfg_t config)
     {
         Parcel data, reply;
@@ -405,14 +395,6 @@
             return NO_ERROR;
         } break;
 
-        case SET_RINGER_MODE: {
-            CHECK_INTERFACE(IAudioPolicyService, data, reply);
-            uint32_t mode = data.readInt32();
-            uint32_t mask = data.readInt32();
-            reply->writeInt32(static_cast <uint32_t>(setRingerMode(mode, mask)));
-            return NO_ERROR;
-        } break;
-
         case SET_FORCE_USE: {
             CHECK_INTERFACE(IAudioPolicyService, data, reply);
             audio_policy_force_use_t usage = static_cast <audio_policy_force_use_t>(data.readInt32());
diff --git a/media/libmedia/IMediaDeathNotifier.cpp b/media/libmedia/IMediaDeathNotifier.cpp
index 8525482..aeb35a5 100644
--- a/media/libmedia/IMediaDeathNotifier.cpp
+++ b/media/libmedia/IMediaDeathNotifier.cpp
@@ -36,7 +36,7 @@
 {
     ALOGV("getMediaPlayerService");
     Mutex::Autolock _l(sServiceLock);
-    if (sMediaPlayerService.get() == 0) {
+    if (sMediaPlayerService == 0) {
         sp<IServiceManager> sm = defaultServiceManager();
         sp<IBinder> binder;
         do {
diff --git a/media/libmedia/Visualizer.cpp b/media/libmedia/Visualizer.cpp
index 478654a..13b64e9 100644
--- a/media/libmedia/Visualizer.cpp
+++ b/media/libmedia/Visualizer.cpp
@@ -73,7 +73,7 @@
     if (status == NO_ERROR) {
         if (t != 0) {
             if (enabled) {
-                t->run("AudioTrackThread");
+                t->run("Visualizer");
             } else {
                 t->requestExit();
             }
diff --git a/media/libmedia/mediametadataretriever.cpp b/media/libmedia/mediametadataretriever.cpp
index 88e269f..8d53357 100644
--- a/media/libmedia/mediametadataretriever.cpp
+++ b/media/libmedia/mediametadataretriever.cpp
@@ -35,7 +35,7 @@
 const sp<IMediaPlayerService>& MediaMetadataRetriever::getService()
 {
     Mutex::Autolock lock(sServiceLock);
-    if (sService.get() == 0) {
+    if (sService == 0) {
         sp<IServiceManager> sm = defaultServiceManager();
         sp<IBinder> binder;
         do {
diff --git a/media/libstagefright/include/ThrottledSource.h b/media/libstagefright/include/ThrottledSource.h
index 8928a4a..7fe7c06 100644
--- a/media/libstagefright/include/ThrottledSource.h
+++ b/media/libstagefright/include/ThrottledSource.h
@@ -35,6 +35,11 @@
     virtual status_t getSize(off64_t *size);
     virtual uint32_t flags();
 
+    virtual String8 getMIMEType() const {
+        return mSource->getMIMEType();
+    }
+
+
 private:
     Mutex mLock;
 
diff --git a/media/libstagefright/rtsp/MyHandler.h b/media/libstagefright/rtsp/MyHandler.h
index 2391c5c..9a7dd70 100644
--- a/media/libstagefright/rtsp/MyHandler.h
+++ b/media/libstagefright/rtsp/MyHandler.h
@@ -122,6 +122,7 @@
           mSetupTracksSuccessful(false),
           mSeekPending(false),
           mFirstAccessUnit(true),
+          mAllTracksHaveTime(false),
           mNTPAnchorUs(-1),
           mMediaAnchorUs(-1),
           mLastMediaTimeUs(0),
@@ -723,6 +724,7 @@
                 mSetupTracksSuccessful = false;
                 mSeekPending = false;
                 mFirstAccessUnit = true;
+                mAllTracksHaveTime = false;
                 mNTPAnchorUs = -1;
                 mMediaAnchorUs = -1;
                 mNumAccessUnitsReceived = 0;
@@ -930,6 +932,7 @@
                     info->mNTPAnchorUs = -1;
                 }
 
+                mAllTracksHaveTime = false;
                 mNTPAnchorUs = -1;
 
                 int64_t timeUs;
@@ -1037,6 +1040,14 @@
                         ALOGW("Never received any data, disconnecting.");
                         (new AMessage('abor', id()))->post();
                     }
+                } else {
+                    if (!mAllTracksHaveTime) {
+                        ALOGW("We received some RTCP packets, but time "
+                              "could not be established on all tracks, now "
+                              "using fake timestamps");
+
+                        fakeTimestamps();
+                    }
                 }
                 break;
             }
@@ -1211,6 +1222,7 @@
     bool mSeekPending;
     bool mFirstAccessUnit;
 
+    bool mAllTracksHaveTime;
     int64_t mNTPAnchorUs;
     int64_t mMediaAnchorUs;
     int64_t mLastMediaTimeUs;
@@ -1357,6 +1369,7 @@
     }
 
     void fakeTimestamps() {
+        mNTPAnchorUs = -1ll;
         for (size_t i = 0; i < mTracks.size(); ++i) {
             onTimeUpdate(i, 0, 0ll);
         }
@@ -1377,6 +1390,21 @@
             mNTPAnchorUs = ntpTimeUs;
             mMediaAnchorUs = mLastMediaTimeUs;
         }
+
+        if (!mAllTracksHaveTime) {
+            bool allTracksHaveTime = true;
+            for (size_t i = 0; i < mTracks.size(); ++i) {
+                TrackInfo *track = &mTracks.editItemAt(i);
+                if (track->mNTPAnchorUs < 0) {
+                    allTracksHaveTime = false;
+                    break;
+                }
+            }
+            if (allTracksHaveTime) {
+                mAllTracksHaveTime = true;
+                ALOGI("Time now established for all tracks.");
+            }
+        }
     }
 
     void onAccessUnitComplete(
@@ -1403,7 +1431,7 @@
 
         TrackInfo *track = &mTracks.editItemAt(trackIndex);
 
-        if (mNTPAnchorUs < 0 || mMediaAnchorUs < 0 || track->mNTPAnchorUs < 0) {
+        if (!mAllTracksHaveTime) {
             ALOGV("storing accessUnit, no time established yet");
             track->mPackets.push_back(accessUnit);
             return;
diff --git a/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/functional/videoeditor/MediaItemThumbnailTest.java b/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/functional/videoeditor/MediaItemThumbnailTest.java
index 80a3bcd..7dfab7d 100755
--- a/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/functional/videoeditor/MediaItemThumbnailTest.java
+++ b/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/functional/videoeditor/MediaItemThumbnailTest.java
@@ -82,7 +82,6 @@
     /**
      * To test thumbnail / frame extraction on H.263 QCIF.
      */
-    // TODO : TC_TN_001
     @LargeTest
     public void testThumbnailForH263QCIF() throws Exception {
         final String videoItemFilename = INPUT_FILE_PATH
@@ -104,7 +103,6 @@
     /**
      * To test thumbnail / frame extraction on MPEG4 VGA .
      */
-    // TODO : TC_TN_002
     @LargeTest
     public void testThumbnailForMPEG4VGA() throws Exception {
         final String videoItemFilename = INPUT_FILE_PATH +
@@ -124,7 +122,6 @@
     /**
      * To test thumbnail / frame extraction on MPEG4 NTSC.
      */
-    // TODO : TC_TN_003
     @LargeTest
     public void testThumbnailForMPEG4NTSC() throws Exception {
         final String videoItemFilename = INPUT_FILE_PATH
@@ -144,7 +141,6 @@
     /**
      * To test thumbnail / frame extraction on MPEG4 WVGA.
      */
-    // TODO : TC_TN_004
     @LargeTest
     public void testThumbnailForMPEG4WVGA() throws Exception {
 
@@ -165,7 +161,6 @@
     /**
      * To test thumbnail / frame extraction on MPEG4 QCIF.
      */
-    // TODO : TC_TN_005
     @LargeTest
     public void testThumbnailForMPEG4QCIF() throws Exception {
         final String videoItemFilename = INPUT_FILE_PATH
@@ -186,7 +181,6 @@
     /**
      * To test thumbnail / frame extraction on H264 QCIF.
      */
-    // TODO : TC_TN_006
     @LargeTest
     public void testThumbnailForH264QCIF() throws Exception {
         final String videoItemFilename = INPUT_FILE_PATH
@@ -207,7 +201,6 @@
     /**
      * To test thumbnail / frame extraction on H264 VGA.
      */
-    // TODO : TC_TN_007
     @LargeTest
     public void testThumbnailForH264VGA() throws Exception {
         final String videoItemFilename = INPUT_FILE_PATH +
@@ -228,7 +221,6 @@
     /**
      * To test thumbnail / frame extraction on H264 WVGA.
      */
-    // TODO : TC_TN_008
     @LargeTest
     public void testThumbnailForH264WVGA() throws Exception {
         final String videoItemFilename = INPUT_FILE_PATH +
@@ -248,7 +240,6 @@
     /**
      * To test thumbnail / frame extraction on H264 854x480.
      */
-    // TODO : TC_TN_009
     @LargeTest
     public void testThumbnailForH264854_480() throws Exception {
         final String videoItemFilename = INPUT_FILE_PATH
@@ -269,7 +260,6 @@
     /**
      * To test thumbnail / frame extraction on H264 960x720.
      */
-    // TODO : TC_TN_010
     @LargeTest
     public void testThumbnailForH264HD960() throws Exception {
         final String videoItemFilename = INPUT_FILE_PATH +
@@ -290,7 +280,6 @@
     /**
      * To test thumbnail / frame extraction on H264 1080x720 .
      */
-    // TODO : TC_TN_011
     @LargeTest
     public void testThumbnailForH264HD1080() throws Exception {
         final String videoItemFilename = INPUT_FILE_PATH +
@@ -310,7 +299,6 @@
     /**
      * Check the thumbnail / frame extraction precision at 0,100 and 200 ms
      */
-    // TODO : TC_TN_012
     @LargeTest
     public void testThumbnailForH264VGADifferentDuration() throws Exception {
         final String videoItemFilename = INPUT_FILE_PATH +
@@ -345,7 +333,6 @@
      *Check the thumbnail / frame extraction precision at
      * FileDuration,FileDuration/2 + 100 andFileDuration/2 + 200 ms
      */
-    // TODO : TC_TN_013
     @LargeTest
     public void testThumbnailForMP4VGA() throws Exception {
         final String videoItemFilename = INPUT_FILE_PATH +
@@ -379,7 +366,6 @@
     /**
      * Check the thumbnail / frame extraction on JPEG file
      */
-    // TODO : TC_TN_014
     @LargeTest
     public void testThumbnailForImage() throws Exception {
         final String imageItemFilename = INPUT_FILE_PATH + "IMG_640x480.jpg";
@@ -402,7 +388,6 @@
     /**
      *To test ThumbnailList for H263 QCIF
      */
-    // TODO : TC_TN_015
     @LargeTest
     public void testThumbnailListH263QCIF() throws Exception {
         final String videoItemFilename = INPUT_FILE_PATH
@@ -432,7 +417,6 @@
     /**
      *To test ThumbnailList for MPEG4 QCIF
      */
-    // TODO : TC_TN_016
     @LargeTest
     public void testThumbnailListMPEG4QCIF() throws Exception {
         final String videoItemFilename = INPUT_FILE_PATH
@@ -463,7 +447,6 @@
     /**
      *To test ThumbnailList for H264 VGA
      */
-    // TODO : TC_TN_017
     @LargeTest
     public void testThumbnailListH264VGA() throws Exception {
         final String videoItemFilename = INPUT_FILE_PATH +
@@ -492,7 +475,6 @@
     /**
      *To test ThumbnailList for H264 WVGA
      */
-    // TODO : TC_TN_018
     @LargeTest
     public void testThumbnailListH264WVGA() throws Exception {
         final String videoItemFilename = INPUT_FILE_PATH +
@@ -521,7 +503,6 @@
     /**
      *To test ThumbnailList for H264 VGA ,Time exceeding file duration
      */
-    // TODO : TC_TN_019
     @LargeTest
     public void testThumbnailH264VGAExceedingFileDuration() throws Exception {
         final String videoItemFilename = INPUT_FILE_PATH +
@@ -547,7 +528,6 @@
     /**
      *To test ThumbnailList for VGA Image
      */
-    // TODO : TC_TN_020
     @LargeTest
     public void testThumbnailListVGAImage() throws Exception {
         final String imageItemFilename = INPUT_FILE_PATH + "IMG_640x480.jpg";
@@ -576,7 +556,6 @@
     /**
      *To test ThumbnailList for Invalid file path
      */
-    // TODO : TC_TN_021
     @LargeTest
     public void testThumbnailForInvalidFilePath() throws Exception {
         final String imageItemFileName = INPUT_FILE_PATH + "/sdcard/abc.jpg";
@@ -596,7 +575,6 @@
     /**
      * To test thumbnail / frame extraction with setBoundaries
      */
-    // TODO : TC_TN_022
     @LargeTest
     public void testThumbnailForMPEG4WVGAWithSetBoundaries() throws Exception {
         final String videoItemFilename = INPUT_FILE_PATH +
@@ -620,7 +598,6 @@
     /**
      *To test ThumbnailList for H264 WVGA with setExtractboundaries
      */
-    // TODO : TC_TN_023
     @LargeTest
     public void testThumbnailListForH264WVGAWithSetBoundaries() throws Exception {
         final String videoItemFilename = INPUT_FILE_PATH +
@@ -652,7 +629,6 @@
     /**
      *To test ThumbnailList for H264 WVGA with count > frame available
      */
-    // TODO : TC_TN_024
     @LargeTest
     public void testThumbnailListForH264WVGAWithCount() throws Exception {
         final String videoItemFilename = INPUT_FILE_PATH +
@@ -684,7 +660,6 @@
     /**
      *To test ThumbnailList for H264 WVGA with startTime > End Time
      */
-    // TODO : TC_TN_025
     @LargeTest
     public void testThumbnailListH264WVGAWithStartGreaterEnd() throws Exception {
         final String videoItemFilename = INPUT_FILE_PATH +
@@ -710,9 +685,8 @@
     }
 
     /**
-     *To test ThumbnailList TC_TN_026 for H264 WVGA with startTime = End Time
+     *To test ThumbnailList for H264 WVGA with startTime = End Time
      */
-    // TODO : TC_TN_026
     @LargeTest
     public void testThumbnailListH264WVGAWithStartEqualEnd() throws Exception {
         final String videoItemFilename = INPUT_FILE_PATH +
@@ -738,10 +712,9 @@
     }
 
     /**
-     *To test ThumbnailList TC_TN_027 for file where video duration is less
+     *To test ThumbnailList for file where video duration is less
      * than file duration.
      */
-    // TODO : TC_TN_027
     @LargeTest
     public void testThumbnailForVideoDurationLessFileDuration() throws Exception {
         final String videoItemFilename = INPUT_FILE_PATH
@@ -760,9 +733,8 @@
     }
 
     /**
-     *To test ThumbnailList TC_TN_028 for file which has video part corrupted
+     *To test ThumbnailList for file which has video part corrupted
      */
-    // TODO : TC_TN_028
     @LargeTest
     public void testThumbnailWithCorruptedVideoPart() throws Exception {
         final String videoItemFilename = INPUT_FILE_PATH +
@@ -787,7 +759,6 @@
     /**
      * Check the thumbnail / frame list extraction for Height as Negative Value
      */
-    // TODO : TC_TN_029
     @LargeTest
     public void testThumbnailWithNegativeHeight() throws Exception {
         final String videoItemFilename = INPUT_FILE_PATH
@@ -815,7 +786,6 @@
     /**
      * Check the thumbnail for Height as Zero
      */
-    // TODO : TC_TN_030
     @LargeTest
     public void testThumbnailWithHeightAsZero() throws Exception {
         final String videoItemFilename = INPUT_FILE_PATH
@@ -839,7 +809,6 @@
     /**
      * Check the thumbnail for Height = 10
      */
-    // TODO : TC_TN_031
     @LargeTest
     public void testThumbnailWithHeight() throws Exception {
         final String videoItemFilename = INPUT_FILE_PATH
@@ -859,7 +828,6 @@
     /**
      * Check the thumbnail / frame list extraction for Width as Negative Value
      */
-    // TODO : TC_TN_032
     @LargeTest
     public void testThumbnailWithNegativeWidth() throws Exception {
         final String videoItemFilename = INPUT_FILE_PATH
@@ -887,7 +855,6 @@
     /**
      * Check the thumbnail / frame list extraction for Width zero
      */
-    // TODO : TC_TN_033
     @LargeTest
     public void testThumbnailWithWidthAsZero() throws Exception {
         final String videoItemFilename = INPUT_FILE_PATH
@@ -911,7 +878,6 @@
     /**
      * Check the thumbnail for Width = 10
      */
-    // TODO : TC_TN_034
     @LargeTest
     public void testThumbnailWithWidth() throws Exception {
         final String videoItemFilename = INPUT_FILE_PATH
@@ -931,7 +897,6 @@
     /**
      * To test thumbnail / frame extraction on MPEG4 (time beyond file duration).
      */
-    // TODO : TC_TN_035
     @LargeTest
     public void testThumbnailMPEG4withMorethanFileDuration() throws Exception {
         final String videoItemFilename = INPUT_FILE_PATH
diff --git a/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/functional/videoeditor/MediaPropertiesTest.java b/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/functional/videoeditor/MediaPropertiesTest.java
index e2f6863..34cf9f0 100755
--- a/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/functional/videoeditor/MediaPropertiesTest.java
+++ b/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/functional/videoeditor/MediaPropertiesTest.java
@@ -130,7 +130,6 @@
     /**
      *To test Media Properties for file MPEG4 854 x 480
      */
-    // TODO : Remove TC_MP_001
     @LargeTest
     public void testPropertiesMPEG4854_480() throws Exception {
         final String videoItemFilename = INPUT_FILE_PATH
@@ -163,7 +162,6 @@
     /**
      *To test Media Properties for file MPEG4 WVGA
      */
-    // TODO : Remove TC_MP_002
     @LargeTest
     public void testPropertiesMPEGWVGA() throws Exception {
         final String videoItemFilename = INPUT_FILE_PATH
@@ -195,7 +193,6 @@
     /**
      *To test media properties for MPEG4 720x480 (NTSC) + AAC file.
      */
-    // TODO : Remove TC_MP_003
     @LargeTest
     public void testPropertiesMPEGNTSC() throws Exception {
         final String videoItemFilename = INPUT_FILE_PATH
@@ -227,7 +224,6 @@
     /**
      *To test Media Properties for file MPEG4 VGA
      */
-    // TODO : Remove TC_MP_004
     @LargeTest
     public void testPropertiesMPEGVGA() throws Exception {
         final String videoItemFilename = INPUT_FILE_PATH
@@ -259,7 +255,6 @@
     /**
      *To test Media Properties for file MPEG4 QCIF
      */
-    // TODO : Remove TC_MP_005
     @LargeTest
     public void testPropertiesMPEGQCIF() throws Exception {
         final String videoItemFilename = INPUT_FILE_PATH
@@ -291,7 +286,6 @@
     /**
      *To To test media properties for H263 176x144 (QCIF) + AAC (mono) file.
      */
-    // TODO : Remove TC_MP_006
     @LargeTest
     public void testPropertiesH263QCIF() throws Exception {
         final String videoItemFilename = INPUT_FILE_PATH
@@ -322,7 +316,6 @@
     /**
      *To test Media Properties for file H264 VGA
      */
-    // TODO : Remove TC_MP_007
     @LargeTest
     public void testPropertiesH264VGA() throws Exception {
         final String videoItemFilename = INPUT_FILE_PATH
@@ -353,7 +346,6 @@
     /**
      *To test Media Properties for file H264 NTSC
      */
-    // TODO : Remove TC_MP_008
     @LargeTest
     public void testPropertiesH264NTSC() throws Exception {
         final String videoItemFilename = INPUT_FILE_PATH
@@ -385,7 +377,6 @@
     /**
      *To test media properties for H264 800x480 (WVGA) + AAC file.
      */
-    // TODO : Remove TC_MP_009
     @LargeTest
     public void testPropertiesH264WVGA() throws Exception {
         final String videoItemFilename = INPUT_FILE_PATH +
@@ -417,7 +408,6 @@
     /**
      *To test Media Properties for file H264 HD1280
      */
-    // TODO : Remove TC_MP_010
     @LargeTest
     public void testPropertiesH264HD1280() throws Exception {
         final String videoItemFilename = INPUT_FILE_PATH
@@ -449,7 +439,6 @@
     /**
      *To test media properties for H264 1080x720 + AAC file
      */
-    // TODO : Remove TC_MP_011
     @LargeTest
     public void testPropertiesH264HD1080WithAudio() throws Exception {
         final String videoItemFilename = INPUT_FILE_PATH
@@ -481,7 +470,6 @@
     /**
      *To test Media Properties for file WMV - Unsupported type
      */
-    // TODO : Remove TC_MP_012
     @LargeTest
     public void testPropertiesWMVFile() throws Exception {
         final String videoItemFilename = INPUT_FILE_PATH +
@@ -506,7 +494,6 @@
     /**
      *To test media properties for H.264 Main/Advanced profile.
      */
-    // TODO : Remove TC_MP_013
     @LargeTest
     public void testPropertiesH264MainLineProfile() throws Exception {
         final String videoItemFilename = INPUT_FILE_PATH
@@ -539,7 +526,6 @@
     /**
      *To test Media Properties for non existing file.
      */
-    // TODO : Remove TC_MP_014
     @LargeTest
     public void testPropertiesForNonExsitingFile() throws Exception {
         final String videoItemFilename = INPUT_FILE_PATH + "abc.3gp";
@@ -559,7 +545,6 @@
     /**
      *To test Media Properties for file H264 HD1080
      */
-    // TODO : Remove TC_MP_015
     @LargeTest
     public void testPropertiesH264HD1080WithoutAudio() throws Exception {
         final String videoItemFilename = INPUT_FILE_PATH +
@@ -591,7 +576,6 @@
     /**
      *To test Media Properties for Image file of JPEG Type
      */
-    // TODO : Remove TC_MP_016
     @LargeTest
     public void testPropertiesVGAImage() throws Exception {
         final String imageItemFilename = INPUT_FILE_PATH + "IMG_640x480.jpg";
@@ -611,7 +595,6 @@
     /**
      *To test Media Properties for Image file of PNG Type
      */
-    // TODO : Remove TC_MP_017
     @LargeTest
     public void testPropertiesPNG() throws Exception {
         final String imageItemFilename = INPUT_FILE_PATH + "IMG_640x480.png";
@@ -630,7 +613,6 @@
     /**
      *To test Media Properties for file GIF - Unsupported type
      */
-    // TODO : Remove TC_MP_018
     @LargeTest
     public void testPropertiesGIFFile() throws Exception {
 
@@ -651,7 +633,6 @@
     /**
      *To test Media Properties for file Text file named as 3GP
      */
-    // TODO : Remove TC_MP_019
     @LargeTest
     public void testPropertiesofDirtyFile() throws Exception {
 
@@ -672,7 +653,6 @@
     /**
      *To test Media Properties for file name as NULL
      */
-    // TODO : Remove TC_MP_020
     @LargeTest
     public void testPropertieNULLFile() throws Exception {
         final String videoItemFilename = null;
@@ -691,7 +671,6 @@
     /**
      *To test Media Properties for file which is of type MPEG2
      */
-    // TODO : Remove TC_MP_021
     @LargeTest
     public void testPropertiesMPEG2File() throws Exception {
         final String videoItemFilename = INPUT_FILE_PATH +
@@ -709,9 +688,8 @@
     }
 
     /**
-     *To test Media Properties TC_MP_023 for file without Video only Audio
+     *To test Media Properties for file without Video only Audio
      */
-    // TODO : Remove TC_MP_023
     @LargeTest
     public void testProperties3GPWithoutVideoMediaItem() throws Exception {
         final String audioFilename = INPUT_FILE_PATH +
@@ -731,7 +709,6 @@
     /**
      *To test media properties for Audio Track file. (No Video, AAC Audio)
      */
-    // TODO : Remove TC_MP_024
     @LargeTest
     public void testProperties3GPWithoutVideoAudioTrack() throws Exception {
 
@@ -753,7 +730,6 @@
         /**
      *To test media properties for Audio Track file. MP3 file
      */
-    // TODO : Remove TC_MP_025
     @LargeTest
     public void testPropertiesMP3AudioTrack() throws Exception {
 
diff --git a/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/functional/videoeditor/VideoEditorAPITest.java b/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/functional/videoeditor/VideoEditorAPITest.java
index b32d865..6e520c3 100644
--- a/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/functional/videoeditor/VideoEditorAPITest.java
+++ b/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/functional/videoeditor/VideoEditorAPITest.java
@@ -88,7 +88,6 @@
     /**
      * To Test Creation of Media Video Item.
      */
-    // TODO : remove TC_API_001
     @LargeTest
     public void testMediaVideoItem() throws Exception {
         final String videoItemFileName = INPUT_FILE_PATH
@@ -130,7 +129,6 @@
      * To test creation of Media Video Item with Set Extract Boundaries With Get
      * the Begin and End Time.
      */
-    // TODO : remove TC_API_002
     @LargeTest
     public void testMediaVideoItemExtractBoundaries() throws Exception {
         final String videoItemFileName = INPUT_FILE_PATH
@@ -199,7 +197,6 @@
     /**
      * To test creation of Media Video Item with Set and Get rendering Mode
      */
-    // TODO : remove TC_API_003
     @LargeTest
     public void testMediaVideoItemRenderingModes() throws Exception {
         final String videoItemFileName = INPUT_FILE_PATH
@@ -238,12 +235,10 @@
             mediaVideoItem1.getRenderingMode());
     }
 
-    /** Test Case  TC_API_004 is removed */
 
     /**
      * To Test the Media Video API : Set Audio Volume, Get Audio Volume and Mute
      */
-    // TODO : remove TC_API_005
     @LargeTest
     public void testMediaVideoItemAudioFeatures() throws Exception {
         final String videoItemFileName = INPUT_FILE_PATH
@@ -301,7 +296,6 @@
      * extractAudioWaveFormData
      */
 
-    // TODO : remove TC_API_006
     @LargeTest
     public void testMediaVideoItemGetWaveformData() throws Exception {
 
@@ -343,7 +337,6 @@
      * To Test the Media Video API : Get Effect, GetAllEffects, remove Effect
      */
 
-    // TODO : remove TC_API_007
     @LargeTest
     public void testMediaVideoItemEffect() throws Exception {
         final String videoItemFileName = INPUT_FILE_PATH
@@ -384,7 +377,6 @@
      * To Test the Media Video API : Get Before and after transition
      */
 
-    // TODO : remove TC_API_008
     @LargeTest
     public void testMediaVideoItemTransitions() throws Exception {
         final String videoItemFileName = INPUT_FILE_PATH
@@ -431,7 +423,6 @@
      *
      */
 
-    // TODO : remove TC_API_009
     @LargeTest
     public void testMediaVideoItemOverlays() throws Exception {
         final String videoItemFileName = INPUT_FILE_PATH
@@ -474,7 +465,6 @@
     /**
      * To Test Creation of Media Image Item.
      */
-    // TODO : remove TC_API_010
     @LargeTest
     public void testMediaImageItem() throws Exception {
         final String imageItemFileName = INPUT_FILE_PATH + "IMG_1600x1200.jpg";
@@ -511,7 +501,6 @@
     /**
      * To Test the Media Image API : Get and Set rendering Mode
      */
-    // TODO : remove TC_API_011
     @LargeTest
     public void testMediaImageItemRenderingModes() throws Exception {
         final String imageItemFileName = INPUT_FILE_PATH + "IMG_1600x1200.jpg";
@@ -554,7 +543,6 @@
     /**
      * To Test the Media Image API : GetHeight and GetWidth
      */
-    // TODO : remove TC_API_012
     @LargeTest
     public void testMediaImageItemHeightWidth() throws Exception {
         final String imageItemFileName = INPUT_FILE_PATH + "IMG_640x480.jpg";
@@ -576,7 +564,6 @@
     /**
      * To Test the Media Image API : Scaled Height and Scaled GetWidth
      */
-    // TODO : remove TC_API_013
     @LargeTest
     public void testMediaImageItemScaledHeightWidth() throws Exception {
         final String imageItemFileName = INPUT_FILE_PATH + "IMG_1600x1200.jpg";
@@ -597,7 +584,6 @@
      * To Test the Media Image API : Get Effect, GetAllEffects, remove Effect
      */
 
-    // TODO : remove TC_API_014
     @LargeTest
     public void testMediaImageItemEffect() throws Exception {
         final String imageItemFileName = INPUT_FILE_PATH + "IMG_1600x1200.jpg";
@@ -637,7 +623,6 @@
      * To Test the Media Image API : Get Before and after transition
      */
 
-    // TODO : remove TC_API_015
     @LargeTest
     public void testMediaImageItemTransitions() throws Exception {
         final String imageItemFileName = INPUT_FILE_PATH + "IMG_1600x1200.jpg";
@@ -685,7 +670,6 @@
      * Overlay
      */
 
-    // TODO : remove TC_API_016
     @LargeTest
     public void testMediaImageItemOverlays() throws Exception {
         final String imageItemFileName = INPUT_FILE_PATH + "IMG_640x480.jpg";
@@ -729,7 +713,6 @@
      * To test creation of Audio Track
      */
 
-    // TODO : remove TC_API_017
     @LargeTest
     public void testAudioTrack() throws Exception {
         final String audioFileName = INPUT_FILE_PATH +
@@ -756,7 +739,6 @@
     /**
      * To test creation of Audio Track with set extract boundaries
      */
-    // TODO : remove TC_API_018
     @LargeTest
     public void testAudioTrackExtractBoundaries() throws Exception {
         final String audioFileName = INPUT_FILE_PATH +
@@ -824,7 +806,6 @@
     /**
      * To test creation of Audio Track with set Start Time and Get Time
      */
-    // TODO : remove TC_API_019
     @LargeTest
     public void testAudioTrackSetGetTime() throws Exception {
         final String audioFileName = INPUT_FILE_PATH +
@@ -840,7 +821,6 @@
     /**
      * To Test the Audio Track API: Enable Ducking
      */
-    // TODO : remove TC_API_020
     @LargeTest
     public void testAudioTrackEnableDucking() throws Exception {
         final String audioFileName = INPUT_FILE_PATH +
@@ -910,7 +890,6 @@
     /**
      * To Test the Audio Track API: Looping
      */
-    // TODO : remove TC_API_021
     @LargeTest
     public void testAudioTrackLooping() throws Exception {
         final String audioFileName = INPUT_FILE_PATH +
@@ -928,7 +907,6 @@
     /**
      * To Test the Audio Track API:Extract waveform data
      */
-    // TODO : remove TC_API_022
 
     @LargeTest
     public void testAudioTrackWaveFormData() throws Exception {
@@ -984,7 +962,6 @@
     /**
      * To Test the Audio Track API: Mute
      */
-    // TODO : remove TC_API_023
     @LargeTest
     public void testAudioTrackMute() throws Exception {
         final String audioFileName = INPUT_FILE_PATH +
@@ -1001,7 +978,6 @@
     /**
      * To Test the Audio Track API: Get Volume and Set Volume
      */
-    // TODO : remove TC_API_024
     @LargeTest
     public void testAudioTrackGetSetVolume() throws Exception {
         final String audioFileName = INPUT_FILE_PATH +
@@ -1042,7 +1018,6 @@
     /**
      * To test Effect Color.
      */
-    // TODO : remove TC_API_025
     @LargeTest
     public void testAllEffects() throws Exception {
         final String videoItemFileName = INPUT_FILE_PATH +
@@ -1206,7 +1181,6 @@
     /**
      * To test Effect Color : Set duration and Get Duration
      */
-    // TODO : remove TC_API_026
     @LargeTest
     public void testEffectSetgetDuration() throws Exception {
         final String videoItemFileName = INPUT_FILE_PATH +
@@ -1246,7 +1220,6 @@
     /**
      * To test Effect Color : UNDEFINED color param value
      */
-    // TODO : remove TC_API_027
     @LargeTest
     public void testEffectUndefinedColorParam() throws Exception {
         final String videoItemFileName = INPUT_FILE_PATH +
@@ -1269,7 +1242,6 @@
     /**
      * To test Effect Color : with Invalid StartTime and Duration
      */
-    // TODO : remove TC_API_028
     @LargeTest
     public void testEffectInvalidStartTimeAndDuration() throws Exception {
         final String videoItemFileName = INPUT_FILE_PATH +
@@ -1315,7 +1287,6 @@
     /**
      * To test Effect : with NULL Media Item
      */
-    // TODO : remove TC_API_034
     @LargeTest
     public void testEffectNullMediaItem() throws Exception {
         boolean flagForException = false;
@@ -1331,7 +1302,6 @@
     /**
      * To test Effect : KenBurn Effect
      */
-    // TODO : remove TC_API_035
     @LargeTest
     public void testEffectKenBurn() throws Exception {
         // Test ken burn effect using a JPEG file.
@@ -1375,7 +1345,6 @@
      * To test KenBurnEffect : Set StartRect and EndRect
      */
 
-    // TODO : remove TC_API_036
     @LargeTest
     public void testEffectKenBurnSet() throws Exception {
         final String imageItemFileName = INPUT_FILE_PATH + "IMG_640x480.jpg";
@@ -1443,7 +1412,6 @@
      * SPEED_UP/SPEED_DOWN/LINEAR/MIDDLE_SLOW/MIDDLE_FAST
      */
 
-    // TODO : remove TC_API_037
     @LargeTest
     public void testTransitionFadeBlack() throws Exception {
 
@@ -1591,7 +1559,6 @@
      * SPEED_UP/SPEED_DOWN/LINEAR/MIDDLE_SLOW/MIDDLE_FAST
      */
 
-    // TODO : remove TC_API_038
     @LargeTest
     public void testTransitionCrossFade() throws Exception {
 
@@ -1742,7 +1709,6 @@
      * ,DIRECTION_BOTTOM_OUT_TOP_IN
      */
 
-    // TODO : remove TC_API_039
     @LargeTest
     public void testTransitionSliding() throws Exception {
         final String videoItemFilename1 = INPUT_FILE_PATH +
@@ -1932,7 +1898,6 @@
      * SPEED_UP/SPEED_DOWN/LINEAR/MIDDLE_SLOW/MIDDLE_FAST
      */
 
-    // TODO : remove TC_API_040
     @LargeTest
     public void testTransitionAlpha() throws Exception {
 
@@ -2111,7 +2076,6 @@
      * To test Frame Overlay for Media Video Item
      */
 
-    // TODO : remove TC_API_041
     @LargeTest
     public void testFrameOverlayVideoItem() throws Exception {
         final String videoItemFilename1 = INPUT_FILE_PATH +
@@ -2147,7 +2111,6 @@
      * Duration
      */
 
-    // TODO : remove TC_API_042
     @LargeTest
     public void testFrameOverlaySetAndGet() throws Exception {
         final String videoItemFilename1 = INPUT_FILE_PATH +
@@ -2193,7 +2156,6 @@
      * Duration
      */
 
-    // TODO : remove TC_API_043
     @LargeTest
     public void testFrameOverlayInvalidTime() throws Exception {
         final String videoItemFilename1 = INPUT_FILE_PATH +
@@ -2242,7 +2204,6 @@
     /**
      * To test Frame Overlay for Media Image Item
      */
-    // TODO : remove TC_API_045
     @LargeTest
     public void testFrameOverlayImageItem() throws Exception {
         final String imageItemFilename1 = INPUT_FILE_PATH + "IMG_640x480.jpg";
@@ -2278,7 +2239,6 @@
      * Duration
      */
 
-    // TODO : remove TC_API_046
     @LargeTest
     public void testFrameOverlaySetAndGetImage() throws Exception {
         final String videoItemFilename1 = INPUT_FILE_PATH + "IMG_640x480.jpg";
@@ -2321,7 +2281,6 @@
      * Duration
      */
 
-    // TODO : remove TC_API_047
     @LargeTest
     public void testFrameOverlayInvalidTimeImage() throws Exception {
         final String videoItemFilename1 = INPUT_FILE_PATH + "IMG_640x480.jpg";
@@ -2370,7 +2329,6 @@
      * To Test Frame Overlay Media Image Item :JPG File
      */
 
-    // TODO : remove TC_API_048
     @LargeTest
     public void testFrameOverlayJPGImage() throws Exception {
 
@@ -2392,7 +2350,6 @@
      *
      * @throws Exception
      */
-    // TODO : remove TC_API_049
     @LargeTest
     public void testVideoEditorAPI() throws Exception {
 
@@ -2555,7 +2512,6 @@
      *
      * @throws Exception
      */
-    // TODO : remove TC_API_050
     @LargeTest
     public void testVideoLessThanAudio() throws Exception {
         final String videoItemFileName1 = INPUT_FILE_PATH
@@ -2583,7 +2539,6 @@
      *
      * @throws Exception
      */
-    // TODO : remove TC_API_051
     @LargeTest
     public void testVideoContentHD() throws Exception {
         final String videoItemFileName1 = INPUT_FILE_PATH
@@ -2609,7 +2564,6 @@
      *
      * @throws Exception
      */
-    // TODO : remove TC_API_052
     @LargeTest
     public void testRemoveAudioTrack() throws Exception {
         final String audioFileName = INPUT_FILE_PATH +
@@ -2638,7 +2592,6 @@
      *
      * @throws Exception
      */
-    // TODO : remove TC_API_053
     @LargeTest
     public void testAudioDuckingDisable() throws Exception {
         final String audioFileName = INPUT_FILE_PATH +
@@ -2653,8 +2606,6 @@
     }
 
 
-    // TODO : remove TC_API_054
-    /** This test case is added with Test case ID TC_API_010 */
 
       /**
      * To test: Need a basic test case for the get value for TransitionAlpha
@@ -2662,7 +2613,6 @@
      *
      * @throws Exception
      */
-    // TODO : remove TC_API_055
     @LargeTest
     public void testTransitionAlphaBasic() throws Exception {
 
@@ -2700,7 +2650,6 @@
      *
      * @throws Exception
      */
-    // TODO : remove TC_API_056
     @LargeTest
     public void testNullAPIs() throws Exception {
 
diff --git a/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/functional/videoeditor/VideoEditorExportTest.java b/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/functional/videoeditor/VideoEditorExportTest.java
index 57a1c75..69ecf0d 100755
--- a/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/functional/videoeditor/VideoEditorExportTest.java
+++ b/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/functional/videoeditor/VideoEditorExportTest.java
@@ -91,7 +91,6 @@
     /**
      * To Test export : Merge and Trim different types of Video and Image files
      */
-    // TODO :remove TC_EXP_001
     @LargeTest
     public void testExportMergeTrim() throws Exception {
         final String videoItemFilename1 = INPUT_FILE_PATH
@@ -173,7 +172,6 @@
     /**
      *To Test export : With Effect and Overlays on Different Media Items
      */
-    // TODO :remove TC_EXP_002
     @LargeTest
     public void testExportEffectOverlay() throws Exception {
           final String videoItemFilename1 = INPUT_FILE_PATH
@@ -301,7 +299,6 @@
     /**
      * To test export : with Image with KenBurnEffect
      */
-    // TODO : remove TC_EXP_003
     @LargeTest
     public void testExportEffectKenBurn() throws Exception {
         final String imageItemFileName = INPUT_FILE_PATH + "IMG_640x480.jpg";
@@ -359,7 +356,6 @@
     /**
      * To Test Export : With Video and Image and An Audio BackGround Track
      */
-    // TODO : remove TC_EXP_004
     @LargeTest
     public void testExportAudio() throws Exception {
         final String videoItemFileName = INPUT_FILE_PATH
@@ -420,7 +416,6 @@
     /**
      *To Test export : With Transition on Different Media Items
      */
-    // TODO :remove TC_EXP_005
     @LargeTest
     public void testExportTransition() throws Exception {
         final String videoItemFilename1 = INPUT_FILE_PATH
@@ -540,7 +535,6 @@
      *
      * @throws Exception
      */
-    // TODO :remove TC_EXP_006
     @LargeTest
     public void testExportWithoutMediaItems() throws Exception {
         boolean flagForException = false;
@@ -566,7 +560,6 @@
      *
      * @throws Exception
      */
-    // TODO :remove TC_EXP_007
     @LargeTest
     public void testExportWithoutMediaItemsAddRemove() throws Exception {
         final String videoItemFilename1 = INPUT_FILE_PATH +
@@ -621,7 +614,6 @@
      *
      * @throws Exception
      */
-    // TODO :remove TC_EXP_008
     @LargeTest
     public void testExportMMS() throws Exception {
         final String videoItemFilename1 = INPUT_FILE_PATH
diff --git a/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/functional/videoeditor/VideoEditorPreviewTest.java b/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/functional/videoeditor/VideoEditorPreviewTest.java
index 4181903..7965b0a 100644
--- a/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/functional/videoeditor/VideoEditorPreviewTest.java
+++ b/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/functional/videoeditor/VideoEditorPreviewTest.java
@@ -216,7 +216,6 @@
     /**
      *To test Preview : FULL Preview of current work (beginning till end)
      */
-    // TODO : remove TC_PRV_001
     @LargeTest
     public void testPreviewTheStoryBoard() throws Exception {
         final String videoItemFileName1 = INPUT_FILE_PATH
@@ -275,7 +274,6 @@
     /**
      * To test Preview : Preview of start + 10 sec till end of story board
      */
-    // TODO : remove TC_PRV_002
     @LargeTest
     public void testPreviewTheStoryBoardFromDuration() throws Exception {
         final String videoItemFileName1 = INPUT_FILE_PATH
@@ -336,7 +334,6 @@
     /**
      * To test Preview : Preview of current Effects applied
      */
-    // TODO : remove TC_PRV_003
     @LargeTest
     public void testPreviewOfEffects() throws Exception {
         final String videoItemFileName1 = INPUT_FILE_PATH +
@@ -394,7 +391,6 @@
      *To test Preview : Preview of current Transitions applied (with multiple
      * generatePreview)
      */
-    // TODO : remove TC_PRV_004
     @LargeTest
     public void testPreviewWithTransition() throws Exception {
 
@@ -547,7 +543,6 @@
     /**
      * To test Preview : Preview of current Overlay applied
      */
-    // TODO : remove TC_PRV_005
     @LargeTest
     public void testPreviewWithOverlay() throws Exception {
         final String videoItemFileName = INPUT_FILE_PATH
@@ -601,7 +596,6 @@
      * To test Preview : Preview of current Trim applied (with default aspect
      * ratio)
      */
-    // TODO : remove TC_PRV_006
     @LargeTest
     public void testPreviewWithTrim() throws Exception {
         final String videoItemFileName = INPUT_FILE_PATH +
@@ -625,7 +619,6 @@
      * applied
      */
 
-    // TODO : remove TC_PRV_007
     @LargeTest
     public void testPreviewWithOverlayEffectKenBurn() throws Exception {
 
@@ -684,7 +677,6 @@
     /**
      *To test Preview : Export during preview
      */
-    // TODO : remove TC_PRV_008
     @LargeTest
     public void testPreviewDuringExport() throws Exception {
         final String videoItemFileName = INPUT_FILE_PATH +
@@ -765,7 +757,6 @@
      * To test Preview : Preview of current Effects applied (with from time >
      * total duration)
      */
-    // TODO : remove TC_PRV_009
     @LargeTest
     public void testPreviewWithDurationGreaterThanMediaDuration()
         throws Exception {
@@ -826,7 +817,6 @@
      * To test Preview : Preview of current Effects applied (with Render Preview
      * Frame)
      */
-    // TODO : remove TC_PRV_010
     @LargeTest
     public void testPreviewWithRenderPreviewFrame() throws Exception {
         final String videoItemFileName = INPUT_FILE_PATH +
@@ -873,7 +863,6 @@
      * To test Preview : Preview of current work from selected jump location
      * till end with Audio Track
      */
-    // TODO : remove TC_PRV_011
     @LargeTest
     public void testPreviewWithEndAudioTrack() throws Exception {
         final String imageItemFilename1 = INPUT_FILE_PATH + "IMG_1600x1200.jpg";
@@ -917,7 +906,6 @@
     /**
      * To test render Preview Frame
      */
-    // TODO : remove TC_PRV_012
     @LargeTest
     public void testRenderPreviewFrame() throws Exception {
         final String videoItemFileName1 = INPUT_FILE_PATH
@@ -1031,7 +1019,6 @@
     /**
      * To Test Preview : Without any Media Items in the story Board
      */
-    // TODO : remove TC_PRV_013
     @LargeTest
     public void testStartPreviewWithoutMediaItems() throws Exception {
         boolean flagForException = false;
@@ -1064,7 +1051,6 @@
      * To Test Preview : Add Media and Remove Media Item (Without any Media
      * Items in the story Board)
      */
-    // TODO : remove TC_PRV_014
     @LargeTest
     public void testStartPreviewAddRemoveMediaItems() throws Exception {
         final String videoItemFilename1 = INPUT_FILE_PATH
@@ -1134,7 +1120,6 @@
      * To test Preview : Preview of current Effects applied (with Render Preview
      * Frame)
      */
-    // TODO : remove TC_PRV_015
     @LargeTest
     public void testPreviewWithRenderPreviewFrameWithoutGenerate() throws Exception {
         final String videoItemFileName = INPUT_FILE_PATH +
diff --git a/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/performance/VideoEditorPerformance.java b/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/performance/VideoEditorPerformance.java
index 3d0be4f..6f1959c 100644
--- a/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/performance/VideoEditorPerformance.java
+++ b/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/performance/VideoEditorPerformance.java
@@ -931,7 +931,6 @@
     /**
      *To test ThumbnailList for H264
      */
-    // TODO : TC_PRF_12
     @LargeTest
     public void testThumbnailH264NonIFrame() throws Exception {
         final String videoItemFilename = INPUT_FILE_PATH +
@@ -962,7 +961,6 @@
     /**
      *To test ThumbnailList for H264
      */
-    // TODO : TC_PRF_13
     @LargeTest
     public void testThumbnailH264AnIFrame() throws Exception {
         final String videoItemFilename = INPUT_FILE_PATH +
diff --git a/services/audioflinger/AudioFlinger.cpp b/services/audioflinger/AudioFlinger.cpp
index a03f2ea..53b13f7 100644
--- a/services/audioflinger/AudioFlinger.cpp
+++ b/services/audioflinger/AudioFlinger.cpp
@@ -801,7 +801,7 @@
         thread = checkPlaybackThread_l(ioHandle);
         if (thread == NULL) {
             thread = checkRecordThread_l(ioHandle);
-        } else if (thread.get() == primaryPlaybackThread_l()) {
+        } else if (thread == primaryPlaybackThread_l()) {
             // indicate output device change to all input threads for pre processing
             AudioParameter param = AudioParameter(keyValuePairs);
             int value;
@@ -1849,7 +1849,7 @@
 
 AudioFlinger::MixerThread::MixerThread(const sp<AudioFlinger>& audioFlinger, AudioStreamOut* output, int id, uint32_t device)
     :   PlaybackThread(audioFlinger, output, id, device),
-        mAudioMixer(NULL)
+        mAudioMixer(NULL), mPrevMixerStatus(MIXER_IDLE)
 {
     mType = ThreadBase::MIXER;
     mAudioMixer = new AudioMixer(mFrameCount, mSampleRate);
@@ -1962,6 +1962,7 @@
                     ALOGV("MixerThread %p TID %d waking up\n", this, gettid());
                     acquireWakeLock_l();
 
+                    mPrevMixerStatus = MIXER_IDLE;
                     if (!mMasterMute) {
                         char value[PROPERTY_VALUE_MAX];
                         property_get("ro.audio.silent", value, "0");
@@ -2121,11 +2122,11 @@
         // make sure that we have enough frames to mix one full buffer.
         // enforce this condition only once to enable draining the buffer in case the client
         // app does not call stop() and relies on underrun to stop:
-        // hence the test on (track->mRetryCount >= kMaxTrackRetries) meaning the track was mixed
+        // hence the test on (mPrevMixerStatus == MIXER_TRACKS_READY) meaning the track was mixed
         // during last round
         uint32_t minFrames = 1;
         if (!track->isStopped() && !track->isPausing() &&
-                (track->mRetryCount >= kMaxTrackRetries)) {
+                (mPrevMixerStatus == MIXER_TRACKS_READY)) {
             if (t->sampleRate() == (int)mSampleRate) {
                 minFrames = mFrameCount;
             } else {
@@ -2274,7 +2275,13 @@
 
             // reset retry count
             track->mRetryCount = kMaxTrackRetries;
-            mixerStatus = MIXER_TRACKS_READY;
+            // If one track is ready, set the mixer ready if:
+            //  - the mixer was not ready during previous round OR
+            //  - no other track is not ready
+            if (mPrevMixerStatus != MIXER_TRACKS_READY ||
+                    mixerStatus != MIXER_TRACKS_ENABLED) {
+                mixerStatus = MIXER_TRACKS_READY;
+            }
         } else {
             //ALOGV("track %d u=%08x, s=%08x [NOT READY] on thread %p", name, cblk->user, cblk->server, this);
             if (track->isStopped()) {
@@ -2292,7 +2299,11 @@
                     tracksToRemove->add(track);
                     // indicate to client process that the track was disabled because of underrun
                     android_atomic_or(CBLK_DISABLED_ON, &cblk->flags);
-                } else if (mixerStatus != MIXER_TRACKS_READY) {
+                // If one track is not ready, mark the mixer also not ready if:
+                //  - the mixer was ready during previous round OR
+                //  - no other track is ready
+                } else if (mPrevMixerStatus == MIXER_TRACKS_READY ||
+                                mixerStatus != MIXER_TRACKS_READY) {
                     mixerStatus = MIXER_TRACKS_ENABLED;
                 }
             }
@@ -2326,6 +2337,7 @@
         memset(mMixBuffer, 0, mFrameCount * mChannelCount * sizeof(int16_t));
     }
 
+    mPrevMixerStatus = mixerStatus;
     return mixerStatus;
 }
 
@@ -3054,6 +3066,7 @@
                     ALOGV("DuplicatingThread %p TID %d waking up\n", this, gettid());
                     acquireWakeLock_l();
 
+                    mPrevMixerStatus = MIXER_IDLE;
                     if (!mMasterMute) {
                         char value[PROPERTY_VALUE_MAX];
                         property_get("ro.audio.silent", value, "0");
@@ -5747,7 +5760,7 @@
             effect = chain->getEffectFromDesc_l(desc);
         }
 
-        ALOGV("createEffect_l() got effect %p on chain %p", effect == 0 ? 0 : effect.get(), chain.get());
+        ALOGV("createEffect_l() got effect %p on chain %p", effect.get(), chain.get());
 
         if (effect == 0) {
             int id = mAudioFlinger->nextUniqueId();
diff --git a/services/audioflinger/AudioFlinger.h b/services/audioflinger/AudioFlinger.h
index 275f40e..8a82bdb 100644
--- a/services/audioflinger/AudioFlinger.h
+++ b/services/audioflinger/AudioFlinger.h
@@ -830,7 +830,9 @@
         virtual     uint32_t    idleSleepTimeUs();
         virtual     uint32_t    suspendSleepTimeUs();
 
-        AudioMixer*                     mAudioMixer;
+                    AudioMixer* mAudioMixer;
+                    uint32_t    mPrevMixerStatus; // previous status (mixer_state) returned by
+                                                  // prepareTracks_l()
     };
 
     class DirectOutputThread : public PlaybackThread {
diff --git a/services/audioflinger/AudioPolicyService.cpp b/services/audioflinger/AudioPolicyService.cpp
index ba9f8b0..7a408bc 100644
--- a/services/audioflinger/AudioPolicyService.cpp
+++ b/services/audioflinger/AudioPolicyService.cpp
@@ -207,19 +207,6 @@
     return NO_ERROR;
 }
 
-status_t AudioPolicyService::setRingerMode(uint32_t mode, uint32_t mask)
-{
-    if (mpAudioPolicy == NULL) {
-        return NO_INIT;
-    }
-    if (!checkPermission()) {
-        return PERMISSION_DENIED;
-    }
-
-    mpAudioPolicy->set_ringer_mode(mpAudioPolicy, mode, mask);
-    return NO_ERROR;
-}
-
 status_t AudioPolicyService::setForceUse(audio_policy_force_use_t usage,
                                          audio_policy_forced_cfg_t config)
 {
diff --git a/services/audioflinger/AudioPolicyService.h b/services/audioflinger/AudioPolicyService.h
index cb8c33f..3693cef 100644
--- a/services/audioflinger/AudioPolicyService.h
+++ b/services/audioflinger/AudioPolicyService.h
@@ -59,7 +59,6 @@
                                                                 audio_devices_t device,
                                                                 const char *device_address);
     virtual status_t setPhoneState(audio_mode_t state);
-    virtual status_t setRingerMode(uint32_t mode, uint32_t mask);
     virtual status_t setForceUse(audio_policy_force_use_t usage, audio_policy_forced_cfg_t config);
     virtual audio_policy_forced_cfg_t getForceUse(audio_policy_force_use_t usage);
     virtual audio_io_handle_t getOutput(audio_stream_type_t stream,
diff --git a/services/input/EventHub.cpp b/services/input/EventHub.cpp
index 68bbb570..1f8cf63 100644
--- a/services/input/EventHub.cpp
+++ b/services/input/EventHub.cpp
@@ -156,8 +156,6 @@
         mPendingEventCount(0), mPendingEventIndex(0), mPendingINotify(false) {
     acquire_wake_lock(PARTIAL_WAKE_LOCK, WAKE_LOCK_ID);
 
-    mNumCpus = sysconf(_SC_NPROCESSORS_ONLN);
-
     mEpollFd = epoll_create(EPOLL_SIZE_HINT);
     LOG_ALWAYS_FATAL_IF(mEpollFd < 0, "Could not create epoll instance.  errno=%d", errno);
 
@@ -648,8 +646,9 @@
                         sizeof(struct input_event) * capacity);
                 if (readSize == 0 || (readSize < 0 && errno == ENODEV)) {
                     // Device was removed before INotify noticed.
-                    ALOGW("could not get event, removed? (fd: %d size: %d bufferSize: %d capacity: %d errno: %d)\n",
-                         device->fd, readSize, bufferSize, capacity, errno);
+                    ALOGW("could not get event, removed? (fd: %d size: %d bufferSize: %d "
+                            "capacity: %d errno: %d)\n",
+                            device->fd, readSize, bufferSize, capacity, errno);
                     deviceChanged = true;
                     closeDeviceLocked(device);
                 } else if (readSize < 0) {
@@ -774,19 +773,6 @@
         } else {
             // Some events occurred.
             mPendingEventCount = size_t(pollResult);
-
-            // On an SMP system, it is possible for the framework to read input events
-            // faster than the kernel input device driver can produce a complete packet.
-            // Because poll() wakes up as soon as the first input event becomes available,
-            // the framework will often end up reading one event at a time until the
-            // packet is complete.  Instead of one call to read() returning 71 events,
-            // it could take 71 calls to read() each returning 1 event.
-            //
-            // Sleep for a short period of time after waking up from the poll() to give
-            // the kernel time to finish writing the entire packet of input events.
-            if (mNumCpus > 1) {
-                usleep(250);
-            }
         }
     }
 
diff --git a/services/input/EventHub.h b/services/input/EventHub.h
index 9d8252e..8a2afd3 100644
--- a/services/input/EventHub.h
+++ b/services/input/EventHub.h
@@ -367,9 +367,6 @@
     size_t mPendingEventCount;
     size_t mPendingEventIndex;
     bool mPendingINotify;
-
-    // Set to the number of CPUs.
-    int32_t mNumCpus;
 };
 
 }; // namespace android
diff --git a/tests/HwAccelerationTest/AndroidManifest.xml b/tests/HwAccelerationTest/AndroidManifest.xml
index 6f97ff0..112c606 100644
--- a/tests/HwAccelerationTest/AndroidManifest.xml
+++ b/tests/HwAccelerationTest/AndroidManifest.xml
@@ -38,6 +38,15 @@
                 <category android:name="android.intent.category.LAUNCHER" />
             </intent-filter>
         </activity>
+
+        <activity
+                android:name="MatrixActivity"
+                android:label="_Matrix">
+            <intent-filter>
+                <action android:name="android.intent.action.MAIN" />
+                <category android:name="android.intent.category.LAUNCHER" />
+            </intent-filter>
+        </activity>
         
         <activity
                 android:name="TextFadeActivity"
diff --git a/tests/HwAccelerationTest/src/com/android/test/hwui/MatrixActivity.java b/tests/HwAccelerationTest/src/com/android/test/hwui/MatrixActivity.java
new file mode 100644
index 0000000..1906b9d
--- /dev/null
+++ b/tests/HwAccelerationTest/src/com/android/test/hwui/MatrixActivity.java
@@ -0,0 +1,56 @@
+/*
+ * Copyright (C) 2010 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.test.hwui;
+
+import android.app.Activity;
+import android.content.Context;
+import android.graphics.Canvas;
+import android.graphics.Paint;
+import android.os.Bundle;
+import android.util.Log;
+import android.view.View;
+
+@SuppressWarnings({"UnusedDeclaration"})
+public class MatrixActivity extends Activity {
+    @Override
+    protected void onCreate(Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+
+        setContentView(new MatrixView(this));
+    }
+
+    static class MatrixView extends View {
+        MatrixView(Context c) {
+            super(c);
+        }
+
+        @Override
+        protected void onDraw(Canvas canvas) {
+            super.onDraw(canvas);
+            canvas.drawRGB(255, 255, 255);
+
+            Log.d("Matrix", "m1=" + canvas.getMatrix());
+
+            canvas.save();
+            canvas.translate(10.0f, 10.0f);
+            Log.d("Matrix", "m2=" + canvas.getMatrix());
+            canvas.translate(20.0f, 20.0f);
+            Log.d("Matrix", "m3=" + canvas.getMatrix());
+            canvas.restore();
+        }
+    }
+}
diff --git a/tools/layoutlib/bridge/src/android/graphics/Canvas_Delegate.java b/tools/layoutlib/bridge/src/android/graphics/Canvas_Delegate.java
index 8e3ed93..f797836 100644
--- a/tools/layoutlib/bridge/src/android/graphics/Canvas_Delegate.java
+++ b/tools/layoutlib/bridge/src/android/graphics/Canvas_Delegate.java
@@ -717,7 +717,7 @@
     /*package*/ static void native_drawCircle(int nativeCanvas,
             float cx, float cy, float radius, int paint) {
         native_drawOval(nativeCanvas,
-                new RectF(cx - radius, cy - radius, radius, radius),
+                new RectF(cx - radius, cy - radius, cx + radius, cy + radius),
                 paint);
     }
 
diff --git a/tools/layoutlib/bridge/src/android/graphics/Paint_Delegate.java b/tools/layoutlib/bridge/src/android/graphics/Paint_Delegate.java
index 1523823..9ebec61 100644
--- a/tools/layoutlib/bridge/src/android/graphics/Paint_Delegate.java
+++ b/tools/layoutlib/bridge/src/android/graphics/Paint_Delegate.java
@@ -904,17 +904,6 @@
     }
 
     @LayoutlibDelegate
-    /*package*/ static float native_getFontMetrics(int native_paint, FontMetrics metrics) {
-        // get the delegate from the native int.
-        Paint_Delegate delegate = sManager.getDelegate(native_paint);
-        if (delegate == null) {
-            return 0.f;
-        }
-
-        return delegate.getFontMetrics(metrics);
-    }
-
-    @LayoutlibDelegate
     /*package*/ static int native_getTextWidths(int native_object, char[] text, int index,
             int count, float[] widths) {
         // get the delegate from the native int.