OLD | NEW |
1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 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/nexe_load_manager.h" | 5 #include "components/nacl/renderer/nexe_load_manager.h" |
6 | 6 |
7 #include "base/command_line.h" | 7 #include "base/command_line.h" |
8 #include "base/logging.h" | 8 #include "base/logging.h" |
9 #include "base/metrics/histogram.h" | 9 #include "base/metrics/histogram.h" |
10 #include "base/strings/string_tokenizer.h" | 10 #include "base/strings/string_tokenizer.h" |
(...skipping 89 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
100 } | 100 } |
101 | 101 |
102 NexeLoadManager::~NexeLoadManager() { | 102 NexeLoadManager::~NexeLoadManager() { |
103 if (!nexe_error_reported_) { | 103 if (!nexe_error_reported_) { |
104 base::TimeDelta uptime = base::Time::Now() - ready_time_; | 104 base::TimeDelta uptime = base::Time::Now() - ready_time_; |
105 HistogramTimeLarge("NaCl.ModuleUptime.Normal", uptime.InMilliseconds()); | 105 HistogramTimeLarge("NaCl.ModuleUptime.Normal", uptime.InMilliseconds()); |
106 } | 106 } |
107 } | 107 } |
108 | 108 |
109 void NexeLoadManager::NexeFileDidOpen(int32_t pp_error, | 109 void NexeLoadManager::NexeFileDidOpen(int32_t pp_error, |
110 int32_t fd, | 110 base::PlatformFile file, |
111 int32_t http_status, | 111 int32_t http_status, |
112 int64_t nexe_bytes_read, | 112 int64_t nexe_bytes_read, |
113 const std::string& url, | 113 const std::string& url, |
114 int64_t time_since_open) { | 114 base::TimeDelta time_since_open) { |
115 // Check that we are on the main renderer thread. | 115 // Check that we are on the main renderer thread. |
116 DCHECK(content::RenderThread::Get()); | 116 DCHECK(content::RenderThread::Get()); |
117 VLOG(1) << "Plugin::NexeFileDidOpen (pp_error=" << pp_error << ")"; | 117 VLOG(1) << "Plugin::NexeFileDidOpen (pp_error=" << pp_error << ")"; |
118 VLOG(1) << "Plugin::NexeFileDidOpen (file_desc=" << fd << ")"; | |
119 HistogramHTTPStatusCode( | 118 HistogramHTTPStatusCode( |
120 is_installed_ ? "NaCl.HttpStatusCodeClass.Nexe.InstalledApp" : | 119 is_installed_ ? "NaCl.HttpStatusCodeClass.Nexe.InstalledApp" : |
121 "NaCl.HttpStatusCodeClass.Nexe.NotInstalledApp", | 120 "NaCl.HttpStatusCodeClass.Nexe.NotInstalledApp", |
122 http_status); | 121 http_status); |
123 // TODO(dmichael): fd is only used for error reporting here currently, and | 122 |
124 // the trusted Plugin is responsible for using it and closing it. | 123 if (pp_error != PP_OK || file == base::kInvalidPlatformFileValue) { |
125 // Note -1 is NACL_NO_FILE_DESC from nacl_macros.h. | |
126 if (pp_error != PP_OK || fd == -1) { | |
127 if (pp_error == PP_ERROR_ABORTED) { | 124 if (pp_error == PP_ERROR_ABORTED) { |
128 ReportLoadAbort(); | 125 ReportLoadAbort(); |
129 } else if (pp_error == PP_ERROR_NOACCESS) { | 126 } else if (pp_error == PP_ERROR_NOACCESS) { |
130 ReportLoadError(PP_NACL_ERROR_NEXE_NOACCESS_URL, | 127 ReportLoadError(PP_NACL_ERROR_NEXE_NOACCESS_URL, |
131 "access to nexe url was denied."); | 128 "access to nexe url was denied."); |
132 } else { | 129 } else { |
133 ReportLoadError(PP_NACL_ERROR_NEXE_LOAD_URL, | 130 ReportLoadError(PP_NACL_ERROR_NEXE_LOAD_URL, |
134 "could not load nexe url."); | 131 "could not load nexe url."); |
135 } | 132 } |
136 } else if (nexe_bytes_read == -1) { | 133 } else if (nexe_bytes_read == -1) { |
137 ReportLoadError(PP_NACL_ERROR_NEXE_STAT, "could not stat nexe file."); | 134 ReportLoadError(PP_NACL_ERROR_NEXE_STAT, "could not stat nexe file."); |
138 } else { | 135 } else { |
139 // TODO(dmichael): Can we avoid stashing away so much state? | 136 // TODO(dmichael): Can we avoid stashing away so much state? |
140 nexe_size_ = nexe_bytes_read; | 137 nexe_size_ = nexe_bytes_read; |
141 HistogramSizeKB("NaCl.Perf.Size.Nexe", | 138 HistogramSizeKB("NaCl.Perf.Size.Nexe", |
142 static_cast<int32_t>(nexe_size_ / 1024)); | 139 static_cast<int32_t>(nexe_size_ / 1024)); |
143 HistogramStartupTimeMedium( | 140 HistogramStartupTimeMedium( |
144 "NaCl.Perf.StartupTime.NexeDownload", | 141 "NaCl.Perf.StartupTime.NexeDownload", time_since_open, nexe_size_); |
145 base::TimeDelta::FromMilliseconds(time_since_open), | |
146 nexe_size_); | |
147 | 142 |
148 // Inform JavaScript that we successfully downloaded the nacl module. | 143 // Inform JavaScript that we successfully downloaded the nacl module. |
149 ProgressEvent progress_event(PP_NACL_EVENT_PROGRESS, url, true, nexe_size_, | 144 ProgressEvent progress_event(PP_NACL_EVENT_PROGRESS, url, true, nexe_size_, |
150 nexe_size_); | 145 nexe_size_); |
151 DispatchProgressEvent(pp_instance_, progress_event); | 146 DispatchProgressEvent(pp_instance_, progress_event); |
152 load_start_ = base::Time::Now(); | 147 load_start_ = base::Time::Now(); |
153 } | 148 } |
154 } | 149 } |
155 | 150 |
156 void NexeLoadManager::ReportLoadSuccess(const std::string& url, | 151 void NexeLoadManager::ReportLoadSuccess(const std::string& url, |
(...skipping 267 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
424 // to provide error handling. | 419 // to provide error handling. |
425 } | 420 } |
426 | 421 |
427 void NexeLoadManager::CopyCrashLogToJsConsole(const std::string& crash_log) { | 422 void NexeLoadManager::CopyCrashLogToJsConsole(const std::string& crash_log) { |
428 base::StringTokenizer t(crash_log, "\n"); | 423 base::StringTokenizer t(crash_log, "\n"); |
429 while (t.GetNext()) | 424 while (t.GetNext()) |
430 LogToConsole(t.token()); | 425 LogToConsole(t.token()); |
431 } | 426 } |
432 | 427 |
433 } // namespace nacl | 428 } // namespace nacl |
OLD | NEW |