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 #ifdef _MSC_VER | 5 #ifdef _MSC_VER |
6 // Do not warn about use of std::copy with raw pointers. | 6 // Do not warn about use of std::copy with raw pointers. |
7 #pragma warning(disable : 4996) | 7 #pragma warning(disable : 4996) |
8 #endif | 8 #endif |
9 | 9 |
10 #include "native_client/src/trusted/plugin/plugin.h" | 10 #include "native_client/src/trusted/plugin/plugin.h" |
(...skipping 526 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
537 main_subprocess_.Shutdown(); | 537 main_subprocess_.Shutdown(); |
538 | 538 |
539 PLUGIN_PRINTF(("Plugin::ShutDownSubprocess (this=%p, return)\n", | 539 PLUGIN_PRINTF(("Plugin::ShutDownSubprocess (this=%p, return)\n", |
540 static_cast<void*>(this))); | 540 static_cast<void*>(this))); |
541 } | 541 } |
542 | 542 |
543 bool Plugin::LoadNaClModuleCommon(nacl::DescWrapper* wrapper, | 543 bool Plugin::LoadNaClModuleCommon(nacl::DescWrapper* wrapper, |
544 NaClSubprocess* subprocess, | 544 NaClSubprocess* subprocess, |
545 const Manifest* manifest, | 545 const Manifest* manifest, |
546 bool should_report_uma, | 546 bool should_report_uma, |
| 547 bool uses_irt, |
547 bool uses_ppapi, | 548 bool uses_ppapi, |
548 ErrorInfo* error_info, | 549 ErrorInfo* error_info, |
549 pp::CompletionCallback init_done_cb, | 550 pp::CompletionCallback init_done_cb, |
550 pp::CompletionCallback crash_cb) { | 551 pp::CompletionCallback crash_cb) { |
551 ServiceRuntime* new_service_runtime = | 552 ServiceRuntime* new_service_runtime = |
552 new ServiceRuntime(this, manifest, should_report_uma, init_done_cb, | 553 new ServiceRuntime(this, manifest, should_report_uma, init_done_cb, |
553 crash_cb); | 554 crash_cb); |
554 subprocess->set_service_runtime(new_service_runtime); | 555 subprocess->set_service_runtime(new_service_runtime); |
555 PLUGIN_PRINTF(("Plugin::LoadNaClModuleCommon (service_runtime=%p)\n", | 556 PLUGIN_PRINTF(("Plugin::LoadNaClModuleCommon (service_runtime=%p)\n", |
556 static_cast<void*>(new_service_runtime))); | 557 static_cast<void*>(new_service_runtime))); |
557 if (NULL == new_service_runtime) { | 558 if (NULL == new_service_runtime) { |
558 error_info->SetReport(ERROR_SEL_LDR_INIT, | 559 error_info->SetReport(ERROR_SEL_LDR_INIT, |
559 "sel_ldr init failure " + subprocess->description()); | 560 "sel_ldr init failure " + subprocess->description()); |
560 return false; | 561 return false; |
561 } | 562 } |
562 | 563 |
563 bool service_runtime_started = | 564 bool service_runtime_started = |
564 new_service_runtime->Start(wrapper, | 565 new_service_runtime->Start(wrapper, |
565 error_info, | 566 error_info, |
566 manifest_base_url(), | 567 manifest_base_url(), |
| 568 uses_irt, |
567 uses_ppapi, | 569 uses_ppapi, |
568 enable_dev_interfaces_, | 570 enable_dev_interfaces_, |
569 crash_cb); | 571 crash_cb); |
570 PLUGIN_PRINTF(("Plugin::LoadNaClModuleCommon (service_runtime_started=%d)\n", | 572 PLUGIN_PRINTF(("Plugin::LoadNaClModuleCommon (service_runtime_started=%d)\n", |
571 service_runtime_started)); | 573 service_runtime_started)); |
572 if (!service_runtime_started) { | 574 if (!service_runtime_started) { |
573 return false; | 575 return false; |
574 } | 576 } |
575 return true; | 577 return true; |
576 } | 578 } |
577 | 579 |
578 bool Plugin::LoadNaClModule(nacl::DescWrapper* wrapper, | 580 bool Plugin::LoadNaClModule(nacl::DescWrapper* wrapper, |
579 ErrorInfo* error_info, | 581 ErrorInfo* error_info, |
580 pp::CompletionCallback init_done_cb, | 582 pp::CompletionCallback init_done_cb, |
581 pp::CompletionCallback crash_cb) { | 583 pp::CompletionCallback crash_cb) { |
582 // Before forking a new sel_ldr process, ensure that we do not leak | 584 // Before forking a new sel_ldr process, ensure that we do not leak |
583 // the ServiceRuntime object for an existing subprocess, and that any | 585 // the ServiceRuntime object for an existing subprocess, and that any |
584 // associated listener threads do not go unjoined because if they | 586 // associated listener threads do not go unjoined because if they |
585 // outlive the Plugin object, they will not be memory safe. | 587 // outlive the Plugin object, they will not be memory safe. |
586 ShutDownSubprocesses(); | 588 ShutDownSubprocesses(); |
587 if (!LoadNaClModuleCommon(wrapper, &main_subprocess_, manifest_.get(), | 589 if (!LoadNaClModuleCommon(wrapper, &main_subprocess_, manifest_.get(), |
588 true /* should_report_uma */, | 590 true /* should_report_uma */, |
| 591 true /* uses_irt */, |
589 true /* uses_ppapi */, | 592 true /* uses_ppapi */, |
590 error_info, init_done_cb, crash_cb)) { | 593 error_info, init_done_cb, crash_cb)) { |
591 return false; | 594 return false; |
592 } | 595 } |
593 PLUGIN_PRINTF(("Plugin::LoadNaClModule (%s)\n", | 596 PLUGIN_PRINTF(("Plugin::LoadNaClModule (%s)\n", |
594 main_subprocess_.detailed_description().c_str())); | 597 main_subprocess_.detailed_description().c_str())); |
595 return true; | 598 return true; |
596 } | 599 } |
597 | 600 |
598 bool Plugin::LoadNaClModuleContinuationIntern(ErrorInfo* error_info) { | 601 bool Plugin::LoadNaClModuleContinuationIntern(ErrorInfo* error_info) { |
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
640 nacl::scoped_ptr<NaClSubprocess> nacl_subprocess( | 643 nacl::scoped_ptr<NaClSubprocess> nacl_subprocess( |
641 new NaClSubprocess("helper module", NULL, NULL)); | 644 new NaClSubprocess("helper module", NULL, NULL)); |
642 if (NULL == nacl_subprocess.get()) { | 645 if (NULL == nacl_subprocess.get()) { |
643 error_info->SetReport(ERROR_SEL_LDR_INIT, | 646 error_info->SetReport(ERROR_SEL_LDR_INIT, |
644 "unable to allocate helper subprocess."); | 647 "unable to allocate helper subprocess."); |
645 return NULL; | 648 return NULL; |
646 } | 649 } |
647 | 650 |
648 // Do not report UMA stats for translator-related nexes. | 651 // Do not report UMA stats for translator-related nexes. |
649 // TODO(sehr): define new UMA stats for translator related nexe events. | 652 // TODO(sehr): define new UMA stats for translator related nexe events. |
| 653 // NOTE: The PNaCl translator nexes are not built to use the IRT. This is |
| 654 // done to save on address space and swap space. The PNaCl translator |
| 655 // nexes also do not use PPAPI. That allows the nexes to be launched |
| 656 // off of the main thread and not block the UI. |
650 if (!LoadNaClModuleCommon(wrapper, nacl_subprocess.get(), manifest, | 657 if (!LoadNaClModuleCommon(wrapper, nacl_subprocess.get(), manifest, |
651 false /* should_report_uma */, | 658 false /* should_report_uma */, |
| 659 false /* uses_irt */, |
652 false /* uses_ppapi */, | 660 false /* uses_ppapi */, |
653 error_info, | 661 error_info, |
654 pp::BlockUntilComplete(), | 662 pp::BlockUntilComplete(), |
655 pp::BlockUntilComplete())) { | 663 pp::BlockUntilComplete())) { |
656 return NULL; | 664 return NULL; |
657 } | 665 } |
658 // We need not wait for the init_done callback. We can block | 666 // We need not wait for the init_done callback. We can block |
659 // here in StartSrpcServices, since helper NaCl modules | 667 // here in StartSrpcServices, since helper NaCl modules |
660 // are spawned from a private thread. | 668 // are spawned from a private thread. |
661 // | 669 // |
(...skipping 1266 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1928 static_cast<uint32_t>(text.size())); | 1936 static_cast<uint32_t>(text.size())); |
1929 const PPB_Console* console_interface = | 1937 const PPB_Console* console_interface = |
1930 static_cast<const PPB_Console*>( | 1938 static_cast<const PPB_Console*>( |
1931 module->GetBrowserInterface(PPB_CONSOLE_INTERFACE)); | 1939 module->GetBrowserInterface(PPB_CONSOLE_INTERFACE)); |
1932 console_interface->LogWithSource(pp_instance(), PP_LOGLEVEL_LOG, prefix, str); | 1940 console_interface->LogWithSource(pp_instance(), PP_LOGLEVEL_LOG, prefix, str); |
1933 var_interface->Release(prefix); | 1941 var_interface->Release(prefix); |
1934 var_interface->Release(str); | 1942 var_interface->Release(str); |
1935 } | 1943 } |
1936 | 1944 |
1937 } // namespace plugin | 1945 } // namespace plugin |
OLD | NEW |