Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(2827)

Unified Diff: sky/services/oknet/src/org/domokit/oknet/UrlLoaderImpl.java

Issue 1037443002: Move oknet's read operations to a background thread (Closed) Base URL: git@github.com:domokit/mojo.git@master
Patch Set: less try catch Created 5 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: sky/services/oknet/src/org/domokit/oknet/UrlLoaderImpl.java
diff --git a/sky/services/oknet/src/org/domokit/oknet/UrlLoaderImpl.java b/sky/services/oknet/src/org/domokit/oknet/UrlLoaderImpl.java
index c2fdd01b1cbc66ea928846fbbb5165a4b0cee02b..d5c94561ee4501f3abbe684bb689ab468eae0291 100644
--- a/sky/services/oknet/src/org/domokit/oknet/UrlLoaderImpl.java
+++ b/sky/services/oknet/src/org/domokit/oknet/UrlLoaderImpl.java
@@ -16,7 +16,6 @@ import com.squareup.okhttp.Response;
import com.squareup.okhttp.ResponseBody;
import org.chromium.base.TraceEvent;
-import org.chromium.mojo.system.AsyncWaiter;
import org.chromium.mojo.system.Core;
import org.chromium.mojo.system.DataPipe;
import org.chromium.mojo.system.MojoException;
@@ -40,14 +39,14 @@ import okio.BufferedSource;
*/
public class UrlLoaderImpl implements UrlLoader {
private static final String TAG = "UrlLoaderImpl";
- private Core mCore;
+ private final Core mCore;
private OkHttpClient mClient;
private boolean mIsLoading;
private NetworkError mError;
private static long sNextTracingId = 1;
private final long mTracingId;
- class CopyToPipeJob {
+ class CopyToPipeJob implements Runnable {
private BufferedSource mSource;
private DataPipe.ProducerHandle mProducer;
@@ -56,7 +55,8 @@ public class UrlLoaderImpl implements UrlLoader {
mProducer = producerHandle;
}
- public void copy() throws IOException {
+ @Override
+ public void run() {
TraceEvent.begin("UrlLoaderImpl::CopyToPipeJob::copy");
int result = 0;
do {
@@ -68,10 +68,12 @@ public class UrlLoaderImpl implements UrlLoader {
buffer.put(tmp);
mProducer.endWriteData(result == -1 ? 0 : result);
} catch (MojoException e) {
- if (e.getMojoResult() != MojoResult.SHOULD_WAIT) throw e;
- copyMoreAsync();
- TraceEvent.end("UrlLoaderImpl::CopyToPipeJob::copy");
- return;
+ if (e.getMojoResult() != MojoResult.SHOULD_WAIT)
+ throw e;
+ mCore.wait(mProducer, Core.HandleSignals.WRITABLE, -1);
+ } catch (IOException e) {
+ Log.e(TAG, "mSource.read failed", e);
+ break;
}
} while (result != -1);
@@ -80,29 +82,6 @@ public class UrlLoaderImpl implements UrlLoader {
TraceEvent.finishAsync("UrlLoaderImpl", mTracingId);
TraceEvent.end("UrlLoaderImpl::CopyToPipeJob::copy");
}
-
- private void copyMoreAsync() {
- AsyncWaiter w = mCore.getDefaultAsyncWaiter();
- w.asyncWait(mProducer, Core.HandleSignals.WRITABLE, -1, new AsyncWaiter.Callback() {
- @Override
- public void onResult(int result) {
- assert result == MojoResult.OK;
- try {
- copy();
- } catch (IOException e) {
- mIsLoading = false;
- mProducer.close();
- TraceEvent.finishAsync("UrlLoaderImpl", mTracingId);
- }
- }
- @Override
- public void onError(MojoException exception) {
- mIsLoading = false;
- mProducer.close();
- TraceEvent.finishAsync("UrlLoaderImpl", mTracingId);
- }
- });
- }
}
public UrlLoaderImpl(Core core, OkHttpClient client) {
@@ -193,13 +172,7 @@ public class UrlLoaderImpl implements UrlLoader {
urlResponse.body = consumerHandle;
responseCallback.call(urlResponse);
CopyToPipeJob job = new CopyToPipeJob(body.source(), producerHandle);
- try {
- job.copy();
- } catch (IOException e) {
- mIsLoading = false;
- producerHandle.close();
- TraceEvent.finishAsync("UrlLoaderImpl", mTracingId);
- }
+ (new Thread(job)).start();
}
});
}
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698