| 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 "ppapi/native_client/src/trusted/plugin/plugin.h" | 10 #include "ppapi/native_client/src/trusted/plugin/plugin.h" |
| (...skipping 173 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 184 "NaCl.LoadStatus.SelLdr.InstalledApp" : | 184 "NaCl.LoadStatus.SelLdr.InstalledApp" : |
| 185 "NaCl.LoadStatus.SelLdr.NotInstalledApp"; | 185 "NaCl.LoadStatus.SelLdr.NotInstalledApp"; |
| 186 HistogramEnumerate(name, error_code, NACL_ERROR_CODE_MAX, | 186 HistogramEnumerate(name, error_code, NACL_ERROR_CODE_MAX, |
| 187 LOAD_STATUS_UNKNOWN); | 187 LOAD_STATUS_UNKNOWN); |
| 188 } | 188 } |
| 189 | 189 |
| 190 void Plugin::HistogramEnumerateManifestIsDataURI(bool is_data_uri) { | 190 void Plugin::HistogramEnumerateManifestIsDataURI(bool is_data_uri) { |
| 191 HistogramEnumerate("NaCl.Manifest.IsDataURI", is_data_uri, 2, -1); | 191 HistogramEnumerate("NaCl.Manifest.IsDataURI", is_data_uri, 2, -1); |
| 192 } | 192 } |
| 193 | 193 |
| 194 void Plugin::HistogramHTTPStatusCode(const std::string& name, | 194 void Plugin::HistogramHTTPStatusCode(const std::string& name, int status) { |
| 195 int status) { | |
| 196 // Log the status codes in rough buckets - 1XX, 2XX, etc. | 195 // Log the status codes in rough buckets - 1XX, 2XX, etc. |
| 197 int sample = status / 100; | 196 int sample = status / 100; |
| 198 // HTTP status codes only go up to 5XX, using "6" to indicate an internal | 197 // HTTP status codes only go up to 5XX, using "6" to indicate an internal |
| 199 // error. | 198 // error. |
| 200 // Note: installed files may have "0" for a status code. | 199 // Note: installed files may have "0" for a status code. |
| 201 if (status < 0 || status >= 600) | 200 if (status < 0 || status >= 600) |
| 202 sample = 6; | 201 sample = 6; |
| 203 HistogramEnumerate(name, sample, 7, 6); | 202 HistogramEnumerate(name, sample, 7, 6); |
| 204 } | 203 } |
| 205 | 204 |
| (...skipping 401 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 607 void Plugin::HistogramStartupTimeMedium(const std::string& name, float dt) { | 606 void Plugin::HistogramStartupTimeMedium(const std::string& name, float dt) { |
| 608 int64_t nexe_size = nacl_interface_->GetNexeSize(pp_instance()); | 607 int64_t nexe_size = nacl_interface_->GetNexeSize(pp_instance()); |
| 609 if (nexe_size > 0) { | 608 if (nexe_size > 0) { |
| 610 float size_in_MB = static_cast<float>(nexe_size) / (1024.f * 1024.f); | 609 float size_in_MB = static_cast<float>(nexe_size) / (1024.f * 1024.f); |
| 611 HistogramTimeMedium(name, static_cast<int64_t>(dt)); | 610 HistogramTimeMedium(name, static_cast<int64_t>(dt)); |
| 612 HistogramTimeMedium(name + "PerMB", static_cast<int64_t>(dt / size_in_MB)); | 611 HistogramTimeMedium(name + "PerMB", static_cast<int64_t>(dt / size_in_MB)); |
| 613 } | 612 } |
| 614 } | 613 } |
| 615 | 614 |
| 616 void Plugin::NexeFileDidOpen(int32_t pp_error) { | 615 void Plugin::NexeFileDidOpen(int32_t pp_error) { |
| 617 PLUGIN_PRINTF(("Plugin::NexeFileDidOpen (pp_error=%" NACL_PRId32 ")\n", | |
| 618 pp_error)); | |
| 619 NaClFileInfo tmp_info(nexe_downloader_.GetFileInfo()); | 616 NaClFileInfo tmp_info(nexe_downloader_.GetFileInfo()); |
| 620 NaClFileInfoAutoCloser info(&tmp_info); | 617 NaClFileInfoAutoCloser info(&tmp_info); |
| 621 PLUGIN_PRINTF(("Plugin::NexeFileDidOpen (file_desc=%" NACL_PRId32 ")\n", | 618 |
| 622 info.get_desc())); | 619 int64_t nexe_bytes_read = -1; |
| 623 HistogramHTTPStatusCode( | 620 if (pp_error == PP_OK && info.get_desc() != NACL_NO_FILE_DESC) { |
| 624 nacl_interface_->GetIsInstalled(pp_instance()) ? | 621 struct stat stat_buf; |
| 625 "NaCl.HttpStatusCodeClass.Nexe.InstalledApp" : | 622 if (0 == fstat(info.get_desc(), &stat_buf)) |
| 626 "NaCl.HttpStatusCodeClass.Nexe.NotInstalledApp", | 623 nexe_bytes_read = stat_buf.st_size; |
| 627 nexe_downloader_.status_code()); | |
| 628 ErrorInfo error_info; | |
| 629 if (pp_error != PP_OK || info.get_desc() == NACL_NO_FILE_DESC) { | |
| 630 if (pp_error == PP_ERROR_ABORTED) { | |
| 631 ReportLoadAbort(); | |
| 632 } else if (pp_error == PP_ERROR_NOACCESS) { | |
| 633 error_info.SetReport(PP_NACL_ERROR_NEXE_NOACCESS_URL, | |
| 634 "access to nexe url was denied."); | |
| 635 ReportLoadError(error_info); | |
| 636 } else { | |
| 637 error_info.SetReport(PP_NACL_ERROR_NEXE_LOAD_URL, | |
| 638 "could not load nexe url."); | |
| 639 ReportLoadError(error_info); | |
| 640 } | |
| 641 return; | |
| 642 } | 624 } |
| 643 struct stat stat_buf; | |
| 644 if (0 != fstat(info.get_desc(), &stat_buf)) { | |
| 645 error_info.SetReport(PP_NACL_ERROR_NEXE_STAT, "could not stat nexe file."); | |
| 646 ReportLoadError(error_info); | |
| 647 return; | |
| 648 } | |
| 649 size_t nexe_bytes_read = static_cast<size_t>(stat_buf.st_size); | |
| 650 | 625 |
| 651 nacl_interface_->SetNexeSize(pp_instance(), nexe_bytes_read); | 626 nacl_interface_->NexeFileDidOpen(pp_instance(), |
| 652 HistogramSizeKB("NaCl.Perf.Size.Nexe", | 627 pp_error, |
| 653 static_cast<int32_t>(nexe_bytes_read / 1024)); | 628 info.get_desc(), |
| 629 nexe_downloader_.status_code(), |
| 630 nexe_bytes_read, |
| 631 nexe_downloader_.url().c_str()); |
| 654 HistogramStartupTimeMedium( | 632 HistogramStartupTimeMedium( |
| 655 "NaCl.Perf.StartupTime.NexeDownload", | 633 "NaCl.Perf.StartupTime.NexeDownload", |
| 656 static_cast<float>(nexe_downloader_.TimeSinceOpenMilliseconds())); | 634 static_cast<float>(nexe_downloader_.TimeSinceOpenMilliseconds())); |
| 657 | 635 |
| 658 // Inform JavaScript that we successfully downloaded the nacl module. | |
| 659 EnqueueProgressEvent(PP_NACL_EVENT_PROGRESS, | |
| 660 nexe_downloader_.url(), | |
| 661 LENGTH_IS_COMPUTABLE, | |
| 662 nexe_bytes_read, | |
| 663 nexe_bytes_read); | |
| 664 | |
| 665 load_start_ = NaClGetTimeOfDayMicroseconds(); | 636 load_start_ = NaClGetTimeOfDayMicroseconds(); |
| 666 nacl::scoped_ptr<nacl::DescWrapper> | 637 nacl::scoped_ptr<nacl::DescWrapper> |
| 667 wrapper(wrapper_factory()->MakeFileDesc(info.Release().desc, O_RDONLY)); | 638 wrapper(wrapper_factory()->MakeFileDesc(info.Release().desc, O_RDONLY)); |
| 668 NaClLog(4, "NexeFileDidOpen: invoking LoadNaClModule\n"); | 639 NaClLog(4, "NexeFileDidOpen: invoking LoadNaClModule\n"); |
| 669 LoadNaClModule( | 640 LoadNaClModule( |
| 670 wrapper.release(), | 641 wrapper.release(), |
| 671 uses_nonsfi_mode_, | 642 uses_nonsfi_mode_, |
| 672 true, /* enable_dyncode_syscalls */ | 643 true, /* enable_dyncode_syscalls */ |
| 673 true, /* enable_exception_handling */ | 644 true, /* enable_exception_handling */ |
| 674 false, /* enable_crash_throttling */ | 645 false, /* enable_crash_throttling */ |
| (...skipping 551 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1226 | 1197 |
| 1227 void Plugin::SetExitStatusOnMainThread(int32_t pp_error, | 1198 void Plugin::SetExitStatusOnMainThread(int32_t pp_error, |
| 1228 int exit_status) { | 1199 int exit_status) { |
| 1229 DCHECK(pp::Module::Get()->core()->IsMainThread()); | 1200 DCHECK(pp::Module::Get()->core()->IsMainThread()); |
| 1230 DCHECK(nacl_interface_); | 1201 DCHECK(nacl_interface_); |
| 1231 nacl_interface_->SetExitStatus(pp_instance(), exit_status); | 1202 nacl_interface_->SetExitStatus(pp_instance(), exit_status); |
| 1232 } | 1203 } |
| 1233 | 1204 |
| 1234 | 1205 |
| 1235 } // namespace plugin | 1206 } // namespace plugin |
| OLD | NEW |