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

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

Increase the size of the pages used in CachingDataSource (total amount of...

Increase the size of the pages used in CachingDataSource (total amount of memory used remains the same) to compensate for reduced locality of audio/video data requests. Also fixes a mistaken trailing "\r\n" in the range header and better error handling on http connection.

Change-Id: Ic9a6ef204362bc9afdc61e081c76bc62e5ef92ad
related-to-bug: 2580785
parent 98e26575
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -54,7 +54,7 @@ protected:

private:
    enum {
        kBufferSize = 32 * 1024,
        kBufferSize = 64 * 1024,

        // If we encounter a socket-read error we'll try reconnecting
        // and restarting the read for at most this many times.
+1 −1
Original line number Diff line number Diff line
@@ -1091,7 +1091,7 @@ status_t AwesomePlayer::finishSetDataSource_l() {
        }

        dataSource = new CachingDataSource(
                mConnectingDataSource, 32 * 1024, 20);
                mConnectingDataSource, 64 * 1024, 10);

        mConnectingDataSource.clear();
    } else {
+1 −1
Original line number Diff line number Diff line
@@ -105,7 +105,7 @@ sp<DataSource> DataSource::CreateFromURI(
        if (httpSource->connect() != OK) {
            return NULL;
        }
        source = new CachingDataSource(httpSource, 32 * 1024, 20);
        source = new CachingDataSource(httpSource, 64 * 1024, 10);
    } else {
        // Assume it's a filename.
        source = new FileSource(uri);
+22 −3
Original line number Diff line number Diff line
@@ -35,7 +35,8 @@ namespace android {
// connected.
static bool PerformRedirectIfNecessary(
        HTTPStream *http, const String8 &headers,
        string *host, string *path, int *port) {
        string *host, string *path, int *port,
        status_t *result) {
    String8 request;
    request.append("GET ");
    request.append(path->c_str());
@@ -52,6 +53,8 @@ static bool PerformRedirectIfNecessary(
        err = http->receive_header(&http_status);
    }

    *result = err;

    if (err != OK) {
        return false;
    }
@@ -181,6 +184,7 @@ status_t HTTPDataSource::connect() {
         host.c_str(), port, path.c_str());

    int numRedirectsRemaining = 5;
    status_t result;
    do {
        status_t err = mHttp->connect(host.c_str(), port);

@@ -194,9 +198,19 @@ status_t HTTPDataSource::connect() {

            return err;
        }
    } while (PerformRedirectIfNecessary(mHttp, mHeaders, &host, &path, &port)
    } while (PerformRedirectIfNecessary(
                mHttp, mHeaders, &host, &path, &port, &result)
             && numRedirectsRemaining-- > 0);

    if (result != OK) {
        // An error occurred while attempting to follow redirections/connect.
        Mutex::Autolock autoLock(mStateLock);

        mState = DISCONNECTED;

        return result;
    }

    string value;
    if (mHttp->find_header_value("Content-Length", &value)) {
        char *end;
@@ -282,7 +296,7 @@ ssize_t HTTPDataSource::sendRangeRequest(size_t offset) {

    char range[128];
    if (offset > 0) {
        sprintf(range, "Range: bytes=%d-\r\n\r\n", offset);
        sprintf(range, "Range: bytes=%d-\r\n", offset);
    } else {
        range[0] = '\0';
    }
@@ -313,6 +327,7 @@ ssize_t HTTPDataSource::sendRangeRequest(size_t offset) {
    }

    if ((http_status / 100) != 2) {
        LOGE("HTTP request failed, http status = %d", http_status);
        return UNKNOWN_ERROR;
    }

@@ -349,6 +364,10 @@ rinse_repeat:

        memcpy(data, (const char *)mBuffer + (offset - mBufferOffset), copy);

        if (copy < size) {
            LOGV("short read (1), returning %d vs. %d requested", copy, size);
        }

        return copy;
    }