Merge "Make the prefetcher read packets from the network after a keep-alive timeout expires regardless of whether its currently actively fetching data or not." into gingerbread

This commit is contained in:
Andreas Huber
2010-06-22 10:11:15 -07:00
committed by Android (Google) Code Review
2 changed files with 23 additions and 6 deletions

View File

@@ -178,7 +178,8 @@ NuCachedSource2::NuCachedSource2(const sp<DataSource> &source)
mCacheOffset(0),
mFinalStatus(OK),
mLastAccessPos(0),
mFetching(true) {
mFetching(true),
mLastFetchTimeUs(-1) {
mLooper->registerHandler(mReflector);
mLooper->start();
@@ -259,10 +260,21 @@ void NuCachedSource2::onFetch() {
mFetching = false;
}
if (mFetching) {
bool keepAlive =
!mFetching
&& mFinalStatus == OK
&& ALooper::GetNowUs() >= mLastFetchTimeUs + kKeepAliveIntervalUs;
if (mFetching || keepAlive) {
if (keepAlive) {
LOG(INFO) << "Keep alive";
}
fetchInternal();
if (mCache->totalSize() >= kHighWaterThreshold) {
mLastFetchTimeUs = ALooper::GetNowUs();
if (mFetching && mCache->totalSize() >= kHighWaterThreshold) {
LOG(INFO) << "Cache full, done prefetching for now";
mFetching = false;
}

View File

@@ -49,9 +49,13 @@ private:
friend struct AHandlerReflector<NuCachedSource2>;
enum {
kPageSize = 16384,
kHighWaterThreshold = 3 * 1024 * 1024,
kLowWaterThreshold = 512 * 1024,
kPageSize = 16384,
kHighWaterThreshold = 3 * 1024 * 1024,
kLowWaterThreshold = 512 * 1024,
// Read data after a 15 sec timeout whether we're actively
// fetching or not.
kKeepAliveIntervalUs = 15000000,
};
enum {
@@ -73,6 +77,7 @@ private:
off_t mLastAccessPos;
sp<AMessage> mAsyncResult;
bool mFetching;
int64_t mLastFetchTimeUs;
void onMessageReceived(const sp<AMessage> &msg);
void onFetch();