1 /* This Source Code Form is subject to the terms of the Mozilla Public 2 * License, v. 2.0. If a copy of the MPL was not distributed with this 3 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ 4 5 package org.mozilla.gecko.sync.repositories.uploaders; 6 7 import android.support.annotation.CheckResult; 8 import android.support.annotation.NonNull; 9 10 11 public class UploaderMeta extends BufferSizeTracker { 12 // Will be written and read by different threads. 13 /* @GuardedBy("accessLock") */ private volatile boolean isUnlimited = false; 14 15 /* @GuardedBy("accessLock") */ private boolean needsCommit = false; 16 UploaderMeta(@onNull Object payloadLock, long maxBytes, long maxRecords)17 public UploaderMeta(@NonNull Object payloadLock, long maxBytes, long maxRecords) { 18 super(payloadLock, maxBytes, maxRecords); 19 } 20 setIsUnlimited(boolean isUnlimited)21 protected void setIsUnlimited(boolean isUnlimited) { 22 synchronized (accessLock) { 23 this.isUnlimited = isUnlimited; 24 } 25 } 26 27 @Override canFit(long recordDeltaByteCount)28 protected boolean canFit(long recordDeltaByteCount) { 29 synchronized (accessLock) { 30 return isUnlimited || super.canFit(recordDeltaByteCount); 31 } 32 } 33 34 @Override 35 @CheckResult addAndEstimateIfFull(long recordDeltaByteCount)36 protected boolean addAndEstimateIfFull(long recordDeltaByteCount) { 37 synchronized (accessLock) { 38 needsCommit = true; 39 boolean isFull = super.addAndEstimateIfFull(recordDeltaByteCount); 40 return !isUnlimited && isFull; 41 } 42 } 43 needToCommit()44 protected boolean needToCommit() { 45 synchronized (accessLock) { 46 return needsCommit; 47 } 48 } 49 50 @Override canFitRecordByteDelta(long byteDelta, long recordCount, long byteCount)51 protected boolean canFitRecordByteDelta(long byteDelta, long recordCount, long byteCount) { 52 return isUnlimited || super.canFitRecordByteDelta(byteDelta, recordCount, byteCount); 53 } 54 nextUploaderMeta()55 UploaderMeta nextUploaderMeta() { 56 return new UploaderMeta(accessLock, maxBytes, maxRecords); 57 } 58 }