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

Side by Side Diff: chrome/android/java/src/org/chromium/chrome/browser/offlinepages/BackgroundOfflinerTask.java

Issue 2830843002: [Offline pages] Updates to background scheduling to use BTS (Closed)
Patch Set: Fixing the crash on NCN not being initialized Created 3 years, 6 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 unified diff | Download patch
OLDNEW
(Empty)
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
3 // found in the LICENSE file.
4
5 package org.chromium.chrome.browser.offlinepages;
6
7 import android.content.Context;
8 import android.os.Bundle;
9
10 import org.chromium.base.ApplicationStatus;
11 import org.chromium.base.Callback;
12 import org.chromium.base.Log;
13 import org.chromium.base.SysUtils;
14 import org.chromium.chrome.browser.ChromeBackgroundServiceWaiter;
15 import org.chromium.chrome.browser.offlinepages.interfaces.BackgroundSchedulerPr ocessor;
16
17 /**
18 * Handles servicing of background offlining requests coming via the GcmNetworkM anager.
19 */
20 public class BackgroundOfflinerTask {
21 private static final String TAG = "BGOfflinerTask";
22 private static final long DEFER_START_SECONDS = 5 * 60;
23
24 private final BackgroundSchedulerProcessor mBridge;
25
26 public BackgroundOfflinerTask(BackgroundSchedulerProcessor bridge) {
27 mBridge = bridge;
28 }
29
30 /**
31 * Triggers processing of background offlining requests. This is called whe n
32 * system conditions are appropriate for background offlining, typically fro m the
33 * GcmTaskService onRunTask() method. In response, we will start the
34 * task processing by passing the call along to the C++ RequestCoordinator.
35 * Also starts UMA collection.
36 *
37 * @returns true for success
38 */
39 public void startBackgroundRequests(
40 Context context, Bundle bundle, final ChromeBackgroundServiceWaiter waiter) {
41 // Set up backup scheduled task in case processing is killed before Requ estCoordinator
42 // has a chance to reschedule base on remaining work.
43 BackgroundScheduler.getInstance(context).scheduleBackup(
44 TaskExtrasPacker.unpackTriggerConditionsFromBundle(bundle), DEFE R_START_SECONDS);
45 // Complete the wait if background request processing was not started.
46 // If background processing was started, completion is going to be handl ed by callback.
47 if (!startBackgroundRequestsImpl(mBridge, context, bundle, createCallbac k(waiter))) {
48 waiter.onWaitDone();
49 }
50 }
51
52 /**
53 * Triggers processing of background offlining requests. This is called whe n
54 * system conditions are appropriate for background offlining, typically fro m the
55 * GcmTaskService onRunTask() method. In response, we will start the
56 * task processing by passing the call along to the C++ RequestCoordinator.
57 * Also starts UMA collection.
58 *
59 * @returns Whether processing will be carried out and completion will be in dicated through a
60 * callback.
61 */
62 static boolean startBackgroundRequestsImpl(BackgroundSchedulerProcessor brid ge, Context context,
63 Bundle taskExtras, Callback<Boolean> callback) {
64 TriggerConditions triggerConditions =
65 TaskExtrasPacker.unpackTriggerConditionsFromBundle(taskExtras);
66 DeviceConditions currentConditions = DeviceConditions.getCurrentConditio ns(context);
67 if (!currentConditions.isPowerConnected()
68 && currentConditions.getBatteryPercentage()
69 < triggerConditions.getMinimumBatteryPercentage()) {
70 Log.d(TAG, "Battery percentage is lower than minimum to start proces sing");
71 return false;
72 }
73
74 if (SysUtils.isLowEndDevice() && ApplicationStatus.hasVisibleActivities( )) {
75 Log.d(TAG, "Application visible on low-end device so deferring backg round processing");
76 return false;
77 }
78
79 // Gather UMA data to measure how often the user's machine is amenable t o background
80 // loading when we wake to do a task.
81 long taskScheduledTimeMillis = TaskExtrasPacker.unpackTimeFromBundle(tas kExtras);
82 OfflinePageUtils.recordWakeupUMA(context, taskScheduledTimeMillis);
83
84 return bridge.startScheduledProcessing(currentConditions, callback);
85 }
86
87 private Callback<Boolean> createCallback(final ChromeBackgroundServiceWaiter waiter) {
88 return new Callback<Boolean>() {
89 /** Callback releasing the wakelock once background work concludes. */
90 @Override
91 public void onResult(Boolean result) {
92 Log.d(TAG, "onResult");
93 // Release the wake lock.
94 waiter.onWaitDone();
95 }
96 };
97 }
98 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698