From 65e837d27ddfe269895a2871e0619c26d9d040a0 Mon Sep 17 00:00:00 2001 From: woohyun-jeong Date: Tue, 20 Aug 2024 16:59:24 +0900 Subject: [PATCH 1/2] Add manifest file Internet permission --- base/src/main/AndroidManifest.xml | 1 + solution/src/main/AndroidManifest.xml | 1 + 2 files changed, 2 insertions(+) diff --git a/base/src/main/AndroidManifest.xml b/base/src/main/AndroidManifest.xml index 3735450..f867e48 100644 --- a/base/src/main/AndroidManifest.xml +++ b/base/src/main/AndroidManifest.xml @@ -17,6 +17,7 @@ + + Date: Thu, 22 Aug 2024 13:16:34 +0900 Subject: [PATCH 2/2] Update Latency Test --- .../com/google/codelabs/cronet/CronetImageDownloader.kt | 2 ++ .../java/com/google/codelabs/cronet/ImagesViewModel.kt | 4 +++- .../main/java/com/google/codelabs/cronet/MainActivity.kt | 9 ++++++++- .../google/codelabs/cronet/ReadToMemoryCronetCallback.kt | 9 +++++++++ 4 files changed, 22 insertions(+), 2 deletions(-) diff --git a/solution/src/main/java/com/google/codelabs/cronet/CronetImageDownloader.kt b/solution/src/main/java/com/google/codelabs/cronet/CronetImageDownloader.kt index c1dd227..15e333c 100644 --- a/solution/src/main/java/com/google/codelabs/cronet/CronetImageDownloader.kt +++ b/solution/src/main/java/com/google/codelabs/cronet/CronetImageDownloader.kt @@ -43,6 +43,8 @@ internal class CronetImageDownloader ( request: UrlRequest, info: UrlResponseInfo, bodyBytes: ByteArray) { + engine.stopNetLog() + cont.resume(ImageDownloaderResult( successful = true, blob = bodyBytes, diff --git a/solution/src/main/java/com/google/codelabs/cronet/ImagesViewModel.kt b/solution/src/main/java/com/google/codelabs/cronet/ImagesViewModel.kt index 0732d62..47e1cd1 100644 --- a/solution/src/main/java/com/google/codelabs/cronet/ImagesViewModel.kt +++ b/solution/src/main/java/com/google/codelabs/cronet/ImagesViewModel.kt @@ -25,7 +25,9 @@ class ImagesViewModel : ViewModel() { val images = mutableStateListOf() fun addImage(): Int { - images.add(DownloadedImage(URLS[Random.nextInt(URLS.size)])) +// images.add(DownloadedImage(URLS[Random.nextInt(URLS.size)])) + images.add(DownloadedImage(URLS[5])) + return images.size - 1 } diff --git a/solution/src/main/java/com/google/codelabs/cronet/MainActivity.kt b/solution/src/main/java/com/google/codelabs/cronet/MainActivity.kt index 2d2205e..237e7bb 100644 --- a/solution/src/main/java/com/google/codelabs/cronet/MainActivity.kt +++ b/solution/src/main/java/com/google/codelabs/cronet/MainActivity.kt @@ -41,6 +41,7 @@ import com.google.android.gms.net.CronetProviderInstaller import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.withContext import org.chromium.net.CronetEngine +import java.io.File import java.util.concurrent.atomic.AtomicReference import java.util.function.Supplier @@ -67,9 +68,15 @@ class MainActivity : ComponentActivity() { CronetProviderInstaller.installProvider(ctx).addOnCompleteListener { if (it.isSuccessful) { Log.i(LOGGER_TAG, "Successfully installed Play Services provider: $it") + val logFile = File(ctx.cacheDir, "network_log.json") + val cronetEngine = CronetEngine.Builder(ctx) + .setStoragePath(ctx.cacheDir.absolutePath) .enableHttpCache(CronetEngine.Builder.HTTP_CACHE_IN_MEMORY, 10 * 1024 * 1024) - .build() +// .enableQuic(true) + .build().apply { + startNetLogToFile(logFile.absolutePath, /* include_http2 */ true) + } imageDownloader.set(CronetImageDownloader(cronetEngine)) } else { Log.w(LOGGER_TAG, "Unable to load Cronet from Play Services", it.exception) diff --git a/solution/src/main/java/com/google/codelabs/cronet/ReadToMemoryCronetCallback.kt b/solution/src/main/java/com/google/codelabs/cronet/ReadToMemoryCronetCallback.kt index a372b5c..e593f5b 100644 --- a/solution/src/main/java/com/google/codelabs/cronet/ReadToMemoryCronetCallback.kt +++ b/solution/src/main/java/com/google/codelabs/cronet/ReadToMemoryCronetCallback.kt @@ -30,12 +30,16 @@ internal abstract class ReadToMemoryCronetCallback : UrlRequest.Callback() { final override fun onRedirectReceived( request: UrlRequest, info: UrlResponseInfo?, newLocationUrl: String? ) { + Log.d("Cronet", "Response Redirect") + request.followRedirect() } final override fun onResponseStarted(request: UrlRequest, info: UrlResponseInfo) { Log.i(TAG, "****** Response Started ******") Log.i(TAG, "*** Headers Are *** ${info.allHeaders}") + Log.d("Cronet", "Response started") + Log.d("Cronet", "URL: ${info}") // One must use a *direct* byte buffer when calling the read method. request.read(ByteBuffer.allocateDirect(BYTE_BUFFER_CAPACITY_BYTES)) @@ -44,6 +48,9 @@ internal abstract class ReadToMemoryCronetCallback : UrlRequest.Callback() { final override fun onReadCompleted( request: UrlRequest, info: UrlResponseInfo, byteBuffer: ByteBuffer ) { + Log.d("Cronet", "Read completed") + Log.d("Cronet", "Buffer remaining: ${byteBuffer.remaining()}") + // The byte buffer we're getting in the callback hasn't been flipped for reading, // so flip it so we can read the content. byteBuffer.flip() @@ -58,6 +65,8 @@ internal abstract class ReadToMemoryCronetCallback : UrlRequest.Callback() { final override fun onSucceeded(request: UrlRequest, info: UrlResponseInfo) { val bodyBytes = bytesReceived.toByteArray() + Log.d("Cronet", "Request succeeded") + Log.d("Cronet", "URL: ${info.url}") // We invoke the callback directly here for simplicity. Note that the executor running this // callback might be shared with other Cronet requests, or even with other parts of your