| OLD | NEW | 
|---|
| 1 /* Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 /* Copyright (c) 2012 The Chromium Authors. All rights reserved. | 
| 2  * Use of this source code is governed by a BSD-style license that can be | 2  * Use of this source code is governed by a BSD-style license that can be | 
| 3  * found in the LICENSE file. | 3  * found in the LICENSE file. | 
| 4  */ | 4  */ | 
| 5 | 5 | 
| 6 #ifndef QUEUE_H_ | 6 #ifndef QUEUE_H_ | 
| 7 #define QUEUE_H_ | 7 #define QUEUE_H_ | 
| 8 | 8 | 
| 9 /* This file implements a single-producer/single-consumer queue, using a mutex | 9 /* This file implements a single-producer/single-consumer queue, using a mutex | 
| 10  * and a condition variable. | 10  * and a condition variable. | 
| 11  * | 11  * | 
| 12  * There are techniques to implement a queue like this without using memory | 12  * There are techniques to implement a queue like this without using memory | 
| 13  * barriers or locks on x86, but ARM's memory system is different from x86, so | 13  * barriers or locks on x86, but ARM's memory system is different from x86, so | 
| 14  * we cannot make the same assuptions about visibility order of writes. Using a | 14  * we cannot make the same assumptions about visibility order of writes. Using a | 
| 15  * mutex is slower, but also simpler. | 15  * mutex is slower, but also simpler. | 
| 16  * | 16  * | 
| 17  * We make the assumption that messages are only enqueued on the main thread | 17  * We make the assumption that messages are only enqueued on the main thread | 
| 18  * and consumed on the worker thread. Because we don't want to block the main | 18  * and consumed on the worker thread. Because we don't want to block the main | 
| 19  * thread, EnqueueMessage will return zero if the message could not be enqueued. | 19  * thread, EnqueueMessage will return zero if the message could not be enqueued. | 
| 20  * | 20  * | 
| 21  * DequeueMessage will block until a message is available using a condition | 21  * DequeueMessage will block until a message is available using a condition | 
| 22  * variable. Again, this may not be as fast as spin-waiting, but will consume | 22  * variable. Again, this may not be as fast as spin-waiting, but will consume | 
| 23  * much less CPU (and battery), which is important to consider for ChromeOS | 23  * much less CPU (and battery), which is important to consider for ChromeOS | 
| 24  * devices. */ | 24  * devices. */ | 
| 25 | 25 | 
| 26 void InitializeMessageQueue(); | 26 void InitializeMessageQueue(); | 
| 27 int EnqueueMessage(char* message); | 27 int EnqueueMessage(char* message); | 
| 28 char* DequeueMessage(); | 28 char* DequeueMessage(); | 
| 29 | 29 | 
| 30 #endif  /* QUEUE_H_ */ | 30 #endif  /* QUEUE_H_ */ | 
| OLD | NEW | 
|---|