Skip to content

Commit

Permalink
Perform up to 10 tasks at once. This is reasonable on a fast phone, b…
Browse files Browse the repository at this point in the history
…ut perhaps needs to be re-evaluated for slower phones.
  • Loading branch information
broady committed Sep 29, 2013
1 parent 21eaa0c commit 010dbd9
Showing 1 changed file with 30 additions and 19 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -480,25 +480,12 @@ public void handleMessage(Message msg) {

lock.lock();
try {
// Process the queue of markerWithPosition operations.
// Prioritise any "on screen" work.
if (!mOnScreenRemoveMarkerTasks.isEmpty()) {
Marker m = mOnScreenRemoveMarkerTasks.poll();
mMarkerCache.remove(m);
mClusterManager.getMarkerManager().remove(m);
} else if (!mAnimationTasks.isEmpty()) {
AnimationTask animationTask = mAnimationTasks.poll();
animationTask.perform();
} else if (!mOnScreenCreateMarkerTasks.isEmpty()) {
CreateMarkerTask task = mOnScreenCreateMarkerTasks.poll();
task.perform(this);
} else if (!mCreateMarkerTasks.isEmpty()) {
CreateMarkerTask task = mCreateMarkerTasks.poll();
task.perform(this);
} else if (!mRemoveMarkerTasks.isEmpty()) {
Marker m = mRemoveMarkerTasks.poll();
mMarkerCache.remove(m);
mClusterManager.getMarkerManager().remove(m);

// Perform up to 10 tasks at once.
// Consider only performing 10 remove tasks, not adds and animations.
// Removes are relatively slow and are much better when batched.
for (int i = 0; i < 10; i++) {
performTask();
}

if (!isBusy()) {
Expand All @@ -519,6 +506,30 @@ public void handleMessage(Message msg) {
}
}

/**
* Perform the next task. Prioritise any on-screen work.
*/
private void performTask() {
if (!mOnScreenRemoveMarkerTasks.isEmpty()) {
Marker m = mOnScreenRemoveMarkerTasks.poll();
mMarkerCache.remove(m);
mClusterManager.getMarkerManager().remove(m);
} else if (!mAnimationTasks.isEmpty()) {
AnimationTask animationTask = mAnimationTasks.poll();
animationTask.perform();
} else if (!mOnScreenCreateMarkerTasks.isEmpty()) {
CreateMarkerTask task = mOnScreenCreateMarkerTasks.poll();
task.perform(this);
} else if (!mCreateMarkerTasks.isEmpty()) {
CreateMarkerTask task = mCreateMarkerTasks.poll();
task.perform(this);
} else if (!mRemoveMarkerTasks.isEmpty()) {
Marker m = mRemoveMarkerTasks.poll();
mMarkerCache.remove(m);
mClusterManager.getMarkerManager().remove(m);
}
}

/**
* @return true if there is still work to be processed.
*/
Expand Down

0 comments on commit 010dbd9

Please sign in to comment.