From 086c3d8e00a2c3564ddfd0214ff724f05e2bad62 Mon Sep 17 00:00:00 2001 From: David Motsonashvili Date: Fri, 20 Sep 2024 11:35:41 -0700 Subject: [PATCH 1/2] patch fix to move everything in onStartJob out --- .../runtime/TransportRuntime.java | 12 +++++- .../JobInfoSchedulerService.java | 38 +++++++++++-------- .../transport-runtime.gradle | 1 + 3 files changed, 35 insertions(+), 16 deletions(-) diff --git a/transport/transport-runtime/src/main/java/com/google/android/datatransport/runtime/TransportRuntime.java b/transport/transport-runtime/src/main/java/com/google/android/datatransport/runtime/TransportRuntime.java index c5678cb0d59..88d343e5570 100644 --- a/transport/transport-runtime/src/main/java/com/google/android/datatransport/runtime/TransportRuntime.java +++ b/transport/transport-runtime/src/main/java/com/google/android/datatransport/runtime/TransportRuntime.java @@ -27,9 +27,11 @@ import com.google.android.datatransport.runtime.time.Clock; import com.google.android.datatransport.runtime.time.Monotonic; import com.google.android.datatransport.runtime.time.WallTime; +import com.google.firebase.annotations.concurrent.Background; import java.util.Collections; import java.util.Set; import java.util.concurrent.Callable; +import java.util.concurrent.Executor; import javax.inject.Inject; import javax.inject.Singleton; @@ -48,6 +50,7 @@ public class TransportRuntime implements TransportInternal { private final Clock uptimeClock; private final Scheduler scheduler; private final Uploader uploader; + private final Executor backgroundExecutor; @Inject TransportRuntime( @@ -55,11 +58,13 @@ public class TransportRuntime implements TransportInternal { @Monotonic Clock uptimeClock, Scheduler scheduler, Uploader uploader, - WorkInitializer initializer) { + WorkInitializer initializer, + @Background Executor executor) { this.eventClock = eventClock; this.uptimeClock = uptimeClock; this.scheduler = scheduler; this.uploader = uploader; + this.backgroundExecutor = executor; initializer.ensureContextsScheduled(); } @@ -147,6 +152,11 @@ public Uploader getUploader() { return uploader; } + @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP) + public Executor getBackgroundExecutor() { + return backgroundExecutor; + } + @Override public void send(SendRequest request, TransportScheduleCallback callback) { scheduler.schedule( diff --git a/transport/transport-runtime/src/main/java/com/google/android/datatransport/runtime/scheduling/jobscheduling/JobInfoSchedulerService.java b/transport/transport-runtime/src/main/java/com/google/android/datatransport/runtime/scheduling/jobscheduling/JobInfoSchedulerService.java index f84189f549c..9ab5d54453a 100644 --- a/transport/transport-runtime/src/main/java/com/google/android/datatransport/runtime/scheduling/jobscheduling/JobInfoSchedulerService.java +++ b/transport/transport-runtime/src/main/java/com/google/android/datatransport/runtime/scheduling/jobscheduling/JobInfoSchedulerService.java @@ -29,24 +29,32 @@ public class JobInfoSchedulerService extends JobService { @Override public boolean onStartJob(JobParameters params) { - String backendName = params.getExtras().getString(JobInfoScheduler.BACKEND_NAME); - String extras = params.getExtras().getString(JobInfoScheduler.EXTRAS); + TransportRuntime.getInstance() + .getBackgroundExecutor() + .execute( + () -> { + String backendName = params.getExtras().getString(JobInfoScheduler.BACKEND_NAME); + String extras = params.getExtras().getString(JobInfoScheduler.EXTRAS); - int priority = params.getExtras().getInt(JobInfoScheduler.EVENT_PRIORITY); - int attemptNumber = params.getExtras().getInt(JobInfoScheduler.ATTEMPT_NUMBER); - TransportRuntime.initialize(getApplicationContext()); - TransportContext.Builder transportContext = - TransportContext.builder() - .setBackendName(backendName) - .setPriority(PriorityMapping.valueOf(priority)); + int priority = params.getExtras().getInt(JobInfoScheduler.EVENT_PRIORITY); + int attemptNumber = params.getExtras().getInt(JobInfoScheduler.ATTEMPT_NUMBER); + TransportRuntime.initialize(getApplicationContext()); + TransportContext.Builder transportContext = + TransportContext.builder() + .setBackendName(backendName) + .setPriority(PriorityMapping.valueOf(priority)); - if (extras != null) { - transportContext.setExtras(Base64.decode(extras, Base64.DEFAULT)); - } + if (extras != null) { + transportContext.setExtras(Base64.decode(extras, Base64.DEFAULT)); + } - TransportRuntime.getInstance() - .getUploader() - .upload(transportContext.build(), attemptNumber, () -> this.jobFinished(params, false)); + TransportRuntime.getInstance() + .getUploader() + .upload( + transportContext.build(), + attemptNumber, + () -> this.jobFinished(params, false)); + }); return true; } diff --git a/transport/transport-runtime/transport-runtime.gradle b/transport/transport-runtime/transport-runtime.gradle index 0eb853e98c8..e9ece7a14ed 100644 --- a/transport/transport-runtime/transport-runtime.gradle +++ b/transport/transport-runtime/transport-runtime.gradle @@ -110,6 +110,7 @@ dependencies { api "com.google.firebase:firebase-encoders-proto:16.0.0" implementation 'androidx.annotation:annotation:1.3.0' + implementation 'com.google.firebase:firebase-annotations:16.2.0' implementation 'javax.inject:javax.inject:1' compileOnly "com.google.auto.value:auto-value-annotations:1.6.6" From da8f0d41dc835840ba0b03afd323407c3ab9998e Mon Sep 17 00:00:00 2001 From: David Motsonashvili Date: Fri, 20 Sep 2024 12:27:16 -0700 Subject: [PATCH 2/2] add background thread to module --- .../datatransport/runtime/ExecutionModule.java | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/transport/transport-runtime/src/main/java/com/google/android/datatransport/runtime/ExecutionModule.java b/transport/transport-runtime/src/main/java/com/google/android/datatransport/runtime/ExecutionModule.java index 17643e1ee35..fd45b703f2b 100644 --- a/transport/transport-runtime/src/main/java/com/google/android/datatransport/runtime/ExecutionModule.java +++ b/transport/transport-runtime/src/main/java/com/google/android/datatransport/runtime/ExecutionModule.java @@ -15,6 +15,9 @@ package com.google.android.datatransport.runtime; import android.annotation.SuppressLint; + +import com.google.firebase.annotations.concurrent.Background; + import dagger.Module; import dagger.Provides; import java.util.concurrent.Executor; @@ -29,4 +32,12 @@ abstract class ExecutionModule { static Executor executor() { return new SafeLoggingExecutor(Executors.newSingleThreadExecutor()); } + + @Singleton + @Provides + @Background + @SuppressLint("ThreadPoolCreation") + static Executor backgroundExecutor() { + return Executors.newSingleThreadExecutor(); + } }