| OLD | NEW |
| 1 // Copyright 2016 The Chromium Authors. All rights reserved. | 1 // Copyright 2016 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 package org.chromium.components.minidump_uploader; | 4 package org.chromium.components.minidump_uploader; |
| 5 | 5 |
| 6 import android.annotation.TargetApi; | 6 import android.annotation.TargetApi; |
| 7 import android.app.job.JobInfo; | 7 import android.app.job.JobInfo; |
| 8 import android.app.job.JobParameters; | 8 import android.app.job.JobParameters; |
| 9 import android.app.job.JobScheduler; | 9 import android.app.job.JobScheduler; |
| 10 import android.app.job.JobService; | 10 import android.app.job.JobService; |
| 11 import android.content.Context; | 11 import android.content.Context; |
| 12 import android.os.Build; | 12 import android.os.Build; |
| 13 import android.os.PersistableBundle; | 13 import android.os.PersistableBundle; |
| 14 | 14 |
| 15 import org.chromium.base.ContextUtils; |
| 15 import org.chromium.base.Log; | 16 import org.chromium.base.Log; |
| 16 | 17 |
| 17 /** | 18 /** |
| 18 * Class that interacts with the Android JobScheduler to upload Minidumps at app
ropriate times. | 19 * Class that interacts with the Android JobScheduler to upload Minidumps at app
ropriate times. |
| 19 */ | 20 */ |
| 20 @TargetApi(Build.VERSION_CODES.LOLLIPOP) | 21 @TargetApi(Build.VERSION_CODES.LOLLIPOP) |
| 21 public abstract class MinidumpUploadJobService extends JobService { | 22 public abstract class MinidumpUploadJobService extends JobService { |
| 22 private static final String TAG = "MinidumpJobService"; | 23 private static final String TAG = "MinidumpJobService"; |
| 23 | 24 |
| 24 // Initial back-off time for upload-job, i.e. the minimum delay when a job i
s retried. A retry | 25 // Initial back-off time for upload-job, i.e. the minimum delay when a job i
s retried. A retry |
| 25 // will happen when there are minidumps left after trying to upload all mini
dumps. This could | 26 // will happen when there are minidumps left after trying to upload all mini
dumps. This could |
| 26 // happen if an upload attempt fails, or if more minidumps are added at the
same time as | 27 // happen if an upload attempt fails, or if more minidumps are added at the
same time as |
| 27 // uploading old ones. The initial backoff is set to a fairly high number (3
0 minutes) to | 28 // uploading old ones. The initial backoff is set to a fairly high number (3
0 minutes) to |
| 28 // increase the chance of performing uploads in batches if the initial uploa
d fails. | 29 // increase the chance of performing uploads in batches if the initial uploa
d fails. |
| 29 private static final int JOB_INITIAL_BACKOFF_TIME_IN_MS = 1000 * 60 * 30; | 30 private static final int JOB_INITIAL_BACKOFF_TIME_IN_MS = 1000 * 60 * 30; |
| 30 | 31 |
| 31 // Back-off policy for upload-job. | 32 // Back-off policy for upload-job. |
| 32 private static final int JOB_BACKOFF_POLICY = JobInfo.BACKOFF_POLICY_EXPONEN
TIAL; | 33 private static final int JOB_BACKOFF_POLICY = JobInfo.BACKOFF_POLICY_EXPONEN
TIAL; |
| 33 | 34 |
| 34 private MinidumpUploader mMinidumpUploader; | 35 private MinidumpUploader mMinidumpUploader; |
| 35 | 36 |
| 36 // Used in Debug builds to assert that this job service never attempts to ru
n more than one job | 37 // Used in Debug builds to assert that this job service never attempts to ru
n more than one job |
| 37 // at a time: | 38 // at a time: |
| 38 private final Object mRunningLock = new Object(); | 39 private final Object mRunningLock = new Object(); |
| 39 private boolean mRunningJob = false; | 40 private boolean mRunningJob = false; |
| 40 | 41 |
| 41 /** | 42 /** |
| 42 * Schedules uploading of all pending minidumps. | 43 * Schedules uploading of all pending minidumps. |
| 43 * @param context The application context, in which to schedule the crash re
port uploads. | |
| 44 * @param jobInfoBuilder A job info builder that has been initialized with a
ny embedder-specific | 44 * @param jobInfoBuilder A job info builder that has been initialized with a
ny embedder-specific |
| 45 * requriements. This builder will be extended to include shared require
ments, and then used | 45 * requriements. This builder will be extended to include shared require
ments, and then used |
| 46 * to build an upload job for scheduling. | 46 * to build an upload job for scheduling. |
| 47 */ | 47 */ |
| 48 public static void scheduleUpload(Context context, JobInfo.Builder jobInfoBu
ilder) { | 48 public static void scheduleUpload(JobInfo.Builder jobInfoBuilder) { |
| 49 Log.i(TAG, "Scheduling upload of all pending minidumps."); | 49 Log.i(TAG, "Scheduling upload of all pending minidumps."); |
| 50 JobScheduler scheduler = | 50 JobScheduler scheduler = |
| 51 (JobScheduler) context.getSystemService(Context.JOB_SCHEDULER_SE
RVICE); | 51 (JobScheduler) ContextUtils.getApplicationContext().getSystemSer
vice( |
| 52 Context.JOB_SCHEDULER_SERVICE); |
| 52 JobInfo uploadJob = | 53 JobInfo uploadJob = |
| 53 jobInfoBuilder.setRequiredNetworkType(JobInfo.NETWORK_TYPE_UNMET
ERED) | 54 jobInfoBuilder.setRequiredNetworkType(JobInfo.NETWORK_TYPE_UNMET
ERED) |
| 54 .setBackoffCriteria(JOB_INITIAL_BACKOFF_TIME_IN_MS, JOB_
BACKOFF_POLICY) | 55 .setBackoffCriteria(JOB_INITIAL_BACKOFF_TIME_IN_MS, JOB_
BACKOFF_POLICY) |
| 55 .build(); | 56 .build(); |
| 56 int result = scheduler.schedule(uploadJob); | 57 int result = scheduler.schedule(uploadJob); |
| 57 assert result == JobScheduler.RESULT_SUCCESS; | 58 assert result == JobScheduler.RESULT_SUCCESS; |
| 58 } | 59 } |
| 59 | 60 |
| 60 @Override | 61 @Override |
| 61 public boolean onStartJob(JobParameters params) { | 62 public boolean onStartJob(JobParameters params) { |
| (...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 100 } | 101 } |
| 101 }; | 102 }; |
| 102 } | 103 } |
| 103 | 104 |
| 104 /** | 105 /** |
| 105 * @param extras Any extra data persisted for this job. | 106 * @param extras Any extra data persisted for this job. |
| 106 * @return The minidump uploader that jobs should use. | 107 * @return The minidump uploader that jobs should use. |
| 107 */ | 108 */ |
| 108 protected abstract MinidumpUploader createMinidumpUploader(PersistableBundle
extras); | 109 protected abstract MinidumpUploader createMinidumpUploader(PersistableBundle
extras); |
| 109 } | 110 } |
| OLD | NEW |