Home | History | Annotate | Download | only in nacl_io_demo
      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
      3  * found in the LICENSE file.
      4  */
      5 
      6 #ifndef QUEUE_H_
      7 #define QUEUE_H_
      8 
      9 #include "ppapi/c/pp_var.h"
     10 
     11 /* This file implements a single-producer/single-consumer queue, using a mutex
     12  * and a condition variable.
     13  *
     14  * There are techniques to implement a queue like this without using memory
     15  * barriers or locks on x86, but ARM's memory system is different from x86, so
     16  * we cannot make the same assumptions about visibility order of writes. Using a
     17  * mutex is slower, but also simpler.
     18  *
     19  * We make the assumption that messages are only enqueued on the main thread
     20  * and consumed on the worker thread. Because we don't want to block the main
     21  * thread, EnqueueMessage will return zero if the message could not be enqueued.
     22  *
     23  * DequeueMessage will block until a message is available using a condition
     24  * variable. Again, this may not be as fast as spin-waiting, but will consume
     25  * much less CPU (and battery), which is important to consider for ChromeOS
     26  * devices. */
     27 
     28 void InitializeMessageQueue();
     29 int EnqueueMessage(struct PP_Var message);
     30 struct PP_Var DequeueMessage();
     31 
     32 #endif /* QUEUE_H_ */
     33