Index: ppapi/native_client/src/trusted/plugin/pnacl_coordinator.h |
diff --git a/ppapi/native_client/src/trusted/plugin/pnacl_coordinator.h b/ppapi/native_client/src/trusted/plugin/pnacl_coordinator.h |
index 5643a6dd72273e8d62d21710c964a884b13ac3ee..96f8cbd3aea13a053d614538c639ef6d48ae0099 100644 |
--- a/ppapi/native_client/src/trusted/plugin/pnacl_coordinator.h |
+++ b/ppapi/native_client/src/trusted/plugin/pnacl_coordinator.h |
@@ -11,13 +11,13 @@ |
#include "native_client/src/include/nacl_macros.h" |
#include "native_client/src/include/nacl_string.h" |
-#include "native_client/src/shared/platform/nacl_sync_checked.h" |
#include "native_client/src/shared/platform/nacl_sync_raii.h" |
-#include "native_client/src/shared/platform/nacl_threads.h" |
+ |
#include "native_client/src/shared/srpc/nacl_srpc.h" |
-#include "native_client/src/trusted/desc/nacl_desc_rng.h" |
+ |
#include "native_client/src/trusted/desc/nacl_desc_wrapper.h" |
#include "native_client/src/trusted/plugin/delayed_callback.h" |
+#include "native_client/src/trusted/plugin/local_temp_file.h" |
#include "native_client/src/trusted/plugin/nacl_subprocess.h" |
#include "native_client/src/trusted/plugin/plugin_error.h" |
#include "native_client/src/trusted/plugin/pnacl_resources.h" |
@@ -29,114 +29,13 @@ |
#include "ppapi/cpp/file_ref.h" |
#include "ppapi/cpp/file_system.h" |
-struct NaClMutex; |
namespace plugin { |
class Manifest; |
class Plugin; |
class PnaclCoordinator; |
- |
-// Translation creates two temporary files. The first temporary file holds |
-// the object file created by llc. The second holds the nexe produced by |
-// the linker. Both of these temporary files are used to both write and |
-// read according to the following matrix: |
-// |
-// PnaclCoordinator::obj_file_: |
-// written by: llc (passed in explicitly through SRPC) |
-// read by: ld (returned via lookup service from SRPC) |
-// PnaclCoordinator::nexe_file_: |
-// written by: ld (passed in explicitly through SRPC) |
-// read by: sel_ldr (passed in explicitly to command channel) |
-// |
- |
-// LocalTempFile represents a file used as a temporary between stages in |
-// translation. It is created in the local temporary file system of the page |
-// being processed. The name of the temporary file is a random 32-character |
-// hex string. Because both reading and writing are necessary, two I/O objects |
-// for the file are opened. |
-class LocalTempFile { |
- public: |
- // Create a LocalTempFile with a random name. |
- LocalTempFile(Plugin* plugin, |
- pp::FileSystem* file_system); |
- // Create a LocalTempFile with a specific filename. |
- LocalTempFile(Plugin* plugin, |
- pp::FileSystem* file_system, |
- const nacl::string& filename); |
- ~LocalTempFile(); |
- // Opens a writeable file IO object and descriptor referring to the file. |
- void OpenWrite(const pp::CompletionCallback& cb); |
- // Opens a read only file IO object and descriptor referring to the file. |
- void OpenRead(const pp::CompletionCallback& cb); |
- // Closes the open descriptors. |
- void Close(const pp::CompletionCallback& cb); |
- // Deletes the temporary file. |
- void Delete(const pp::CompletionCallback& cb); |
- // Renames the temporary file. |
- void Rename(const nacl::string& new_name, |
- const pp::CompletionCallback& cb); |
- void FinishRename(); |
- |
- // Accessors. |
- // The nacl::DescWrapper* for the writeable version of the file. |
- nacl::DescWrapper* write_wrapper() { return write_wrapper_.get(); } |
- nacl::DescWrapper* release_write_wrapper() { |
- return write_wrapper_.release(); |
- } |
- // The nacl::DescWrapper* for the read-only version of the file. |
- nacl::DescWrapper* read_wrapper() { return read_wrapper_.get(); } |
- nacl::DescWrapper* release_read_wrapper() { |
- return read_wrapper_.release(); |
- } |
- // For quota management. |
- const nacl::string identifier() const { |
- return nacl::string(reinterpret_cast<const char*>(identifier_)); |
- } |
- const pp::FileIO& write_file_io() const { return *write_io_; } |
- |
- private: |
- NACL_DISALLOW_COPY_AND_ASSIGN(LocalTempFile); |
- |
- void Initialize(); |
- |
- // Gets the POSIX file descriptor for a resource. |
- int32_t GetFD(int32_t pp_error, |
- const pp::Resource& resource, |
- bool is_writable); |
- // Called when the writable file IO was opened. |
- void WriteFileDidOpen(int32_t pp_error); |
- // Called when the readable file IO was opened. |
- void ReadFileDidOpen(int32_t pp_error); |
- // Completes the close operation after quota update. |
- void CloseContinuation(int32_t pp_error); |
- |
- Plugin* plugin_; |
- pp::FileSystem* file_system_; |
- const PPB_FileIOTrusted* file_io_trusted_; |
- pp::CompletionCallbackFactory<LocalTempFile> callback_factory_; |
- nacl::string filename_; |
- nacl::scoped_ptr<pp::FileRef> file_ref_; |
- // Temporarily holds the previous file ref during a rename operation. |
- nacl::scoped_ptr<pp::FileRef> old_ref_; |
- // The PPAPI and wrapper state for the writeable file. |
- nacl::scoped_ptr<pp::FileIO> write_io_; |
- nacl::scoped_ptr<nacl::DescWrapper> write_wrapper_; |
- // The PPAPI and wrapper state for the read-only file. |
- nacl::scoped_ptr<pp::FileIO> read_io_; |
- nacl::scoped_ptr<nacl::DescWrapper> read_wrapper_; |
- // The callback invoked when both file I/O objects are created. |
- pp::CompletionCallback done_callback_; |
- // Random number generator used to create filenames. |
- struct NaClDescRng *rng_desc_; |
- // An identifier string used for quota request processing. The quota |
- // interface needs a string that is unique per sel_ldr instance only, so |
- // the identifiers can be reused between runs of the translator, start-ups of |
- // the browser, etc. |
- uint8_t identifier_[16]; |
- // A counter to dole out unique identifiers. |
- static uint32_t next_identifier; |
-}; |
+class PnaclTranslateThread; |
// A thread safe reference counting class Needed for CompletionCallbackFactory |
// in PnaclCoordinator. |
@@ -284,25 +183,12 @@ class PnaclCoordinator { |
// been created, this starts the translation. Translation starts two |
// subprocesses, one for llc and one for ld. |
void RunTranslate(int32_t pp_error); |
- // Starts an individual llc or ld subprocess used for translation. |
- NaClSubprocess* StartSubprocess(const nacl::string& url, |
- const Manifest* manifest); |
- // PnaclCoordinator creates a helper thread to allow translations to be |
- // invoked via SRPC. This is the helper thread function for translation. |
- static void WINAPI DoTranslateThread(void* arg); |
- // Returns true if a the translate thread and subprocesses should stop. |
- bool SubprocessesShouldDie(); |
- // Signal the translate thread and subprocesses that they should stop. |
- void SetSubprocessesShouldDie(bool subprocesses_should_die); |
- // Signal that Pnacl translation completed normally. |
+ |
void TranslateFinished(int32_t pp_error); |
// Keeps track of the pp_error upon entry to TranslateFinished, |
// for inspection after cleanup. |
int32_t translate_finish_error_; |
- // Signal that Pnacl translation failed, from the translation thread only. |
- void TranslateFailed(const nacl::string& error_string); |
- |
// The plugin owning the nexe for which we are doing translation. |
Plugin* plugin_; |
@@ -312,16 +198,11 @@ class PnaclCoordinator { |
pp::CompletionCallbackFactory<PnaclCoordinator, |
PnaclRefCount> callback_factory_; |
- // True if the translation thread and related subprocesses should exit. |
- bool subprocesses_should_die_; |
- // Used to guard and publish subprocesses_should_die_. |
- struct NaClMutex subprocess_mu_; |
- |
// Nexe from the final native Link. |
nacl::scoped_ptr<nacl::DescWrapper> translated_fd_; |
// The helper thread used to do translations via SRPC. |
- nacl::scoped_ptr<NaClThread> translate_thread_; |
+ nacl::scoped_ptr<PnaclTranslateThread> translate_thread_; |
// Translation creates local temporary files. |
nacl::scoped_ptr<pp::FileSystem> file_system_; |
// The manifest used by resource loading and llc's reverse service to look up |
@@ -352,8 +233,6 @@ class PnaclCoordinator { |
nacl::scoped_ptr<LocalTempFile> obj_file_; |
// Translated nexe file, produced by the linker and consumed by sel_ldr. |
nacl::scoped_ptr<LocalTempFile> nexe_file_; |
- // Callback to run when tasks are completed or an error has occurred. |
- pp::CompletionCallback report_translate_finished_; |
// Used to report information when errors (PPAPI or otherwise) are reported. |
ErrorInfo error_info_; |