diff options
author | Dave Sparks <davidsparks@android.com> | 2009-10-26 16:28:26 -0700 |
---|---|---|
committer | Dave Sparks <davidsparks@android.com> | 2009-10-26 16:28:26 -0700 |
commit | 41fbe930c0c128bcded1348e60d7d9e8f79d8a77 (patch) | |
tree | eaeff7d7642de923d7b61f0edc0bc2591d4746c0 /media/libmediaplayerservice/MetadataRetrieverClient.cpp | |
parent | 88e5ad9f0d9b35d4868347bce47b28b7358b32e4 (diff) | |
download | frameworks_av-41fbe930c0c128bcded1348e60d7d9e8f79d8a77.zip frameworks_av-41fbe930c0c128bcded1348e60d7d9e8f79d8a77.tar.gz frameworks_av-41fbe930c0c128bcded1348e60d7d9e8f79d8a77.tar.bz2 |
Run the metadataretriever at background priority. Bug 2187133.
This change forces metadata retreiver threads to background priority.
Uses an inner class to encapsulate the priority change so that it
automatically restores priority when returning to the client.
Diffstat (limited to 'media/libmediaplayerservice/MetadataRetrieverClient.cpp')
-rw-r--r-- | media/libmediaplayerservice/MetadataRetrieverClient.cpp | 27 |
1 files changed, 27 insertions, 0 deletions
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 @@ sp<IMemory> MetadataRetrieverClient::captureFrame() { LOGV("captureFrame"); Mutex::Autolock lock(mLock); + Priority priority(ANDROID_PRIORITY_BACKGROUND); mThumbnail.clear(); mThumbnailDealer.clear(); if (mRetriever == NULL) { @@ -253,6 +267,7 @@ sp<IMemory> MetadataRetrieverClient::extractAlbumArt() { LOGV("extractAlbumArt"); Mutex::Autolock lock(mLock); + Priority priority(ANDROID_PRIORITY_BACKGROUND); mAlbumArt.clear(); mAlbumArtDealer.clear(); if (mRetriever == NULL) { @@ -294,7 +309,19 @@ const char* MetadataRetrieverClient::extractMetadata(int keyCode) 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 |