| 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 #include "ppapi/native_client/src/trusted/plugin/pnacl_coordinator.h" | 5 #include "ppapi/native_client/src/trusted/plugin/pnacl_coordinator.h" |
| 6 | 6 |
| 7 #include <utility> | 7 #include <utility> |
| 8 #include <vector> | 8 #include <vector> |
| 9 | 9 |
| 10 #include "native_client/src/include/checked_cast.h" | 10 #include "native_client/src/include/checked_cast.h" |
| (...skipping 320 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 331 void PnaclCoordinator::BitcodeStreamCacheHit(PP_FileHandle handle) { | 331 void PnaclCoordinator::BitcodeStreamCacheHit(PP_FileHandle handle) { |
| 332 HistogramEnumerateTranslationCache(plugin_->uma_interface(), true); | 332 HistogramEnumerateTranslationCache(plugin_->uma_interface(), true); |
| 333 if (handle == PP_kInvalidFileHandle) { | 333 if (handle == PP_kInvalidFileHandle) { |
| 334 ReportNonPpapiError( | 334 ReportNonPpapiError( |
| 335 PP_NACL_ERROR_PNACL_CREATE_TEMP, | 335 PP_NACL_ERROR_PNACL_CREATE_TEMP, |
| 336 nacl::string( | 336 nacl::string( |
| 337 "PnaclCoordinator: Got bad temp file handle from GetNexeFd")); | 337 "PnaclCoordinator: Got bad temp file handle from GetNexeFd")); |
| 338 BitcodeStreamDidFinish(PP_ERROR_FAILED); | 338 BitcodeStreamDidFinish(PP_ERROR_FAILED); |
| 339 return; | 339 return; |
| 340 } | 340 } |
| 341 *temp_nexe_file_->internal_handle() = handle; | 341 temp_nexe_file_.reset(new TempFile(plugin_, handle)); |
| 342 // Open it for reading as the cached nexe file. | |
| 343 NexeReadDidOpen(temp_nexe_file_->Open(false)); | 342 NexeReadDidOpen(temp_nexe_file_->Open(false)); |
| 344 } | 343 } |
| 345 | 344 |
| 346 void PnaclCoordinator::BitcodeStreamCacheMiss(int64_t expected_pexe_size) { | 345 void PnaclCoordinator::BitcodeStreamCacheMiss(int64_t expected_pexe_size) { |
| 347 HistogramEnumerateTranslationCache(plugin_->uma_interface(), false); | 346 HistogramEnumerateTranslationCache(plugin_->uma_interface(), false); |
| 348 expected_pexe_size_ = expected_pexe_size; | 347 expected_pexe_size_ = expected_pexe_size; |
| 349 | 348 |
| 350 // Open an object file first so the translator can start writing to it | |
| 351 // during streaming translation. | |
| 352 temp_nexe_file_.reset(new TempFile(plugin_)); | |
| 353 | |
| 354 for (int i = 0; i < split_module_count_; i++) { | 349 for (int i = 0; i < split_module_count_; i++) { |
| 355 nacl::scoped_ptr<TempFile> temp_file(new TempFile(plugin_)); | 350 PP_FileHandle obj_handle = |
| 351 plugin_->nacl_interface()->CreateTemporaryFile(plugin_->pp_instance()); |
| 352 nacl::scoped_ptr<TempFile> temp_file(new TempFile(plugin_, obj_handle)); |
| 356 int32_t pp_error = temp_file->Open(true); | 353 int32_t pp_error = temp_file->Open(true); |
| 357 if (pp_error != PP_OK) { | 354 if (pp_error != PP_OK) { |
| 358 ReportPpapiError(PP_NACL_ERROR_PNACL_CREATE_TEMP, | 355 ReportPpapiError(PP_NACL_ERROR_PNACL_CREATE_TEMP, |
| 359 pp_error, | 356 pp_error, |
| 360 "Failed to open scratch object file."); | 357 "Failed to open scratch object file."); |
| 361 return; | 358 return; |
| 362 } else { | 359 } else { |
| 363 obj_files_.push_back(temp_file.release()); | 360 obj_files_.push_back(temp_file.release()); |
| 364 } | 361 } |
| 365 } | 362 } |
| 366 invalid_desc_wrapper_.reset(plugin_->wrapper_factory()->MakeInvalid()); | 363 invalid_desc_wrapper_.reset(plugin_->wrapper_factory()->MakeInvalid()); |
| 367 | 364 |
| 368 // Open the nexe file for connecting ld and sel_ldr. | 365 // Open the nexe file for connecting ld and sel_ldr. |
| 369 // Start translation when done with this last step of setup! | 366 // Start translation when done with this last step of setup! |
| 367 PP_FileHandle nexe_handle = |
| 368 plugin_->nacl_interface()->CreateTemporaryFile(plugin_->pp_instance()); |
| 369 temp_nexe_file_.reset(new TempFile(plugin_, nexe_handle)); |
| 370 RunTranslate(temp_nexe_file_->Open(true)); | 370 RunTranslate(temp_nexe_file_->Open(true)); |
| 371 } | 371 } |
| 372 | 372 |
| 373 void PnaclCoordinator::BitcodeStreamGotData(const void* data, int32_t length) { | 373 void PnaclCoordinator::BitcodeStreamGotData(const void* data, int32_t length) { |
| 374 DCHECK(translate_thread_.get()); | 374 DCHECK(translate_thread_.get()); |
| 375 | 375 |
| 376 translate_thread_->PutBytes(data, length); | 376 translate_thread_->PutBytes(data, length); |
| 377 if (data && length > 0) | 377 if (data && length > 0) |
| 378 pexe_size_ += length; | 378 pexe_size_ += length; |
| 379 } | 379 } |
| (...skipping 85 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 465 invalid_desc_wrapper_.get(), | 465 invalid_desc_wrapper_.get(), |
| 466 &error_info_, | 466 &error_info_, |
| 467 resources_.get(), | 467 resources_.get(), |
| 468 &pnacl_options_, | 468 &pnacl_options_, |
| 469 architecture_attributes_, | 469 architecture_attributes_, |
| 470 this, | 470 this, |
| 471 plugin_); | 471 plugin_); |
| 472 } | 472 } |
| 473 | 473 |
| 474 } // namespace plugin | 474 } // namespace plugin |
| OLD | NEW |