| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 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 | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #ifndef COMPONENTS_NACL_RENDERER_PLUGIN_PNACL_TRANSLATE_THREAD_H_ | 5 #ifndef COMPONENTS_NACL_RENDERER_PLUGIN_PNACL_TRANSLATE_THREAD_H_ |
| 6 #define COMPONENTS_NACL_RENDERER_PLUGIN_PNACL_TRANSLATE_THREAD_H_ | 6 #define COMPONENTS_NACL_RENDERER_PLUGIN_PNACL_TRANSLATE_THREAD_H_ |
| 7 | 7 |
| 8 #include <deque> | 8 #include <deque> |
| 9 #include <vector> | 9 #include <vector> |
| 10 | 10 |
| (...skipping 22 matching lines...) Expand all Loading... |
| 33 | 33 |
| 34 class PnaclTranslateThread { | 34 class PnaclTranslateThread { |
| 35 public: | 35 public: |
| 36 PnaclTranslateThread(); | 36 PnaclTranslateThread(); |
| 37 ~PnaclTranslateThread(); | 37 ~PnaclTranslateThread(); |
| 38 | 38 |
| 39 // Start the translation process. It will continue to run and consume data | 39 // Start the translation process. It will continue to run and consume data |
| 40 // as it is passed in with PutBytes. | 40 // as it is passed in with PutBytes. |
| 41 void RunTranslate(const pp::CompletionCallback& finish_callback, | 41 void RunTranslate(const pp::CompletionCallback& finish_callback, |
| 42 const std::vector<TempFile*>* obj_files, | 42 const std::vector<TempFile*>* obj_files, |
| 43 int num_threads, |
| 43 TempFile* nexe_file, | 44 TempFile* nexe_file, |
| 44 nacl::DescWrapper* invalid_desc_wrapper, | 45 nacl::DescWrapper* invalid_desc_wrapper, |
| 45 ErrorInfo* error_info, | 46 ErrorInfo* error_info, |
| 46 PnaclResources* resources, | 47 PnaclResources* resources, |
| 47 PP_PNaClOptions* pnacl_options, | 48 PP_PNaClOptions* pnacl_options, |
| 48 const std::string &architecture_attributes, | 49 const std::string& architecture_attributes, |
| 49 PnaclCoordinator* coordinator, | 50 PnaclCoordinator* coordinator, |
| 50 Plugin* plugin); | 51 Plugin* plugin); |
| 51 | 52 |
| 52 // Kill the llc and/or ld subprocesses. This happens by closing the command | 53 // Kill the llc and/or ld subprocesses. This happens by closing the command |
| 53 // channel on the plugin side, which causes the trusted code in the nexe to | 54 // channel on the plugin side, which causes the trusted code in the nexe to |
| 54 // exit, which will cause any pending SRPCs to error. Because this is called | 55 // exit, which will cause any pending SRPCs to error. Because this is called |
| 55 // on the main thread, the translation thread must not use the subprocess | 56 // on the main thread, the translation thread must not use the subprocess |
| 56 // objects without the lock, other than InvokeSrpcMethod, which does not | 57 // objects without the lock, other than InvokeSrpcMethod, which does not |
| 57 // race with service runtime shutdown. | 58 // race with service runtime shutdown. |
| 58 void AbortSubprocesses(); | 59 void AbortSubprocesses(); |
| (...skipping 22 matching lines...) Expand all Loading... |
| 81 // Run the LD subprocess, returning true on success. | 82 // Run the LD subprocess, returning true on success. |
| 82 // On failure, it returns false and runs the callback. | 83 // On failure, it returns false and runs the callback. |
| 83 bool RunLdSubprocess(); | 84 bool RunLdSubprocess(); |
| 84 | 85 |
| 85 | 86 |
| 86 // Callback to run when tasks are completed or an error has occurred. | 87 // Callback to run when tasks are completed or an error has occurred. |
| 87 pp::CompletionCallback report_translate_finished_; | 88 pp::CompletionCallback report_translate_finished_; |
| 88 | 89 |
| 89 nacl::scoped_ptr<NaClThread> translate_thread_; | 90 nacl::scoped_ptr<NaClThread> translate_thread_; |
| 90 | 91 |
| 91 // Used to guard llc_subprocess and ld_subprocess | 92 // Used to guard compiler_subprocess and ld_subprocess |
| 92 struct NaClMutex subprocess_mu_; | 93 struct NaClMutex subprocess_mu_; |
| 93 nacl::scoped_ptr<NaClSubprocess> llc_subprocess_; | 94 nacl::scoped_ptr<NaClSubprocess> compiler_subprocess_; |
| 94 nacl::scoped_ptr<NaClSubprocess> ld_subprocess_; | 95 nacl::scoped_ptr<NaClSubprocess> ld_subprocess_; |
| 95 // Used to ensure the subprocesses don't get shutdown more than once. | 96 // Used to ensure the subprocesses don't get shutdown more than once. |
| 96 bool llc_subprocess_active_; | 97 bool compiler_subprocess_active_; |
| 97 bool ld_subprocess_active_; | 98 bool ld_subprocess_active_; |
| 98 | 99 |
| 99 bool subprocesses_aborted_; | 100 bool subprocesses_aborted_; |
| 100 | 101 |
| 101 // Condition variable to synchronize communication with the SRPC thread. | 102 // Condition variable to synchronize communication with the SRPC thread. |
| 102 // SRPC thread waits on this condvar if data_buffers_ is empty (meaning | 103 // SRPC thread waits on this condvar if data_buffers_ is empty (meaning |
| 103 // there is no bitcode to send to the translator), and the main thread | 104 // there is no bitcode to send to the translator), and the main thread |
| 104 // appends to data_buffers_ and signals it when it receives bitcode. | 105 // appends to data_buffers_ and signals it when it receives bitcode. |
| 105 struct NaClCondVar buffer_cond_; | 106 struct NaClCondVar buffer_cond_; |
| 106 // Mutex for buffer_cond_. | 107 // Mutex for buffer_cond_. |
| 107 struct NaClMutex cond_mu_; | 108 struct NaClMutex cond_mu_; |
| 108 // Data buffers from FileDownloader are enqueued here to pass from the | 109 // Data buffers from FileDownloader are enqueued here to pass from the |
| 109 // main thread to the SRPC thread. Protected by cond_mu_ | 110 // main thread to the SRPC thread. Protected by cond_mu_ |
| 110 std::deque<std::vector<char> > data_buffers_; | 111 std::deque<std::vector<char> > data_buffers_; |
| 111 // Whether all data has been downloaded and copied to translation thread. | 112 // Whether all data has been downloaded and copied to translation thread. |
| 112 // Associated with buffer_cond_ | 113 // Associated with buffer_cond_ |
| 113 bool done_; | 114 bool done_; |
| 114 | 115 |
| 115 int64_t compile_time_; | 116 int64_t compile_time_; |
| 116 | 117 |
| 117 // Data about the translation files, owned by the coordinator | 118 // Data about the translation files, owned by the coordinator |
| 118 const std::vector<TempFile*>* obj_files_; | 119 const std::vector<TempFile*>* obj_files_; |
| 120 int num_threads_; |
| 119 TempFile* nexe_file_; | 121 TempFile* nexe_file_; |
| 120 nacl::DescWrapper* invalid_desc_wrapper_; | 122 nacl::DescWrapper* invalid_desc_wrapper_; |
| 121 ErrorInfo* coordinator_error_info_; | 123 ErrorInfo* coordinator_error_info_; |
| 122 PnaclResources* resources_; | 124 PnaclResources* resources_; |
| 123 PP_PNaClOptions* pnacl_options_; | 125 PP_PNaClOptions* pnacl_options_; |
| 124 std::string architecture_attributes_; | 126 std::string architecture_attributes_; |
| 125 PnaclCoordinator* coordinator_; | 127 PnaclCoordinator* coordinator_; |
| 126 Plugin* plugin_; | 128 Plugin* plugin_; |
| 127 private: | 129 private: |
| 128 NACL_DISALLOW_COPY_AND_ASSIGN(PnaclTranslateThread); | 130 NACL_DISALLOW_COPY_AND_ASSIGN(PnaclTranslateThread); |
| 129 }; | 131 }; |
| 130 | 132 |
| 131 } | 133 } |
| 132 #endif // COMPONENTS_NACL_RENDERER_PLUGIN_PNACL_TRANSLATE_THREAD_H_ | 134 #endif // COMPONENTS_NACL_RENDERER_PLUGIN_PNACL_TRANSLATE_THREAD_H_ |
| OLD | NEW |