am ffebc9cf: Merge "Add shutdown and isTerminated to PrioritizedSerialExecutor."
* commit 'ffebc9cfa7e13fe87a389e6d50edf3fba6501c67': Add shutdown and isTerminated to PrioritizedSerialExecutor.main
commit
8780b6445b
|
@ -617,4 +617,14 @@ abstract public class ExpandableBinaryDictionary extends Dictionary {
|
|||
});
|
||||
return holder.get(false, TIMEOUT_FOR_READ_OPS_IN_MILLISECONDS);
|
||||
}
|
||||
|
||||
@UsedForTesting
|
||||
public void shutdownExecutorForTests() {
|
||||
getExecutor(mFilename).shutdown();
|
||||
}
|
||||
|
||||
@UsedForTesting
|
||||
public boolean isTerminatedForTests() {
|
||||
return getExecutor(mFilename).isTerminated();
|
||||
}
|
||||
}
|
||||
|
|
|
@ -31,6 +31,7 @@ public class PrioritizedSerialExecutor {
|
|||
private static final int TASK_QUEUE_CAPACITY = 1000;
|
||||
private final Queue<Runnable> mTasks;
|
||||
private final Queue<Runnable> mPrioritizedTasks;
|
||||
private boolean mIsShutdown;
|
||||
|
||||
// The task which is running now.
|
||||
private Runnable mActive;
|
||||
|
@ -38,6 +39,7 @@ public class PrioritizedSerialExecutor {
|
|||
public PrioritizedSerialExecutor() {
|
||||
mTasks = new ArrayDeque<Runnable>(TASK_QUEUE_CAPACITY);
|
||||
mPrioritizedTasks = new ArrayDeque<Runnable>(TASK_QUEUE_CAPACITY);
|
||||
mIsShutdown = false;
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -56,12 +58,14 @@ public class PrioritizedSerialExecutor {
|
|||
*/
|
||||
public void execute(final Runnable r) {
|
||||
synchronized(mLock) {
|
||||
if (!mIsShutdown) {
|
||||
mTasks.offer(r);
|
||||
if (mActive == null) {
|
||||
scheduleNext();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Enqueues the given task into the prioritized task queue.
|
||||
|
@ -69,12 +73,14 @@ public class PrioritizedSerialExecutor {
|
|||
*/
|
||||
public void executePrioritized(final Runnable r) {
|
||||
synchronized(mLock) {
|
||||
if (!mIsShutdown) {
|
||||
mPrioritizedTasks.offer(r);
|
||||
if (mActive == null) {
|
||||
scheduleNext();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private boolean fetchNextTasks() {
|
||||
synchronized(mLock) {
|
||||
|
@ -123,4 +129,19 @@ public class PrioritizedSerialExecutor {
|
|||
execute(newTask);
|
||||
}
|
||||
}
|
||||
|
||||
public void shutdown() {
|
||||
synchronized(mLock) {
|
||||
mIsShutdown = true;
|
||||
}
|
||||
}
|
||||
|
||||
public boolean isTerminated() {
|
||||
synchronized(mLock) {
|
||||
if (!mIsShutdown) {
|
||||
return false;
|
||||
}
|
||||
return mPrioritizedTasks.isEmpty() && mTasks.isEmpty() && mActive == null;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -46,6 +46,7 @@ public class UserHistoryDictionaryTests extends AndroidTestCase {
|
|||
};
|
||||
|
||||
private static final int MIN_USER_HISTORY_DICTIONARY_FILE_SIZE = 1000;
|
||||
private static final int WAIT_TERMINATING_IN_MILLISECONDS = 100;
|
||||
|
||||
@Override
|
||||
public void setUp() {
|
||||
|
@ -122,8 +123,14 @@ public class UserHistoryDictionaryTests extends AndroidTestCase {
|
|||
true /* checksContents */);
|
||||
} finally {
|
||||
try {
|
||||
final UserHistoryPredictionDictionary dict =
|
||||
PersonalizationHelper.getUserHistoryPredictionDictionary(getContext(),
|
||||
testFilenameSuffix, mPrefs);
|
||||
Log.d(TAG, "waiting for writing ...");
|
||||
Thread.sleep(TimeUnit.MILLISECONDS.convert(5L, TimeUnit.SECONDS));
|
||||
dict.shutdownExecutorForTests();
|
||||
while (!dict.isTerminatedForTests()) {
|
||||
Thread.sleep(WAIT_TERMINATING_IN_MILLISECONDS);
|
||||
}
|
||||
} catch (InterruptedException e) {
|
||||
Log.d(TAG, "InterruptedException: " + e);
|
||||
}
|
||||
|
@ -146,11 +153,11 @@ public class UserHistoryDictionaryTests extends AndroidTestCase {
|
|||
final int numberOfWordsInsertedForEachLanguageSwitch = 100;
|
||||
|
||||
final File dictFiles[] = new File[numberOfLanguages];
|
||||
final String testFilenameSuffixes[] = new String[numberOfLanguages];
|
||||
try {
|
||||
final Random random = new Random(123456);
|
||||
|
||||
// Create filename suffixes for this test.
|
||||
String testFilenameSuffixes[] = new String[numberOfLanguages];
|
||||
for (int i = 0; i < numberOfLanguages; i++) {
|
||||
testFilenameSuffixes[i] = "testSwitchingLanguages" + i;
|
||||
final String fileName = UserHistoryPredictionDictionary.NAME + "." +
|
||||
|
@ -174,7 +181,15 @@ public class UserHistoryDictionaryTests extends AndroidTestCase {
|
|||
} finally {
|
||||
try {
|
||||
Log.d(TAG, "waiting for writing ...");
|
||||
Thread.sleep(TimeUnit.MILLISECONDS.convert(5L, TimeUnit.SECONDS));
|
||||
for (int i = 0; i < numberOfLanguages; i++) {
|
||||
final UserHistoryPredictionDictionary dict =
|
||||
PersonalizationHelper.getUserHistoryPredictionDictionary(getContext(),
|
||||
testFilenameSuffixes[i], mPrefs);
|
||||
dict.shutdownExecutorForTests();
|
||||
while (!dict.isTerminatedForTests()) {
|
||||
Thread.sleep(WAIT_TERMINATING_IN_MILLISECONDS);
|
||||
}
|
||||
}
|
||||
} catch (InterruptedException e) {
|
||||
Log.d(TAG, "InterruptedException: " + e);
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue