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

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

Issue 1608313002: PNaCl cleanup: Simplify error checking when opening temp files (Closed) Base URL: http://git.chromium.org/chromium/src.git@master
Patch Set: 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_coordinator.h" 5 #include "components/nacl/renderer/plugin/pnacl_coordinator.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 #include <sstream> 8 #include <sstream>
9 #include <utility> 9 #include <utility>
10 10
(...skipping 129 matching lines...) Expand 10 before | Expand all | Expand 10 after
140 } 140 }
141 141
142 void PnaclCoordinator::ReportNonPpapiError(PP_NaClError err_code, 142 void PnaclCoordinator::ReportNonPpapiError(PP_NaClError err_code,
143 const std::string& message) { 143 const std::string& message) {
144 ErrorInfo error_info; 144 ErrorInfo error_info;
145 error_info.SetReport(err_code, message); 145 error_info.SetReport(err_code, message);
146 plugin_->ReportLoadError(error_info); 146 plugin_->ReportLoadError(error_info);
147 ExitWithError(); 147 ExitWithError();
148 } 148 }
149 149
150 void PnaclCoordinator::ReportPpapiError(PP_NaClError err_code,
151 int32_t pp_error,
152 const std::string& message) {
153 std::stringstream ss;
154 ss << "PnaclCoordinator: " << message << " (pp_error=" << pp_error << ").";
155 ErrorInfo error_info;
156 error_info.SetReport(err_code, ss.str());
157 plugin_->ReportLoadError(error_info);
158 ExitWithError();
159 }
160
161 void PnaclCoordinator::ExitWithError() { 150 void PnaclCoordinator::ExitWithError() {
162 PLUGIN_PRINTF(("PnaclCoordinator::ExitWithError\n")); 151 PLUGIN_PRINTF(("PnaclCoordinator::ExitWithError\n"));
163 // Free all the intermediate callbacks we ever created. 152 // Free all the intermediate callbacks we ever created.
164 // Note: this doesn't *cancel* the callbacks from the factories attached 153 // Note: this doesn't *cancel* the callbacks from the factories attached
165 // to the various helper classes (e.g., pnacl_resources). Thus, those 154 // to the various helper classes (e.g., pnacl_resources). Thus, those
166 // callbacks may still run asynchronously. We let those run but ignore 155 // callbacks may still run asynchronously. We let those run but ignore
167 // any other errors they may generate so that they do not end up running 156 // any other errors they may generate so that they do not end up running
168 // translate_notify_callback_, which has already been freed. 157 // translate_notify_callback_, which has already been freed.
169 callback_factory_.CancelAll(); 158 callback_factory_.CancelAll();
170 if (!error_already_reported_) { 159 if (!error_already_reported_) {
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after
206 temp_nexe_file_->Reset(); 195 temp_nexe_file_->Reset();
207 196
208 // Report to the browser that translation finished. The browser will take 197 // Report to the browser that translation finished. The browser will take
209 // care of storing the nexe in the cache. 198 // care of storing the nexe in the cache.
210 translation_finished_reported_ = true; 199 translation_finished_reported_ = true;
211 plugin_->nacl_interface()->ReportTranslationFinished( 200 plugin_->nacl_interface()->ReportTranslationFinished(
212 plugin_->pp_instance(), PP_TRUE, pnacl_options_.opt_level, 201 plugin_->pp_instance(), PP_TRUE, pnacl_options_.opt_level,
213 pnacl_options_.use_subzero, nexe_size, pexe_size_, 202 pnacl_options_.use_subzero, nexe_size, pexe_size_,
214 translate_thread_->GetCompileTime()); 203 translate_thread_->GetCompileTime());
215 204
216 NexeReadDidOpen(PP_OK); 205 NexeReadDidOpen(true);
217 } 206 }
218 207
219 void PnaclCoordinator::NexeReadDidOpen(int32_t pp_error) { 208 void PnaclCoordinator::NexeReadDidOpen(bool success) {
220 PLUGIN_PRINTF(("PnaclCoordinator::NexeReadDidOpen (pp_error=%" 209 if (!success) {
bbudge 2016/01/20 21:25:57 Could you just test temp_nexe_file_->IsValid() her
Mark Seaborn 2016/01/20 21:49:47 Good point! Done.
221 NACL_PRId32 ")\n", pp_error)); 210 ReportNonPpapiError(PP_NACL_ERROR_PNACL_CACHE_FETCH_OTHER,
222 if (pp_error != PP_OK) { 211 "Failed to open translated nexe.");
223 if (pp_error == PP_ERROR_FILENOTFOUND) {
224 ReportPpapiError(PP_NACL_ERROR_PNACL_CACHE_FETCH_NOTFOUND,
225 pp_error,
226 "Failed to open translated nexe (not found).");
227 return;
228 }
229 if (pp_error == PP_ERROR_NOACCESS) {
230 ReportPpapiError(PP_NACL_ERROR_PNACL_CACHE_FETCH_NOACCESS,
231 pp_error,
232 "Failed to open translated nexe (no access).");
233 return;
234 }
235 ReportPpapiError(PP_NACL_ERROR_PNACL_CACHE_FETCH_OTHER,
236 pp_error,
237 "Failed to open translated nexe.");
238 return; 212 return;
239 } 213 }
240 214
241 translate_notify_callback_.Run(PP_OK); 215 translate_notify_callback_.Run(PP_OK);
242 } 216 }
243 217
244 void PnaclCoordinator::OpenBitcodeStream() { 218 void PnaclCoordinator::OpenBitcodeStream() {
245 // Even though we haven't started downloading, create the translation 219 // Even though we haven't started downloading, create the translation
246 // thread object immediately. This ensures that any pieces of the file 220 // thread object immediately. This ensures that any pieces of the file
247 // that get downloaded before the compilation thread is accepting 221 // that get downloaded before the compilation thread is accepting
(...skipping 15 matching lines...) Expand all
263 if (handle == PP_kInvalidFileHandle) { 237 if (handle == PP_kInvalidFileHandle) {
264 ReportNonPpapiError( 238 ReportNonPpapiError(
265 PP_NACL_ERROR_PNACL_CREATE_TEMP, 239 PP_NACL_ERROR_PNACL_CREATE_TEMP,
266 std::string( 240 std::string(
267 "PnaclCoordinator: Got bad temp file handle from GetNexeFd")); 241 "PnaclCoordinator: Got bad temp file handle from GetNexeFd"));
268 BitcodeStreamDidFinish(PP_ERROR_FAILED); 242 BitcodeStreamDidFinish(PP_ERROR_FAILED);
269 return; 243 return;
270 } 244 }
271 temp_nexe_file_.reset(new TempFile(plugin_, handle)); 245 temp_nexe_file_.reset(new TempFile(plugin_, handle));
272 // Open it for reading as the cached nexe file. 246 // Open it for reading as the cached nexe file.
273 NexeReadDidOpen(temp_nexe_file_->CheckValidity()); 247 NexeReadDidOpen(temp_nexe_file_->IsValid());
274 } 248 }
275 249
276 void PnaclCoordinator::BitcodeStreamCacheMiss(int64_t expected_pexe_size, 250 void PnaclCoordinator::BitcodeStreamCacheMiss(int64_t expected_pexe_size,
277 PP_FileHandle nexe_handle) { 251 PP_FileHandle nexe_handle) {
278 // IMPORTANT: Make sure that PnaclResources::StartLoad() is only 252 // IMPORTANT: Make sure that PnaclResources::StartLoad() is only
279 // called after you receive a response to a request for a .pexe file. 253 // called after you receive a response to a request for a .pexe file.
280 // 254 //
281 // The component updater's resource throttles + OnDemand update/install 255 // The component updater's resource throttles + OnDemand update/install
282 // should block the URL request until the compiler is present. Now we 256 // should block the URL request until the compiler is present. Now we
283 // can load the resources (e.g. llc and ld nexes). 257 // can load the resources (e.g. llc and ld nexes).
(...skipping 17 matching lines...) Expand all
301 "information.")); 275 "information."));
302 return; 276 return;
303 } 277 }
304 278
305 expected_pexe_size_ = expected_pexe_size; 279 expected_pexe_size_ = expected_pexe_size;
306 280
307 for (int i = 0; i < split_module_count_; i++) { 281 for (int i = 0; i < split_module_count_; i++) {
308 PP_FileHandle obj_handle = 282 PP_FileHandle obj_handle =
309 plugin_->nacl_interface()->CreateTemporaryFile(plugin_->pp_instance()); 283 plugin_->nacl_interface()->CreateTemporaryFile(plugin_->pp_instance());
310 scoped_ptr<TempFile> temp_file(new TempFile(plugin_, obj_handle)); 284 scoped_ptr<TempFile> temp_file(new TempFile(plugin_, obj_handle));
311 int32_t pp_error = temp_file->CheckValidity(); 285 if (!temp_file->IsValid()) {
312 if (pp_error != PP_OK) { 286 ReportNonPpapiError(PP_NACL_ERROR_PNACL_CREATE_TEMP,
313 ReportPpapiError(PP_NACL_ERROR_PNACL_CREATE_TEMP, 287 "Failed to open scratch object file.");
314 pp_error,
315 "Failed to open scratch object file.");
316 return; 288 return;
317 } else { 289 } else {
318 obj_files_.push_back(temp_file.release()); 290 obj_files_.push_back(temp_file.release());
319 } 291 }
320 } 292 }
321 293
322 temp_nexe_file_.reset(new TempFile(plugin_, nexe_handle)); 294 temp_nexe_file_.reset(new TempFile(plugin_, nexe_handle));
323 // Open the nexe file for connecting ld and sel_ldr. 295 // Open the nexe file for connecting ld and sel_ldr.
324 // Start translation when done with this last step of setup! 296 // Start translation when done with this last step of setup!
325 int32_t pp_error = temp_nexe_file_->CheckValidity(); 297 if (!temp_nexe_file_->IsValid()) {
326 if (pp_error != PP_OK) {
327 ReportNonPpapiError( 298 ReportNonPpapiError(
328 PP_NACL_ERROR_PNACL_CREATE_TEMP, 299 PP_NACL_ERROR_PNACL_CREATE_TEMP,
329 std::string( 300 std::string(
330 "PnaclCoordinator: Got bad temp file handle from writing nexe")); 301 "PnaclCoordinator: Got bad temp file handle from writing nexe"));
331 return; 302 return;
332 } 303 }
333 LoadCompiler(); 304 LoadCompiler();
334 } 305 }
335 306
336 void PnaclCoordinator::BitcodeStreamGotData(const void* data, int32_t length) { 307 void PnaclCoordinator::BitcodeStreamGotData(const void* data, int32_t length) {
(...skipping 146 matching lines...) Expand 10 before | Expand all | Expand 10 after
483 "PnaclCoordinator: Linker process could not be created."); 454 "PnaclCoordinator: Linker process could not be created.");
484 return; 455 return;
485 } 456 }
486 GetNaClInterface()->LogTranslateTime( 457 GetNaClInterface()->LogTranslateTime(
487 "NaCl.Perf.PNaClLoadTime.LoadLinker", 458 "NaCl.Perf.PNaClLoadTime.LoadLinker",
488 NaClGetTimeOfDayMicroseconds() - ld_load_start_time); 459 NaClGetTimeOfDayMicroseconds() - ld_load_start_time);
489 translate_thread_->RunLink(); 460 translate_thread_->RunLink();
490 } 461 }
491 462
492 } // namespace plugin 463 } // namespace plugin
OLDNEW
« no previous file with comments | « components/nacl/renderer/plugin/pnacl_coordinator.h ('k') | components/nacl/renderer/plugin/temporary_file.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698