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

Unified Diff: ppapi/native_client/src/trusted/plugin/pnacl_translate_thread.h

Issue 10827109: Simplify Pnacl translation thread code (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: rebase Created 8 years, 5 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/trusted/plugin/pnacl_translate_thread.h
diff --git a/ppapi/native_client/src/trusted/plugin/pnacl_translate_thread.h b/ppapi/native_client/src/trusted/plugin/pnacl_translate_thread.h
index 82e7d8d5a7bbfb9752a30f364996ebfd777823c7..499eee4ba69d721b87012c9e97006fad71793ac6 100644
--- a/ppapi/native_client/src/trusted/plugin/pnacl_translate_thread.h
+++ b/ppapi/native_client/src/trusted/plugin/pnacl_translate_thread.h
@@ -5,6 +5,9 @@
#ifndef NATIVE_CLIENT_SRC_TRUSTED_PLUGIN_PNACL_TRANSLATE_THREAD_H_
#define NATIVE_CLIENT_SRC_TRUSTED_PLUGIN_PNACL_TRANSLATE_THREAD_H_
+#include <deque>
+#include <vector>
+
#include "native_client/src/include/nacl_macros.h"
#include "native_client/src/include/nacl_scoped_ptr.h"
#include "native_client/src/include/nacl_string.h"
@@ -32,22 +35,29 @@ class TempFile;
class PnaclTranslateThread {
public:
PnaclTranslateThread();
- virtual ~PnaclTranslateThread();
+ ~PnaclTranslateThread();
- virtual void RunTranslate(const pp::CompletionCallback& finish_callback,
+ // Start the translation process. It will continue to run and consume data
+ // as it is passed in with PutBytes.
+ void RunTranslate(const pp::CompletionCallback& finish_callback,
const Manifest* manifest,
const Manifest* ld_manifest,
TempFile* obj_file,
LocalTempFile* nexe_file,
ErrorInfo* error_info,
PnaclResources* resources,
- Plugin* plugin) = 0;
+ Plugin* plugin);
+
+ // Signal the translate thread and subprocesses that they should stop.
+ void SetSubprocessesShouldDie();
+
+ // Send bitcode bytes to the translator. Called from the main thread.
+ void PutBytes(std::vector<char>* data, int count);
+
+ private:
// Returns true if the translate thread and subprocesses should stop.
bool SubprocessesShouldDie();
- // Signal the translate thread and subprocesses that they should stop.
- virtual void SetSubprocessesShouldDie();
- protected:
// Starts an individual llc or ld subprocess used for translation.
NaClSubprocess* StartSubprocess(const nacl::string& url,
const Manifest* manifest,
@@ -55,8 +65,8 @@ class PnaclTranslateThread {
// Helper thread entry point for translation. Takes a pointer to
// PnaclTranslateThread and calls DoTranslate().
static void WINAPI DoTranslateThread(void* arg);
- // Runs the SRPCs that control translation. Called from the helper thread.
- virtual void DoTranslate() = 0;
+ // Runs the streaming translation. Called from the helper thread.
+ void DoTranslate() ;
// Signal that Pnacl translation failed, from the translation thread only.
void TranslateFailed(const nacl::string& error_string);
// Run the LD subprocess, returning true on success
@@ -85,6 +95,22 @@ class PnaclTranslateThread {
// Reverse interface to shutdown on SetSubprocessesShouldDie
PluginReverseInterface* current_rev_interface_;
+
+
+ // Condition variable to synchronize communication with the SRPC thread.
+ // SRPC thread waits on this condvar if data_buffers_ is empty (meaning
+ // there is no bitcode to send to the translator), and the main thread
+ // appends to data_buffers_ and signals it when it receives bitcode.
+ struct NaClCondVar buffer_cond_;
+ // Mutex for buffer_cond_.
+ struct NaClMutex cond_mu_;
+ // Data buffers from FileDownloader are enqueued here to pass from the
+ // main thread to the SRPC thread. Protected by cond_mu_
+ std::deque<std::vector<char> > data_buffers_;
+ // Whether all data has been downloaded and copied to translation thread.
+ // Associated with buffer_cond_
+ bool done_;
+
// Data about the translation files, owned by the coordinator
const Manifest* manifest_;
const Manifest* ld_manifest_;

Powered by Google App Engine
This is Rietveld 408576698