Merge change I7c0d20a7 into eclair

* changes:
  Run the metadataretriever at background priority. Bug 2187133.
diff --git a/media/libmediaplayerservice/MetadataRetrieverClient.cpp b/media/libmediaplayerservice/MetadataRetrieverClient.cpp
index ddd4e24..8eabe5d 100644
--- a/media/libmediaplayerservice/MetadataRetrieverClient.cpp
+++ b/media/libmediaplayerservice/MetadataRetrieverClient.cpp
@@ -21,6 +21,7 @@
 
 #include <sys/types.h>
 #include <sys/stat.h>
+#include <sys/resource.h>
 #include <dirent.h>
 #include <unistd.h>
 
@@ -38,6 +39,18 @@
 #include "MidiMetadataRetriever.h"
 #include "MetadataRetrieverClient.h"
 
+/* desktop Linux needs a little help with gettid() */
+#if defined(HAVE_GETTID) && !defined(HAVE_ANDROID_OS)
+#define __KERNEL__
+# include <linux/unistd.h>
+#ifdef _syscall0
+_syscall0(pid_t,gettid)
+#else
+pid_t gettid() { return syscall(__NR_gettid);}
+#endif
+#undef __KERNEL__
+#endif
+
 namespace android {
 
 extern player_type getPlayerType(const char* url);
@@ -212,6 +225,7 @@
 {
     LOGV("captureFrame");
     Mutex::Autolock lock(mLock);
+    Priority priority(ANDROID_PRIORITY_BACKGROUND);
     mThumbnail.clear();
     mThumbnailDealer.clear();
     if (mRetriever == NULL) {
@@ -253,6 +267,7 @@
 {
     LOGV("extractAlbumArt");
     Mutex::Autolock lock(mLock);
+    Priority priority(ANDROID_PRIORITY_BACKGROUND);
     mAlbumArt.clear();
     mAlbumArtDealer.clear();
     if (mRetriever == NULL) {
@@ -294,7 +309,19 @@
         LOGE("retriever is not initialized");
         return NULL;
     }
+    Priority priority(ANDROID_PRIORITY_BACKGROUND);
     return mRetriever->extractMetadata(keyCode);
 }
 
+MetadataRetrieverClient::Priority::Priority(int newPriority)
+{
+    mOldPriority = getpriority(PRIO_PROCESS, 0);
+    setpriority(PRIO_PROCESS, 0, newPriority);
+}
+
+MetadataRetrieverClient::Priority::~Priority()
+{
+    setpriority(PRIO_PROCESS, 0, mOldPriority);
+}
+
 }; // namespace android
diff --git a/media/libmediaplayerservice/MetadataRetrieverClient.h b/media/libmediaplayerservice/MetadataRetrieverClient.h
index 8cb8ad1..852d734 100644
--- a/media/libmediaplayerservice/MetadataRetrieverClient.h
+++ b/media/libmediaplayerservice/MetadataRetrieverClient.h
@@ -54,6 +54,16 @@
 private:
     friend class MediaPlayerService;
 
+    class Priority
+    {
+    public:
+        Priority(int newPriority);
+        ~Priority();
+    private:
+        Priority();
+        int         mOldPriority;
+    };
+
     explicit MetadataRetrieverClient(pid_t pid);
     virtual ~MetadataRetrieverClient();