bool GonkDecoderManager::InitLoopers(MediaData::Type aType) { MOZ_ASSERT(mDecodeLooper.get() == nullptr && mTaskLooper.get() == nullptr); MOZ_ASSERT(aType == MediaData::VIDEO_DATA || aType == MediaData::AUDIO_DATA); const char* suffix = (aType == MediaData::VIDEO_DATA ? "video" : "audio"); mDecodeLooper = new ALooper; android::AString name("MediaCodecProxy/"); name.append(suffix); mDecodeLooper->setName(name.c_str()); mTaskLooper = new ALooper; name.setTo("GonkDecoderManager/"); name.append(suffix); mTaskLooper->setName(name.c_str()); mTaskLooper->registerHandler(this); #ifdef DEBUG sp<AMessage> findThreadId(new AMessage(kNotifyFindLooperId, id())); findThreadId->post(); #endif return mDecodeLooper->start() == OK && mTaskLooper->start() == OK; }
void PhraseDictionaryCompact::CacheForCleanup(const Phrase &sourcePhrase, TargetPhraseCollection* tpc) { #ifdef WITH_THREADS boost::mutex::scoped_lock lock(m_sentenceMutex); size_t threadId = findThreadId(pthread_self()); m_sentenceCache[threadId].insert(std::make_pair(sourcePhrase, tpc)); #else m_sentenceCache.insert(std::make_pair(sourcePhrase, tpc)); #endif }
void PhraseDictionaryCompact::CleanUp() { if(!m_inMemory) m_hash.KeepNLastRanges(0.01, 0.2); m_phraseDecoder->PruneCache(); #ifdef WITH_THREADS boost::mutex::scoped_lock lock(m_sentenceMutex); size_t threadId = findThreadId(pthread_self()); PhraseCache &ref = m_sentenceCache[threadId]; #else PhraseCache &ref = m_sentenceCache; #endif for(PhraseCache::iterator it = ref.begin(); it != ref.end(); it++) delete it->second; PhraseCache temp; temp.swap(ref); }