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

Side by Side Diff: components/nacl/renderer/plugin/pnacl_coordinator.h

Issue 1128943003: Move PNaCl process startup back to the main thread. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: rebase Created 5 years, 7 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 unified diff | Download patch
OLDNEW
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_COORDINATOR_H_ 5 #ifndef COMPONENTS_NACL_RENDERER_PLUGIN_PNACL_COORDINATOR_H_
6 #define COMPONENTS_NACL_RENDERER_PLUGIN_PNACL_COORDINATOR_H_ 6 #define COMPONENTS_NACL_RENDERER_PLUGIN_PNACL_COORDINATOR_H_
7 7
8 #include <vector> 8 #include <vector>
9 9
10 #include "components/nacl/renderer/plugin/nacl_subprocess.h" 10 #include "components/nacl/renderer/plugin/nacl_subprocess.h"
(...skipping 14 matching lines...) Expand all
25 class PnaclCoordinator; 25 class PnaclCoordinator;
26 class PnaclTranslateThread; 26 class PnaclTranslateThread;
27 class TempFile; 27 class TempFile;
28 28
29 // A class invoked by Plugin to handle PNaCl client-side translation. 29 // A class invoked by Plugin to handle PNaCl client-side translation.
30 // Usage: 30 // Usage:
31 // (1) Invoke the factory method, e.g., 31 // (1) Invoke the factory method, e.g.,
32 // PnaclCoordinator* coord = BitcodeToNative(plugin, 32 // PnaclCoordinator* coord = BitcodeToNative(plugin,
33 // "http://foo.com/my.pexe", 33 // "http://foo.com/my.pexe",
34 // pnacl_options, 34 // pnacl_options,
35 // TranslateNotifyCallback); 35 // translate_notify_callback);
36 // (2) TranslateNotifyCallback gets invoked when translation is complete. 36 // (2) translate_notify_callback gets invoked when translation is complete.
37 // If the translation was successful, the pp_error argument is PP_OK. 37 // If the translation was successful, the pp_error argument is PP_OK.
38 // Other values indicate errors. 38 // Other values indicate errors.
39 // (3) After finish_callback runs, get the file descriptor of the translated 39 // (3) After finish_callback runs, get the file descriptor of the translated
40 // nexe, e.g., 40 // nexe, e.g.,
41 // fd = coord->ReleaseTranslatedFD(); 41 // fd = coord->TakeTranslatedFileHandle();
42 // (4) Load the nexe from "fd". 42 // (4) Load the nexe from "fd".
43 // (5) delete coord. 43 // (5) delete coord.
44 // 44 //
45 // Translation proceeds in two steps: 45 // Translation proceeds in two steps:
46 // (1) llc translates the bitcode in pexe_url_ to an object in obj_file_. 46 // (1) llc translates the bitcode in pexe_url_ to an object in obj_file_.
47 // (2) ld links the object code in obj_file_ and produces a nexe in nexe_file_. 47 // (2) ld links the object code in obj_file_ and produces a nexe in nexe_file_.
48 class PnaclCoordinator { 48 class PnaclCoordinator {
49 public: 49 public:
50 // Maximum number of object files passable to the translator. Cannot be 50 // Maximum number of object files passable to the translator. Cannot be
51 // changed without changing the RPC signatures. 51 // changed without changing the RPC signatures.
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after
99 const pp::CompletionCallback& translate_notify_callback); 99 const pp::CompletionCallback& translate_notify_callback);
100 100
101 // Invoke to issue a GET request for bitcode. 101 // Invoke to issue a GET request for bitcode.
102 void OpenBitcodeStream(); 102 void OpenBitcodeStream();
103 103
104 // Invoked when a pexe data chunk is compiled. 104 // Invoked when a pexe data chunk is compiled.
105 void BitcodeGotCompiled(int32_t pp_error, int64_t bytes_compiled); 105 void BitcodeGotCompiled(int32_t pp_error, int64_t bytes_compiled);
106 // Once llc and ld nexes have been loaded and the two temporary files have 106 // Once llc and ld nexes have been loaded and the two temporary files have
107 // been created, this starts the translation. Translation starts two 107 // been created, this starts the translation. Translation starts two
108 // subprocesses, one for llc and one for ld. 108 // subprocesses, one for llc and one for ld.
109 void RunTranslate(int32_t pp_error); 109 void LoadCompiler();
110 void RunCompile(int32_t pp_error, int64_t compile_load_start_time);
111 void LoadLinker(int32_t pp_error);
112 void RunLink(int32_t pp_error, int64_t ld_load_start_time);
110 113
111 // Invoked when translation is finished. 114 // Invoked when translation is finished.
112 void TranslateFinished(int32_t pp_error); 115 void TranslateFinished(int32_t pp_error);
113 116
114 // Invoked when the read descriptor for nexe_file_ is created. 117 // Invoked when the read descriptor for nexe_file_ is created.
115 void NexeReadDidOpen(int32_t pp_error); 118 void NexeReadDidOpen(int32_t pp_error);
116 119
117 // Bring control back to the plugin by invoking the 120 // Bring control back to the plugin by invoking the
118 // |translate_notify_callback_|. This does not set the ErrorInfo report, 121 // |translate_notify_callback_|. This does not set the ErrorInfo report,
119 // it is assumed that it was already set. 122 // it is assumed that it was already set.
(...skipping 21 matching lines...) Expand all
141 // notified via ReportTranslationFinished. If it is not set before 144 // notified via ReportTranslationFinished. If it is not set before
142 // plugin/coordinator destruction, the destructor will call 145 // plugin/coordinator destruction, the destructor will call
143 // ReportTranslationFinished. 146 // ReportTranslationFinished.
144 bool translation_finished_reported_; 147 bool translation_finished_reported_;
145 // Threadsafety is required to support file lookups. 148 // Threadsafety is required to support file lookups.
146 pp::CompletionCallbackFactory<PnaclCoordinator, 149 pp::CompletionCallbackFactory<PnaclCoordinator,
147 pp::ThreadSafeThreadTraits> callback_factory_; 150 pp::ThreadSafeThreadTraits> callback_factory_;
148 151
149 // An auxiliary class that manages downloaded resources (llc and ld nexes). 152 // An auxiliary class that manages downloaded resources (llc and ld nexes).
150 nacl::scoped_ptr<PnaclResources> resources_; 153 nacl::scoped_ptr<PnaclResources> resources_;
154 NaClSubprocess compiler_subprocess_;
155 NaClSubprocess ld_subprocess_;
151 156
152 // The URL for the pexe file. 157 // The URL for the pexe file.
153 std::string pexe_url_; 158 std::string pexe_url_;
154 // Options for translation. 159 // Options for translation.
155 PP_PNaClOptions pnacl_options_; 160 PP_PNaClOptions pnacl_options_;
156 // Architecture-specific attributes used for translation. These are 161 // Architecture-specific attributes used for translation. These are
157 // supplied by Chrome, not the developer, and are therefore different 162 // supplied by Chrome, not the developer, and are therefore different
158 // from PNaCl options. 163 // from PNaCl options.
159 std::string architecture_attributes_; 164 std::string architecture_attributes_;
160 165
(...skipping 23 matching lines...) Expand all
184 // The helper thread used to do translations via SRPC. 189 // The helper thread used to do translations via SRPC.
185 // It accesses fields of PnaclCoordinator so it must have a 190 // It accesses fields of PnaclCoordinator so it must have a
186 // shorter lifetime. 191 // shorter lifetime.
187 nacl::scoped_ptr<PnaclTranslateThread> translate_thread_; 192 nacl::scoped_ptr<PnaclTranslateThread> translate_thread_;
188 }; 193 };
189 194
190 //---------------------------------------------------------------------- 195 //----------------------------------------------------------------------
191 196
192 } // namespace plugin; 197 } // namespace plugin;
193 #endif // COMPONENTS_NACL_RENDERER_PLUGIN_PNACL_COORDINATOR_H_ 198 #endif // COMPONENTS_NACL_RENDERER_PLUGIN_PNACL_COORDINATOR_H_
OLDNEW
« no previous file with comments | « components/nacl/renderer/plugin/plugin.cc ('k') | components/nacl/renderer/plugin/pnacl_coordinator.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698