Projects >> frameworks_base_disabled >>8e3e5165914cac9f9c671601f1d67d276245f9b2

Chunk
Conflicting content
<<<<<<< HEAD
=======

package android.content;

import android.os.SystemClock;
>>>>>>> 2967aa3e6060f582f166cdb334a0fb9ff0cb4759
import com.google.android.collect.Maps;

import android.content.pm.RegisteredServicesCache;
Solution content
package android.content;

import com.google.android.collect.Maps;

import android.content.pm.RegisteredServicesCache;
File
SyncQueue.java
Developer's decision
Version 1
Kind of conflict
Import
Chunk
Conflicting content
        }
    }

<<<<<<< HEAD
    public void onBackoffChanged(Account account, String providerName, long backoff) {
        // for each op that matches the account and provider update its
        // backoff and effectiveStartTime
        for (SyncOperation op : mOperationsMap.values()) {
            if (op.account.equals(account) && op.authority.equals(providerName)) {
                op.backoff = backoff;
                op.updateEffectiveRunTime();
            }
=======
    /**
     * Find the operation that should run next. Operations are sorted by their earliestRunTime,
     * prioritizing first those with a syncable state of "unknown" that aren't retries then
     * expedited operations.
     * The earliestRunTime is adjusted by the sync adapter's backoff and delayUntil times, if any.
     * @return the operation that should run next and when it should run. The time may be in
     * the future. It is expressed in milliseconds since boot.
     */
    public Pair nextOperation() {
        SyncOperation best = null;
        long bestRunTime = 0;
        boolean bestIsInitial = false;
        for (SyncOperation op : mOperationsMap.values()) {
            final long opRunTime = getOpTime(op);
            final boolean opIsInitial = getIsInitial(op);
            if (isOpBetter(best, bestRunTime, bestIsInitial, op, opRunTime, opIsInitial)) {
                best = op;
                bestIsInitial = opIsInitial;
                bestRunTime = opRunTime;
            }
        }
        if (best == null) {
            return null;
>>>>>>> 2967aa3e6060f582f166cdb334a0fb9ff0cb4759
        }
    }
Solution content
        }
    }

    public void onBackoffChanged(Account account, String providerName, long backoff) {
        // for each op that matches the account and provider update its
        // backoff and effectiveStartTime
        for (SyncOperation op : mOperationsMap.values()) {
            if (op.account.equals(account) && op.authority.equals(providerName)) {
                op.backoff = backoff;
                op.updateEffectiveRunTime();
            }
        }
    }
File
SyncQueue.java
Developer's decision
Version 1
Kind of conflict
Comment
For statement
If statement
Method signature
Return statement
Variable
Chunk
Conflicting content
        }
    }

<<<<<<< HEAD
    public void onDelayUntilTimeChanged(Account account, String providerName, long delayUntil) {
        // for each op that matches the account and provider update its
        // delayUntilTime and effectiveStartTime
        for (SyncOperation op : mOperationsMap.values()) {
            if (op.account.equals(account) && op.authority.equals(providerName)) {
                op.delayUntil = delayUntil;
                op.updateEffectiveRunTime();
            }
=======
    // VisibleForTesting
    long getOpTime(SyncOperation op) {
        long opRunTime = op.earliestRunTime;
        if (!op.extras.getBoolean(ContentResolver.SYNC_EXTRAS_IGNORE_BACKOFF, false)) {
            Pair backoff = mSyncStorageEngine.getBackoff(op.account, op.authority);
            long delayUntil = mSyncStorageEngine.getDelayUntilTime(op.account, op.authority);
            opRunTime = Math.max(
                    Math.max(opRunTime, delayUntil),
                    backoff != null ? backoff.first : 0);
        }
        return opRunTime;
    }

    // VisibleForTesting
    boolean getIsInitial(SyncOperation op) {
        // Initial op is defined as an op with an unknown syncable that is not a retry.
        // We know a sync is a retry if the intialization flag is set, since that will only
        // be set by the sync dispatching code, thus if it is set it must have already been
        // dispatched
        return !op.extras.getBoolean(ContentResolver.SYNC_EXTRAS_INITIALIZE, false)
        && mSyncStorageEngine.getIsSyncable(op.account, op.authority) < 0;
    }

    // return true if op is a better candidate than best. Rules:
    // if the "Initial" state differs, make the current the best if it is "Initial".
    // else, if the expedited state differs, pick the expedited unless it is backed off and the
    // non-expedited isn't
    // VisibleForTesting
    boolean isOpBetter(
            SyncOperation best, long bestRunTime, boolean bestIsInitial,
            SyncOperation op, long opRunTime, boolean opIsInitial) {
        boolean setBest = false;
        if (Log.isLoggable(TAG, Log.VERBOSE)) {
            Log.v(TAG,  "nextOperation: Processing op: " + op);
        }
        if (best == null) {
            if (Log.isLoggable(TAG, Log.VERBOSE)) {
                Log.v(TAG,  "   First op selected");
            }
            setBest = true;
        } else if (bestIsInitial == opIsInitial) {
            if (best.expedited == op.expedited) {
                if (opRunTime < bestRunTime) {
                    //  if both have same level, earlier time wins
                    if (Log.isLoggable(TAG, Log.VERBOSE)) {
                        Log.v(TAG,  "   Same expedite level - new op selected");
                    }
                    setBest = true;
                }
            } else {
                final long now = SystemClock.elapsedRealtime();
                if (op.expedited) {
                    if (opRunTime <= now || bestRunTime > now) {
                        // if op is expedited, it wins unless op can't run yet and best can
                        if (Log.isLoggable(TAG, Log.VERBOSE)) {
                            Log.v(TAG,  "   New op is expedited and can run - new op selected");
                        }
                        setBest = true;
                    } else {
                        if (Log.isLoggable(TAG, Log.VERBOSE)) {
                            Log.v(TAG,  "   New op is expedited but can't run and best can");
                        }
                    }
                } else {
                    if (bestRunTime > now && opRunTime <= now) {
                        // if best is expedited but can't run yet and op can run, op wins
                        if (Log.isLoggable(TAG, Log.VERBOSE)) {
                            Log.v(TAG,
                                    "   New op is not expedited but can run - new op selected");
                        }
                        setBest = true;
                    }
                }
            }
        } else {
            if (opIsInitial) {
                if (Log.isLoggable(TAG, Log.VERBOSE)) {
                    Log.v(TAG,  "   New op is init - new op selected");
                }
                setBest = true;
            }
        }
        return setBest;
    }

    /**
     * Find and return the SyncOperation that should be run next and is ready to run.
     * @param now the current {@link android.os.SystemClock#elapsedRealtime()}, used to
     * decide if the sync operation is ready to run
     * @return the SyncOperation that should be run next and is ready to run.
     */
    public Pair nextReadyToRun(long now) {
        Pair nextOpAndRunTime = nextOperation();
        if (nextOpAndRunTime == null || nextOpAndRunTime.second > now) {
            return null;
>>>>>>> 2967aa3e6060f582f166cdb334a0fb9ff0cb4759
        }
    }
Solution content
        }
    }

    public void onDelayUntilTimeChanged(Account account, String providerName, long delayUntil) {
        // for each op that matches the account and provider update its
        // delayUntilTime and effectiveStartTime
        for (SyncOperation op : mOperationsMap.values()) {
            if (op.account.equals(account) && op.authority.equals(providerName)) {
                op.delayUntil = delayUntil;
                op.updateEffectiveRunTime();
            }
        }
    }
File
SyncQueue.java
Developer's decision
Version 1
Kind of conflict
Comment
For statement
If statement
Method declaration
Method invocation
Method signature
Return statement
Variable