summaryrefslogtreecommitdiffstats
path: root/mobile/android/services/src/main/java/org/mozilla/gecko/sync/repositories/uploaders/BufferSizeTracker.java
diff options
context:
space:
mode:
Diffstat (limited to 'mobile/android/services/src/main/java/org/mozilla/gecko/sync/repositories/uploaders/BufferSizeTracker.java')
-rw-r--r--mobile/android/services/src/main/java/org/mozilla/gecko/sync/repositories/uploaders/BufferSizeTracker.java103
1 files changed, 0 insertions, 103 deletions
diff --git a/mobile/android/services/src/main/java/org/mozilla/gecko/sync/repositories/uploaders/BufferSizeTracker.java b/mobile/android/services/src/main/java/org/mozilla/gecko/sync/repositories/uploaders/BufferSizeTracker.java
deleted file mode 100644
index 7f4c305f3..000000000
--- a/mobile/android/services/src/main/java/org/mozilla/gecko/sync/repositories/uploaders/BufferSizeTracker.java
+++ /dev/null
@@ -1,103 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-package org.mozilla.gecko.sync.repositories.uploaders;
-
-import android.support.annotation.CallSuper;
-import android.support.annotation.CheckResult;
-
-/**
- * Implements functionality shared by BatchMeta and Payload objects, namely:
- * - keeping track of byte and record counts
- * - incrementing those counts when records are added
- * - checking if a record can fit
- */
-/* @ThreadSafe */
-public abstract class BufferSizeTracker {
- protected final Object accessLock;
-
- /* @GuardedBy("accessLock") */ private long byteCount = BatchingUploader.PER_PAYLOAD_OVERHEAD_BYTE_COUNT;
- /* @GuardedBy("accessLock") */ private long recordCount = 0;
- /* @GuardedBy("accessLock") */ protected Long smallestRecordByteCount;
-
- protected final long maxBytes;
- protected final long maxRecords;
-
- public BufferSizeTracker(Object accessLock, long maxBytes, long maxRecords) {
- this.accessLock = accessLock;
- this.maxBytes = maxBytes;
- this.maxRecords = maxRecords;
- }
-
- @CallSuper
- protected boolean canFit(long recordDeltaByteCount) {
- synchronized (accessLock) {
- return canFitRecordByteDelta(recordDeltaByteCount, recordCount, byteCount);
- }
- }
-
- protected boolean isEmpty() {
- synchronized (accessLock) {
- return recordCount == 0;
- }
- }
-
- /**
- * Adds a record and returns a boolean indicating whether batch is estimated to be full afterwards.
- */
- @CheckResult
- protected boolean addAndEstimateIfFull(long recordDeltaByteCount) {
- synchronized (accessLock) {
- // Sanity check. Calling this method when buffer won't fit the record is an error.
- if (!canFitRecordByteDelta(recordDeltaByteCount, recordCount, byteCount)) {
- throw new IllegalStateException("Buffer size exceeded");
- }
-
- byteCount += recordDeltaByteCount;
- recordCount += 1;
-
- if (smallestRecordByteCount == null || smallestRecordByteCount > recordDeltaByteCount) {
- smallestRecordByteCount = recordDeltaByteCount;
- }
-
- // See if we're full or nearly full after adding a record.
- // We're halving smallestRecordByteCount because we're erring
- // on the side of "can hopefully fit". We're trying to upload as soon as we know we
- // should, but we also need to be mindful of minimizing total number of uploads we make.
- return !canFitRecordByteDelta(smallestRecordByteCount / 2, recordCount, byteCount);
- }
- }
-
- protected long getByteCount() {
- synchronized (accessLock) {
- // Ensure we account for payload overhead twice when the batch is empty.
- // Payload overhead is either RECORDS_START ("[") or RECORDS_END ("]"),
- // and for an empty payload we need account for both ("[]").
- if (recordCount == 0) {
- return byteCount + BatchingUploader.PER_PAYLOAD_OVERHEAD_BYTE_COUNT;
- }
- return byteCount;
- }
- }
-
- protected long getRecordCount() {
- synchronized (accessLock) {
- return recordCount;
- }
- }
-
- @CallSuper
- protected void reset() {
- synchronized (accessLock) {
- byteCount = BatchingUploader.PER_PAYLOAD_OVERHEAD_BYTE_COUNT;
- recordCount = 0;
- }
- }
-
- @CallSuper
- protected boolean canFitRecordByteDelta(long byteDelta, long recordCount, long byteCount) {
- return recordCount < maxRecords
- && (byteCount + byteDelta) <= maxBytes;
- }
-} \ No newline at end of file