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

Unified Diff: ppapi/native_client/src/shared/ppapi_proxy/plugin_callback.h

Issue 7740013: Cloning a bunch of stuff from the native_client repository at r6528 (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: Created 9 years, 4 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: ppapi/native_client/src/shared/ppapi_proxy/plugin_callback.h
===================================================================
--- ppapi/native_client/src/shared/ppapi_proxy/plugin_callback.h (revision 0)
+++ ppapi/native_client/src/shared/ppapi_proxy/plugin_callback.h (revision 0)
@@ -0,0 +1,65 @@
+// Copyright (c) 2011 The Native Client 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 NATIVE_CLIENT_SRC_SHARED_PPAPI_PROXY_PLUGIN_CALLBACK_H_
+#define NATIVE_CLIENT_SRC_SHARED_PPAPI_PROXY_PLUGIN_CALLBACK_H_
+
+#include <pthread.h>
+#include <map>
+#include "native_client/src/shared/ppapi_proxy/plugin_globals.h"
+#include "ppapi/c/pp_completion_callback.h"
+
+namespace ppapi_proxy {
+
+// Skips callback invocation and returns |result| if callback function is NULL
+// or PP_COMPLETIONCALLBACK_FLAG_OPTIONAL is set. Otherwise, schedules the
+// callback with |result| as an argument and returns PP_OK_COMPLETIONPENDING.
+int32_t MayForceCallback(PP_CompletionCallback callback, int32_t result);
+
+// Maintains a table of PP_CompletionCallback objects and their respective
+// identifiers that can be used to retrieve the objects.
+class CompletionCallbackTable {
+ public:
+ // Return a singleton instance.
+ static CompletionCallbackTable* Get() {
+ static CompletionCallbackTable table;
+ return &table;
+ }
+
+ // Adds the given |callback| and optionally the associated |read_buffer|,
+ // generating and returning an identifier for it.
+ // If |callback| is NULL, then returns 0.
+ int32_t AddCallback(const PP_CompletionCallback& callback);
+ int32_t AddCallback(const PP_CompletionCallback& callback, void* read_buffer);
+ // Removes and returns the callback and optionally the associated
+ // |read_buffer| corresponding to the given |callback_id|.
+ // If no callback is found, returns a NULL callback.
+ PP_CompletionCallback RemoveCallback(int32_t callback_id, void** read_buffer);
+
+ private:
+ // Currently implemented as singleton, so use a private constructor.
+ CompletionCallbackTable() : next_id_(1) { }
+ ~CompletionCallbackTable() { }
+
+ struct CallbackInfo {
+ PP_CompletionCallback callback;
+ void* read_buffer; // To be used with callbacks invoked on byte reads.
+ };
+
+ typedef std::map<int32_t, CallbackInfo> CallbackTable;
+ CallbackTable table_;
+ int32_t next_id_;
+
+ // Single static mutex used as critical section for all callback tables.
+ static pthread_mutex_t mutex_;
+ class CallbackTableCriticalSection {
+ public:
+ CallbackTableCriticalSection() { pthread_mutex_lock(&mutex_); }
+ ~CallbackTableCriticalSection() { pthread_mutex_unlock(&mutex_); }
+ };
+};
+
+} // namespace ppapi_proxy
+
+#endif // NATIVE_CLIENT_SRC_SHARED_PPAPI_PROXY_PLUGIN_CALLBACK_H_

Powered by Google App Engine
This is Rietveld 408576698