am d06c435c: am c6c8a1e9: Merge "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 bett

Merge commit 'd06c435c3f520ef2012fdd331dac76b1621a72e6' into kraken

* commit 'd06c435c3f520ef2012fdd331dac76b1621a72e6':
  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.
This commit is contained in:
Andreas Huber
2010-04-08 08:35:53 -07:00
committed by Android Git Automerger
4 changed files with 25 additions and 6 deletions

View File

@@ -54,7 +54,7 @@ protected:
private: private:
enum { enum {
kBufferSize = 32 * 1024, kBufferSize = 64 * 1024,
// If we encounter a socket-read error we'll try reconnecting // If we encounter a socket-read error we'll try reconnecting
// and restarting the read for at most this many times. // and restarting the read for at most this many times.

View File

@@ -1091,7 +1091,7 @@ status_t AwesomePlayer::finishSetDataSource_l() {
} }
dataSource = new CachingDataSource( dataSource = new CachingDataSource(
mConnectingDataSource, 32 * 1024, 20); mConnectingDataSource, 64 * 1024, 10);
mConnectingDataSource.clear(); mConnectingDataSource.clear();
} else { } else {

View File

@@ -105,7 +105,7 @@ sp<DataSource> DataSource::CreateFromURI(
if (httpSource->connect() != OK) { if (httpSource->connect() != OK) {
return NULL; return NULL;
} }
source = new CachingDataSource(httpSource, 32 * 1024, 20); source = new CachingDataSource(httpSource, 64 * 1024, 10);
} else { } else {
// Assume it's a filename. // Assume it's a filename.
source = new FileSource(uri); source = new FileSource(uri);

View File

@@ -35,7 +35,8 @@ namespace android {
// connected. // connected.
static bool PerformRedirectIfNecessary( static bool PerformRedirectIfNecessary(
HTTPStream *http, const String8 &headers, HTTPStream *http, const String8 &headers,
string *host, string *path, int *port) { string *host, string *path, int *port,
status_t *result) {
String8 request; String8 request;
request.append("GET "); request.append("GET ");
request.append(path->c_str()); request.append(path->c_str());
@@ -52,6 +53,8 @@ static bool PerformRedirectIfNecessary(
err = http->receive_header(&http_status); err = http->receive_header(&http_status);
} }
*result = err;
if (err != OK) { if (err != OK) {
return false; return false;
} }
@@ -181,6 +184,7 @@ status_t HTTPDataSource::connect() {
host.c_str(), port, path.c_str()); host.c_str(), port, path.c_str());
int numRedirectsRemaining = 5; int numRedirectsRemaining = 5;
status_t result;
do { do {
status_t err = mHttp->connect(host.c_str(), port); status_t err = mHttp->connect(host.c_str(), port);
@@ -194,9 +198,19 @@ status_t HTTPDataSource::connect() {
return err; return err;
} }
} while (PerformRedirectIfNecessary(mHttp, mHeaders, &host, &path, &port) } while (PerformRedirectIfNecessary(
mHttp, mHeaders, &host, &path, &port, &result)
&& numRedirectsRemaining-- > 0); && numRedirectsRemaining-- > 0);
if (result != OK) {
// An error occurred while attempting to follow redirections/connect.
Mutex::Autolock autoLock(mStateLock);
mState = DISCONNECTED;
return result;
}
string value; string value;
if (mHttp->find_header_value("Content-Length", &value)) { if (mHttp->find_header_value("Content-Length", &value)) {
char *end; char *end;
@@ -282,7 +296,7 @@ ssize_t HTTPDataSource::sendRangeRequest(size_t offset) {
char range[128]; char range[128];
if (offset > 0) { if (offset > 0) {
sprintf(range, "Range: bytes=%d-\r\n\r\n", offset); sprintf(range, "Range: bytes=%d-\r\n", offset);
} else { } else {
range[0] = '\0'; range[0] = '\0';
} }
@@ -313,6 +327,7 @@ ssize_t HTTPDataSource::sendRangeRequest(size_t offset) {
} }
if ((http_status / 100) != 2) { if ((http_status / 100) != 2) {
LOGE("HTTP request failed, http status = %d", http_status);
return UNKNOWN_ERROR; return UNKNOWN_ERROR;
} }
@@ -349,6 +364,10 @@ rinse_repeat:
memcpy(data, (const char *)mBuffer + (offset - mBufferOffset), copy); memcpy(data, (const char *)mBuffer + (offset - mBufferOffset), copy);
if (copy < size) {
LOGV("short read (1), returning %d vs. %d requested", copy, size);
}
return copy; return copy;
} }