Chromium Code Reviews| 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 <stdint.h> | 8 #include <stdint.h> |
| 9 | 9 |
| 10 #include <deque> | 10 #include <deque> |
| 11 #include <vector> | 11 #include <vector> |
| 12 | 12 |
| 13 #include "base/files/file.h" | |
| 13 #include "base/macros.h" | 14 #include "base/macros.h" |
| 14 #include "base/memory/scoped_ptr.h" | 15 #include "base/memory/scoped_ptr.h" |
| 15 #include "components/nacl/renderer/plugin/plugin_error.h" | 16 #include "components/nacl/renderer/plugin/plugin_error.h" |
| 16 #include "native_client/src/shared/platform/nacl_sync_checked.h" | 17 #include "native_client/src/shared/platform/nacl_sync_checked.h" |
| 17 #include "native_client/src/shared/platform/nacl_threads.h" | 18 #include "native_client/src/shared/platform/nacl_threads.h" |
| 18 #include "ppapi/cpp/completion_callback.h" | 19 #include "ppapi/cpp/completion_callback.h" |
| 19 #include "ppapi/proxy/serialized_handle.h" | 20 #include "ppapi/proxy/serialized_handle.h" |
| 20 | 21 |
| 21 struct PP_PNaClOptions; | 22 struct PP_PNaClOptions; |
| 22 | 23 |
| 23 namespace plugin { | 24 namespace plugin { |
| 24 | 25 |
| 25 class NaClSubprocess; | 26 class NaClSubprocess; |
| 26 class PnaclCoordinator; | 27 class PnaclCoordinator; |
| 27 class TempFile; | |
| 28 | 28 |
| 29 class PnaclTranslateThread { | 29 class PnaclTranslateThread { |
| 30 public: | 30 public: |
| 31 PnaclTranslateThread(); | 31 PnaclTranslateThread(); |
| 32 ~PnaclTranslateThread(); | 32 ~PnaclTranslateThread(); |
| 33 | 33 |
| 34 // Set up the state for RunCompile and RunLink. When an error is | 34 // Set up the state for RunCompile and RunLink. When an error is |
| 35 // encountered, or RunLink is complete the finish_callback is run | 35 // encountered, or RunLink is complete the finish_callback is run |
| 36 // to notify the main thread. | 36 // to notify the main thread. |
| 37 void SetupState(const pp::CompletionCallback& finish_callback, | 37 void SetupState(const pp::CompletionCallback& finish_callback, |
| 38 NaClSubprocess* compiler_subprocess, | 38 NaClSubprocess* compiler_subprocess, |
| 39 NaClSubprocess* ld_subprocess, | 39 NaClSubprocess* ld_subprocess, |
| 40 const std::vector<TempFile*>* obj_files, | 40 std::vector<base::File>* obj_files, |
| 41 int num_threads, | 41 int num_threads, |
| 42 TempFile* nexe_file, | 42 base::File* nexe_file, |
| 43 ErrorInfo* error_info, | 43 ErrorInfo* error_info, |
| 44 PP_PNaClOptions* pnacl_options, | 44 PP_PNaClOptions* pnacl_options, |
| 45 const std::string& architecture_attributes, | 45 const std::string& architecture_attributes, |
| 46 PnaclCoordinator* coordinator); | 46 PnaclCoordinator* coordinator); |
| 47 | 47 |
| 48 // Create a compile thread and run/command the compiler_subprocess. | 48 // Create a compile thread and run/command the compiler_subprocess. |
| 49 // It will continue to run and consume data as it is passed in with PutBytes. | 49 // It will continue to run and consume data as it is passed in with PutBytes. |
| 50 // On success, runs compile_finished_callback. | 50 // On success, runs compile_finished_callback. |
| 51 // On error, runs finish_callback. | 51 // On error, runs finish_callback. |
| 52 // The compiler_subprocess must already be loaded. | 52 // The compiler_subprocess must already be loaded. |
| (...skipping 19 matching lines...) Expand all Loading... | |
| 72 // Called from the main thread. | 72 // Called from the main thread. |
| 73 void EndStream(); | 73 void EndStream(); |
| 74 | 74 |
| 75 int64_t GetCompileTime() const { return compile_time_; } | 75 int64_t GetCompileTime() const { return compile_time_; } |
| 76 | 76 |
| 77 // Returns true if the translation process is initiated via SetupState. | 77 // Returns true if the translation process is initiated via SetupState. |
| 78 bool started() const { return coordinator_ != NULL; } | 78 bool started() const { return coordinator_ != NULL; } |
| 79 | 79 |
| 80 private: | 80 private: |
| 81 ppapi::proxy::SerializedHandle GetHandleForSubprocess( | 81 ppapi::proxy::SerializedHandle GetHandleForSubprocess( |
| 82 TempFile* file, int32_t open_flags, base::ProcessId peer_pid); | 82 base::File* file, int32_t open_flags, base::ProcessId peer_pid); |
| 83 | 83 |
| 84 // Helper thread entry point for compilation. Takes a pointer to | 84 // Helper thread entry point for compilation. Takes a pointer to |
| 85 // PnaclTranslateThread and calls DoCompile(). | 85 // PnaclTranslateThread and calls DoCompile(). |
| 86 static void WINAPI DoCompileThread(void* arg); | 86 static void WINAPI DoCompileThread(void* arg); |
| 87 // Runs the streaming compilation. Called from the helper thread. | 87 // Runs the streaming compilation. Called from the helper thread. |
| 88 void DoCompile(); | 88 void DoCompile(); |
| 89 | 89 |
| 90 // Similar to DoCompile*, but for linking. | 90 // Similar to DoCompile*, but for linking. |
| 91 static void WINAPI DoLinkThread(void* arg); | 91 static void WINAPI DoLinkThread(void* arg); |
| 92 void DoLink(); | 92 void DoLink(); |
| (...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 131 // Data buffers from FileDownloader are enqueued here to pass from the | 131 // Data buffers from FileDownloader are enqueued here to pass from the |
| 132 // main thread to the SRPC thread. Protected by cond_mu_ | 132 // main thread to the SRPC thread. Protected by cond_mu_ |
| 133 std::deque<std::string> data_buffers_; | 133 std::deque<std::string> data_buffers_; |
| 134 // Whether all data has been downloaded and copied to translation thread. | 134 // Whether all data has been downloaded and copied to translation thread. |
| 135 // Associated with buffer_cond_ | 135 // Associated with buffer_cond_ |
| 136 bool done_; | 136 bool done_; |
| 137 | 137 |
| 138 int64_t compile_time_; | 138 int64_t compile_time_; |
| 139 | 139 |
| 140 // Data about the translation files, owned by the coordinator | 140 // Data about the translation files, owned by the coordinator |
| 141 const std::vector<TempFile*>* obj_files_; | 141 std::vector<base::File>* obj_files_; |
|
bbudge
2016/01/21 18:37:38
Have you considered making this a const ref? Or is
Mark Seaborn
2016/01/21 19:18:21
I started off keeping the 'const', but it didn't w
| |
| 142 int num_threads_; | 142 int num_threads_; |
| 143 TempFile* nexe_file_; | 143 base::File* nexe_file_; |
| 144 ErrorInfo* coordinator_error_info_; | 144 ErrorInfo* coordinator_error_info_; |
| 145 PP_PNaClOptions* pnacl_options_; | 145 PP_PNaClOptions* pnacl_options_; |
| 146 std::string architecture_attributes_; | 146 std::string architecture_attributes_; |
| 147 PnaclCoordinator* coordinator_; | 147 PnaclCoordinator* coordinator_; |
| 148 | 148 |
| 149 // These IPC::SyncChannels can only be used and freed by the parent thread. | 149 // These IPC::SyncChannels can only be used and freed by the parent thread. |
| 150 scoped_ptr<IPC::SyncChannel> compiler_channel_; | 150 scoped_ptr<IPC::SyncChannel> compiler_channel_; |
| 151 scoped_ptr<IPC::SyncChannel> ld_channel_; | 151 scoped_ptr<IPC::SyncChannel> ld_channel_; |
| 152 // These IPC::SyncMessageFilters can be used by the child thread. | 152 // These IPC::SyncMessageFilters can be used by the child thread. |
| 153 scoped_refptr<IPC::SyncMessageFilter> compiler_channel_filter_; | 153 scoped_refptr<IPC::SyncMessageFilter> compiler_channel_filter_; |
| 154 scoped_refptr<IPC::SyncMessageFilter> ld_channel_filter_; | 154 scoped_refptr<IPC::SyncMessageFilter> ld_channel_filter_; |
| 155 // PIDs of the subprocesses, needed for copying handles to the subprocess | 155 // PIDs of the subprocesses, needed for copying handles to the subprocess |
| 156 // on Windows. These are used by the child thread. | 156 // on Windows. These are used by the child thread. |
| 157 base::ProcessId compiler_channel_peer_pid_; | 157 base::ProcessId compiler_channel_peer_pid_; |
| 158 base::ProcessId ld_channel_peer_pid_; | 158 base::ProcessId ld_channel_peer_pid_; |
| 159 | 159 |
| 160 private: | 160 private: |
| 161 DISALLOW_COPY_AND_ASSIGN(PnaclTranslateThread); | 161 DISALLOW_COPY_AND_ASSIGN(PnaclTranslateThread); |
| 162 }; | 162 }; |
| 163 | 163 |
| 164 } | 164 } |
| 165 #endif // COMPONENTS_NACL_RENDERER_PLUGIN_PNACL_TRANSLATE_THREAD_H_ | 165 #endif // COMPONENTS_NACL_RENDERER_PLUGIN_PNACL_TRANSLATE_THREAD_H_ |
| OLD | NEW |