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

Side by Side Diff: components/nacl/renderer/plugin/pnacl_translate_thread.cc

Issue 1615523003: PNaCl cleanup: Remove TempFile class and use base::File instead (Closed) Base URL: http://git.chromium.org/chromium/src.git@master
Patch Set: Fix Windows Created 4 years, 11 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 #include "components/nacl/renderer/plugin/pnacl_translate_thread.h" 5 #include "components/nacl/renderer/plugin/pnacl_translate_thread.h"
6 6
7 #include <stddef.h> 7 #include <stddef.h>
8 8
9 #include <iterator> 9 #include <iterator>
10 #include <sstream> 10 #include <sstream>
11 11
12 #include "base/logging.h" 12 #include "base/logging.h"
13 #include "components/nacl/renderer/plugin/plugin.h" 13 #include "components/nacl/renderer/plugin/plugin.h"
14 #include "components/nacl/renderer/plugin/plugin_error.h" 14 #include "components/nacl/renderer/plugin/plugin_error.h"
15 #include "components/nacl/renderer/plugin/temporary_file.h"
16 #include "components/nacl/renderer/plugin/utility.h" 15 #include "components/nacl/renderer/plugin/utility.h"
17 #include "content/public/common/sandbox_init.h" 16 #include "content/public/common/sandbox_init.h"
18 #include "native_client/src/shared/platform/nacl_sync_raii.h" 17 #include "native_client/src/shared/platform/nacl_sync_raii.h"
19 #include "ppapi/c/ppb_file_io.h" 18 #include "ppapi/c/ppb_file_io.h"
20 #include "ppapi/cpp/var.h" 19 #include "ppapi/cpp/var.h"
21 #include "ppapi/proxy/ppapi_messages.h" 20 #include "ppapi/proxy/ppapi_messages.h"
22 21
23 namespace plugin { 22 namespace plugin {
24 namespace { 23 namespace {
25 24
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after
76 ld_channel_peer_pid_(base::kNullProcessId) { 75 ld_channel_peer_pid_(base::kNullProcessId) {
77 NaClXMutexCtor(&subprocess_mu_); 76 NaClXMutexCtor(&subprocess_mu_);
78 NaClXMutexCtor(&cond_mu_); 77 NaClXMutexCtor(&cond_mu_);
79 NaClXCondVarCtor(&buffer_cond_); 78 NaClXCondVarCtor(&buffer_cond_);
80 } 79 }
81 80
82 void PnaclTranslateThread::SetupState( 81 void PnaclTranslateThread::SetupState(
83 const pp::CompletionCallback& finish_callback, 82 const pp::CompletionCallback& finish_callback,
84 NaClSubprocess* compiler_subprocess, 83 NaClSubprocess* compiler_subprocess,
85 NaClSubprocess* ld_subprocess, 84 NaClSubprocess* ld_subprocess,
86 const std::vector<TempFile*>* obj_files, 85 std::vector<base::File>* obj_files,
87 int num_threads, 86 int num_threads,
88 TempFile* nexe_file, 87 base::File* nexe_file,
89 ErrorInfo* error_info, 88 ErrorInfo* error_info,
90 PP_PNaClOptions* pnacl_options, 89 PP_PNaClOptions* pnacl_options,
91 const std::string& architecture_attributes, 90 const std::string& architecture_attributes,
92 PnaclCoordinator* coordinator) { 91 PnaclCoordinator* coordinator) {
93 PLUGIN_PRINTF(("PnaclTranslateThread::SetupState)\n")); 92 PLUGIN_PRINTF(("PnaclTranslateThread::SetupState)\n"));
94 compiler_subprocess_ = compiler_subprocess; 93 compiler_subprocess_ = compiler_subprocess;
95 ld_subprocess_ = ld_subprocess; 94 ld_subprocess_ = ld_subprocess;
96 obj_files_ = obj_files; 95 obj_files_ = obj_files;
97 num_threads_ = num_threads; 96 num_threads_ = num_threads;
98 nexe_file_ = nexe_file; 97 nexe_file_ = nexe_file;
(...skipping 90 matching lines...) Expand 10 before | Expand all | Expand 10 after
189 } 188 }
190 189
191 void PnaclTranslateThread::EndStream() { 190 void PnaclTranslateThread::EndStream() {
192 NaClXMutexLock(&cond_mu_); 191 NaClXMutexLock(&cond_mu_);
193 done_ = true; 192 done_ = true;
194 NaClXCondVarSignal(&buffer_cond_); 193 NaClXCondVarSignal(&buffer_cond_);
195 NaClXMutexUnlock(&cond_mu_); 194 NaClXMutexUnlock(&cond_mu_);
196 } 195 }
197 196
198 ppapi::proxy::SerializedHandle PnaclTranslateThread::GetHandleForSubprocess( 197 ppapi::proxy::SerializedHandle PnaclTranslateThread::GetHandleForSubprocess(
199 TempFile* file, int32_t open_flags, base::ProcessId peer_pid) { 198 base::File* file, int32_t open_flags, base::ProcessId peer_pid) {
200 IPC::PlatformFileForTransit file_for_transit; 199 IPC::PlatformFileForTransit file_for_transit;
201 200
201 DCHECK(file->IsValid());
202 #if defined(OS_WIN) 202 #if defined(OS_WIN)
203 if (!content::BrokerDuplicateHandle( 203 if (!content::BrokerDuplicateHandle(
204 file->GetFileHandle(), 204 file->GetPlatformFile(),
205 peer_pid, 205 peer_pid,
206 &file_for_transit, 206 &file_for_transit,
207 0, // desired_access is 0 since we're using DUPLICATE_SAME_ACCESS. 207 0, // desired_access is 0 since we're using DUPLICATE_SAME_ACCESS.
208 DUPLICATE_SAME_ACCESS)) { 208 DUPLICATE_SAME_ACCESS)) {
209 return ppapi::proxy::SerializedHandle(); 209 return ppapi::proxy::SerializedHandle();
210 } 210 }
211 #else 211 #else
212 file_for_transit = base::FileDescriptor(dup(file->GetFileHandle()), true); 212 file_for_transit = base::FileDescriptor(dup(file->GetPlatformFile()), true);
213 #endif 213 #endif
214 214
215 // Using 0 disables any use of quota enforcement for this file handle. 215 // Using 0 disables any use of quota enforcement for this file handle.
216 PP_Resource file_io = 0; 216 PP_Resource file_io = 0;
217 217
218 ppapi::proxy::SerializedHandle handle; 218 ppapi::proxy::SerializedHandle handle;
219 handle.set_file_handle(file_for_transit, open_flags, file_io); 219 handle.set_file_handle(file_for_transit, open_flags, file_io);
220 return handle; 220 return handle;
221 } 221 }
222 222
223 void WINAPI PnaclTranslateThread::DoCompileThread(void* arg) { 223 void WINAPI PnaclTranslateThread::DoCompileThread(void* arg) {
224 PnaclTranslateThread* translator = 224 PnaclTranslateThread* translator =
225 reinterpret_cast<PnaclTranslateThread*>(arg); 225 reinterpret_cast<PnaclTranslateThread*>(arg);
226 translator->DoCompile(); 226 translator->DoCompile();
227 } 227 }
228 228
229 void PnaclTranslateThread::DoCompile() { 229 void PnaclTranslateThread::DoCompile() {
230 { 230 {
231 nacl::MutexLocker ml(&subprocess_mu_); 231 nacl::MutexLocker ml(&subprocess_mu_);
232 // If the main thread asked us to exit in between starting the thread 232 // If the main thread asked us to exit in between starting the thread
233 // and now, just leave now. 233 // and now, just leave now.
234 if (!compiler_subprocess_active_) 234 if (!compiler_subprocess_active_)
235 return; 235 return;
236 } 236 }
237 237
238 std::vector<ppapi::proxy::SerializedHandle> compiler_output_files; 238 std::vector<ppapi::proxy::SerializedHandle> compiler_output_files;
239 for (TempFile* obj_file : *obj_files_) { 239 for (base::File& obj_file : *obj_files_) {
240 compiler_output_files.push_back( 240 compiler_output_files.push_back(
241 GetHandleForSubprocess(obj_file, PP_FILEOPENFLAG_WRITE, 241 GetHandleForSubprocess(&obj_file, PP_FILEOPENFLAG_WRITE,
242 compiler_channel_peer_pid_)); 242 compiler_channel_peer_pid_));
243 } 243 }
244 244
245 PLUGIN_PRINTF(("DoCompile using subzero: %d\n", pnacl_options_->use_subzero)); 245 PLUGIN_PRINTF(("DoCompile using subzero: %d\n", pnacl_options_->use_subzero));
246 246
247 pp::Core* core = pp::Module::Get()->core(); 247 pp::Core* core = pp::Module::Get()->core();
248 int64_t do_compile_start_time = NaClGetTimeOfDayMicroseconds(); 248 int64_t do_compile_start_time = NaClGetTimeOfDayMicroseconds();
249 249
250 std::vector<std::string> args; 250 std::vector<std::string> args;
251 if (pnacl_options_->use_subzero) { 251 if (pnacl_options_->use_subzero) {
(...skipping 106 matching lines...) Expand 10 before | Expand all | Expand 10 after
358 void PnaclTranslateThread::DoLink() { 358 void PnaclTranslateThread::DoLink() {
359 { 359 {
360 nacl::MutexLocker ml(&subprocess_mu_); 360 nacl::MutexLocker ml(&subprocess_mu_);
361 // If the main thread asked us to exit in between starting the thread 361 // If the main thread asked us to exit in between starting the thread
362 // and now, just leave now. 362 // and now, just leave now.
363 if (!ld_subprocess_active_) 363 if (!ld_subprocess_active_)
364 return; 364 return;
365 } 365 }
366 366
367 // Reset object files for reading first. We do this before duplicating 367 // Reset object files for reading first. We do this before duplicating
368 // handles/FDs to prevent any handle/FD leaks in case any of the Reset() 368 // handles/FDs to prevent any handle/FD leaks in case any of the Seek()
369 // calls fail. 369 // calls fail.
370 for (TempFile* obj_file : *obj_files_) { 370 for (base::File& obj_file : *obj_files_) {
371 if (!obj_file->Reset()) { 371 if (obj_file.Seek(base::File::FROM_BEGIN, 0) != 0) {
372 TranslateFailed(PP_NACL_ERROR_PNACL_LD_SETUP, 372 TranslateFailed(PP_NACL_ERROR_PNACL_LD_SETUP,
373 "Link process could not reset object file"); 373 "Link process could not reset object file");
374 return; 374 return;
375 } 375 }
376 } 376 }
377 377
378 ppapi::proxy::SerializedHandle nexe_file = 378 ppapi::proxy::SerializedHandle nexe_file =
379 GetHandleForSubprocess(nexe_file_, PP_FILEOPENFLAG_WRITE, 379 GetHandleForSubprocess(nexe_file_, PP_FILEOPENFLAG_WRITE,
380 ld_channel_peer_pid_); 380 ld_channel_peer_pid_);
381 std::vector<ppapi::proxy::SerializedHandle> ld_input_files; 381 std::vector<ppapi::proxy::SerializedHandle> ld_input_files;
382 for (TempFile* obj_file : *obj_files_) { 382 for (base::File& obj_file : *obj_files_) {
383 ld_input_files.push_back( 383 ld_input_files.push_back(
384 GetHandleForSubprocess(obj_file, PP_FILEOPENFLAG_READ, 384 GetHandleForSubprocess(&obj_file, PP_FILEOPENFLAG_READ,
385 ld_channel_peer_pid_)); 385 ld_channel_peer_pid_));
386 } 386 }
387 387
388 int64_t link_start_time = NaClGetTimeOfDayMicroseconds(); 388 int64_t link_start_time = NaClGetTimeOfDayMicroseconds();
389 bool success = false; 389 bool success = false;
390 bool sent = ld_channel_filter_->Send( 390 bool sent = ld_channel_filter_->Send(
391 new PpapiMsg_PnaclTranslatorLink(ld_input_files, nexe_file, &success)); 391 new PpapiMsg_PnaclTranslatorLink(ld_input_files, nexe_file, &success));
392 if (!sent) { 392 if (!sent) {
393 TranslateFailed(PP_NACL_ERROR_PNACL_LD_INTERNAL, 393 TranslateFailed(PP_NACL_ERROR_PNACL_LD_INTERNAL,
394 "link failed: reply not received from linker."); 394 "link failed: reply not received from linker.");
(...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after
459 AbortSubprocesses(); 459 AbortSubprocesses();
460 if (translate_thread_ != NULL) 460 if (translate_thread_ != NULL)
461 NaClThreadJoin(translate_thread_.get()); 461 NaClThreadJoin(translate_thread_.get());
462 PLUGIN_PRINTF(("~PnaclTranslateThread joined\n")); 462 PLUGIN_PRINTF(("~PnaclTranslateThread joined\n"));
463 NaClCondVarDtor(&buffer_cond_); 463 NaClCondVarDtor(&buffer_cond_);
464 NaClMutexDtor(&cond_mu_); 464 NaClMutexDtor(&cond_mu_);
465 NaClMutexDtor(&subprocess_mu_); 465 NaClMutexDtor(&subprocess_mu_);
466 } 466 }
467 467
468 } // namespace plugin 468 } // namespace plugin
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698