Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit a4867540 authored by Andreas Huber's avatar Andreas Huber
Browse files

Make the prefetcher read packets from the network after a keep-alive timeout...

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

Change-Id: I7d022ac494e1cecdd7f656806b7ed45979c02840
parent aaf39f84
Loading
Loading
Loading
Loading
+15 −3
Original line number Diff line number Diff line
@@ -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;
        }
+8 −3
Original line number Diff line number Diff line
@@ -52,6 +52,10 @@ private:
        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();