Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(26)

Unified Diff: native_client_sdk/src/libraries/nacl_io/devfs/jspipe_event_emitter.h

Issue 242533005: [NaCl SDK] nacl_io: Add flow control the JavaScript pipes. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 6 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: native_client_sdk/src/libraries/nacl_io/devfs/jspipe_event_emitter.h
diff --git a/native_client_sdk/src/libraries/nacl_io/devfs/jspipe_event_emitter.h b/native_client_sdk/src/libraries/nacl_io/devfs/jspipe_event_emitter.h
new file mode 100644
index 0000000000000000000000000000000000000000..39356990bd4313b4a5bebbd2178bbf58e6dac9af
--- /dev/null
+++ b/native_client_sdk/src/libraries/nacl_io/devfs/jspipe_event_emitter.h
@@ -0,0 +1,89 @@
+// Copyright 2014 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef LIBRARIES_NACL_IO_DEVFS_JSPIPE_EVENT_EMITTER_H_
+#define LIBRARIES_NACL_IO_DEVFS_JSPIPE_EVENT_EMITTER_H_
+
+#include <poll.h>
+#include <ppapi/c/pp_var.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+#include <string>
+
+#include "nacl_io/fifo_char.h"
+#include "nacl_io/pipe/pipe_event_emitter.h"
+
+#include "sdk_util/auto_lock.h"
+#include "sdk_util/macros.h"
+
+namespace nacl_io {
+
+class PepperInterface;
+class MessagingInterface;
+class VarInterface;
+class VarArrayInterface;
+class VarArrayBufferInterface;
+class VarDictionaryInterface;
+
+class JSPipeEventEmitter;
+typedef sdk_util::ScopedRef<JSPipeEventEmitter> ScopedJSPipeEventEmitter;
+
+class JSPipeEventEmitter : public EventEmitter {
+ public:
+ JSPipeEventEmitter(PepperInterface* ppapi, size_t size);
+ virtual void Destroy();
+
+ Error Read_Locked(char* data, size_t len, int* out_bytes);
+ Error Write_Locked(const char* data, size_t len, int* out_bytes);
+
+ size_t GetOSpace() { return post_message_buffer_size_ - BytesOutstanding(); };
+ size_t GetISpace() { return input_fifo_.WriteAvailable(); };
+ Error SetName(const char* name);
+ Error HandleJSMessage(PP_Var message);
+
+ protected:
+ size_t HandleJSWrite(const char* data, size_t len);
+ void HandleJSAck(size_t byte_count);
+ Error HandleJSWrite(PP_Var message);
+ Error HandleJSAck(PP_Var message);
+ void UpdateStatus_Locked();
+ PP_Var VarFromCStr(const char* string);
+ Error SendAckMessage(size_t byte_count);
+ size_t BytesOutstanding() { return bytes_sent_ - bytes_acked_; }
+ Error SendMessageToJS(PP_Var operation, PP_Var payload);
+ Error SendWriteMessage(const void* buf, size_t count);
+ int VarStrcmp(PP_Var a, PP_Var b);
+
+ private:
+ std::string name_;
+ FIFOChar input_fifo_;
+
+ // Number of bytes that to send via PostMessage before and ACK
+ // is required.
+ size_t post_message_buffer_size_;
+ size_t bytes_sent_;
+ size_t bytes_acked_;
+ size_t bytes_read_;
+
+ PepperInterface* ppapi_;
+ MessagingInterface* messaging_iface_;
+ VarInterface* var_iface_;
+ VarArrayInterface* array_iface_;
+ VarArrayBufferInterface* buffer_iface_;
+ VarDictionaryInterface* dict_iface_;
+
+ PP_Var pipe_name_var_;
+ PP_Var pipe_key_;
+ PP_Var operation_key_;
+ PP_Var payload_key_;
+ PP_Var write_var_;
+ PP_Var ack_var_;
+
+ DISALLOW_COPY_AND_ASSIGN(JSPipeEventEmitter);
+};
+
+} // namespace nacl_io
+
+#endif // LIBRARIES_NACL_IO_DEVFS_JSPIPE_EVENT_EMITTER_H_

Powered by Google App Engine
This is Rietveld 408576698