void NuCachedSource2::onFetch() { LOGV("onFetch"); if (mFinalStatus != OK) { LOGV("EOS reached, done prefetching for now"); mFetching = false; } bool keepAlive = !mFetching && !mSuspended && mFinalStatus == OK && ALooper::GetNowUs() >= mLastFetchTimeUs + kKeepAliveIntervalUs; if (mFetching || keepAlive) { if (keepAlive) { LOGI("Keep alive"); } fetchInternal(); mLastFetchTimeUs = ALooper::GetNowUs(); if (mFetching && mCache->totalSize() >= kHighWaterThreshold) { LOGI("Cache full, done prefetching for now"); mFetching = false; } } else if (!mSuspended) { Mutex::Autolock autoLock(mLock); restartPrefetcherIfNecessary_l(); } (new AMessage(kWhatFetchMore, mReflector->id()))->post( mFetching ? 0 : 100000ll); }
void NuCachedSource2::onFetch() { LOGV("onFetch"); if (mFinalStatus != OK && mNumRetriesLeft == 0) { LOGV("EOS reached, done prefetching for now"); mFetching = false; } bool keepAlive = !mFetching && mFinalStatus == OK && mKeepAliveIntervalUs > 0 && ALooper::GetNowUs() >= mLastFetchTimeUs + mKeepAliveIntervalUs; if (mFetching || keepAlive) { if (keepAlive) { LOGI("Keep alive"); } fetchInternal(); mLastFetchTimeUs = ALooper::GetNowUs(); if (mFetching && mCache->totalSize() >= mHighwaterThresholdBytes) { LOGI("Cache full, done prefetching for now"); mFetching = false; if (mDisconnectAtHighwatermark && (mSource->flags() & DataSource::kIsHTTPBasedSource)) { LOGV("Disconnecting at high watermark"); static_cast<HTTPBase *>(mSource.get())->disconnect(); } if (mFetchMoreCount > 1) { mFetchMoreCount--; return; } } } else { Mutex::Autolock autoLock(mLock); restartPrefetcherIfNecessary_l(); } int64_t delayUs; if (mFetching) { if (mFinalStatus != OK && mNumRetriesLeft > 0) { // We failed this time and will try again in 3 seconds. delayUs = 3000000ll; } else { delayUs = 0; } } else { delayUs = 100000ll; } (new AMessage(kWhatFetchMore, mReflector->id()))->post(delayUs); }
bool sql_fetchAbs(int cid, long rownum, ...) { bool rowfound; va_start(sqlargs, rownum); rowfound = fetchInternal(cid, rownum, SQL_FD_FETCH_ABSOLUTE); retsFromOdbc(); return rowfound; } /* sql_fetchAbs */
bool sql_fetchPrev(int cid, ...) { bool rowfound; va_start(sqlargs, cid); rowfound = fetchInternal(cid, 0L, SQL_FD_FETCH_PREV); retsFromOdbc(); return rowfound; } /* sql_fetchPrev */
bool sql_fetchNext(int cid, ...) { bool rowfound; va_start(sqlargs, cid); rowfound = fetchInternal(cid, 0L, SQL_FD_FETCH_NEXT); retsFromOdbc(); return rowfound; } /* sql_fetchNext */
void NuCachedSource2::onFetch() { ALOGV("onFetch"); if (mFinalStatus != OK && mNumRetriesLeft == 0) { ALOGV("EOS reached, done prefetching for now"); mFetching = false; } bool keepAlive = !mFetching && mFinalStatus == OK && mKeepAliveIntervalUs > 0 && ALooper::GetNowUs() >= mLastFetchTimeUs + mKeepAliveIntervalUs; if (mFetching || keepAlive) { if (keepAlive) { ALOGI("Keep alive"); } fetchInternal(); mLastFetchTimeUs = ALooper::GetNowUs(); #ifdef OMAP_ENHANCEMENT if (mMinAccessPos - mCacheOffset > kGrayArea) { size_t maxBytes = mMinAccessPos - mCacheOffset - kGrayArea; size_t actualBytes = mCache->releaseFromStart(maxBytes); mCacheOffset += actualBytes; } #endif if (mFetching && mCache->totalSize() >= mHighwaterThresholdBytes) { ALOGI("Cache full, done prefetching for now"); mFetching = false; if (mDisconnectAtHighwatermark && (mSource->flags() & DataSource::kIsHTTPBasedSource)) { ALOGV("Disconnecting at high watermark"); static_cast<HTTPBase *>(mSource.get())->disconnect(); mFinalStatus = -EAGAIN; } } } else { Mutex::Autolock autoLock(mLock); restartPrefetcherIfNecessary_l(); } int64_t delayUs; if (mFetching) { if (mFinalStatus != OK && mNumRetriesLeft > 0) { // We failed this time and will try again in 3 seconds. delayUs = 3000000ll; } else { delayUs = 0; } } else { delayUs = 100000ll; } (new AMessage(kWhatFetchMore, mReflector->id()))->post(delayUs); }