Index: ppapi/native_client/src/trusted/plugin/pnacl_coordinator.cc |
diff --git a/ppapi/native_client/src/trusted/plugin/pnacl_coordinator.cc b/ppapi/native_client/src/trusted/plugin/pnacl_coordinator.cc |
index e94de5f05db245cfa48e92d4eb52a7face5c0628..b25be1107d40db584416bf63961b5a1bf4a73def 100644 |
--- a/ppapi/native_client/src/trusted/plugin/pnacl_coordinator.cc |
+++ b/ppapi/native_client/src/trusted/plugin/pnacl_coordinator.cc |
@@ -397,6 +397,8 @@ class PnaclLDManifest : public Manifest { |
const Manifest* extension_manifest_; |
}; |
+static int64_t start_download_time = 0; |
+ |
////////////////////////////////////////////////////////////////////// |
// The coordinator class. |
////////////////////////////////////////////////////////////////////// |
@@ -426,6 +428,8 @@ PnaclCoordinator* PnaclCoordinator::BitcodeToNative( |
resource_urls, |
resources_cb)); |
CHECK(coordinator->resources_ != NULL); |
+ |
+ start_download_time = NaClGetTimeOfDayMicroseconds(); |
coordinator->resources_->StartDownloads(); |
// ResourcesDidLoad will be invoked when all resources have been received. |
return coordinator; |
@@ -623,9 +627,81 @@ void PnaclCoordinator::TranslateFailed(const nacl::string& error_string) { |
core->CallOnMainThread(0, report_translate_finished_, PP_ERROR_FAILED); |
} |
+ |
+// DEBUGGING test junk -- to be removed before checkin and replaced |
+// with something like a test... |
+static void TestPnaclOpenFile(const nacl::string& filename, bool expect_works) { |
+ PLUGIN_PRINTF(("JAN calling get_readonly_pnacl_fd: %s\n", filename.c_str())); |
+ int fd = get_readonly_pnacl_fd(filename.c_str()); |
Mark Seaborn
2012/06/20 20:12:55
I don't think get_readonly_pnacl_fd needs to be a
|
+ const char *expect_success_msg = expect_works ? "YAY!" : "NOO!"; |
+ const char *expect_fail_msg = expect_works ? "NOO!" : "YAY!"; |
+ |
+ if (fd < 0) { |
+ PLUGIN_PRINTF(("JAN get %s failed (fd='%d') %s\n", |
+ filename.c_str(), fd, expect_fail_msg)); |
+ } else { |
+ PLUGIN_PRINTF(("JAN get %s succeeded (fd='%d') %s\n", |
+ filename.c_str(), fd, expect_success_msg)); |
+ // Try to stat the mofo. |
+ struct stat stat_buf; |
+ if (0 != fstat(fd, &stat_buf)) { |
+ PLUGIN_PRINTF(("JAN stat %s fd failed: %s\n", |
+ filename.c_str(), expect_fail_msg)); |
+ } else { |
+ PLUGIN_PRINTF(("JAN stat %s fd (size='%d') succeed: %s\n", |
+ filename.c_str(), stat_buf.st_size, expect_success_msg)); |
+ } |
+ close(fd); |
+ PLUGIN_PRINTF(("JAN got fd for %s and now closing: %d\n", |
+ filename.c_str(), fd)); |
+ } |
+} |
+ |
+static void WINAPI DoTestFileOpens(void* arg) { |
+ nacl::string sandbox_isa = GetSandboxISA(); |
+ // We should probably use FilePath.Append() to join these. |
+ TestPnaclOpenFile(sandbox_isa + nacl::string("/llc"), true); |
+ TestPnaclOpenFile(sandbox_isa + nacl::string("/ld"), true); |
+ TestPnaclOpenFile(sandbox_isa + nacl::string("/crtbegin.o"), true); |
+ |
+ // Stuff that shouldn't work. |
+ TestPnaclOpenFile("non-existent-file", false); |
+ TestPnaclOpenFile("../../chrome_shutdown_ms.txt", false); |
+ TestPnaclOpenFile("/bin/ls", false); |
+ TestPnaclOpenFile("$HOME/.bashrc", false); |
+} |
+// END DEBUGGING test junk. |
+ |
+ |
void PnaclCoordinator::ResourcesDidLoad(int32_t pp_error) { |
PLUGIN_PRINTF(("PnaclCoordinator::ResourcesDidLoad (pp_error=%" |
NACL_PRId32")\n", pp_error)); |
+ |
+ int64_t end_download_time = NaClGetTimeOfDayMicroseconds(); |
+ PLUGIN_PRINTF(("PnaclCoordinator:: url load time total=%"NACL_PRId64")\n", |
+ end_download_time - start_download_time)); |
+ |
+ // BEGIN debugging hack. |
+ // On thread accesses work... |
+ PLUGIN_PRINTF(("JAN Testing from main thread.\n")); |
+ int64_t start_download_time2 = NaClGetTimeOfDayMicroseconds(); |
+ DoTestFileOpens(NULL); |
+ int64_t end_download_time2 = NaClGetTimeOfDayMicroseconds(); |
+ PLUGIN_PRINTF(("PnaclCoordinator::fd load time total=%"NACL_PRId64")\n", |
+ end_download_time2 - start_download_time2)); |
+ |
+ // Off thread use doesn't seem to work... |
+ // PLUGIN_PRINTF(("JAN Testing from secondary thread.\n")); |
+ // static NaClThread *debugging_file_thread = new NaClThread(); |
+ // if (!NaClThreadCreateJoinable(debugging_file_thread, |
+ // DoTestFileOpens, |
+ // NULL, |
+ // 128 * 1024)) { |
+ // PLUGIN_PRINTF(("JAN Failed to creaate test thread\n")); |
+ // } |
+ PLUGIN_PRINTF(("JAN Testing all done!\n")); |
+ // END debugging. |
+ |
if (pp_error != PP_OK) { |
ReportPpapiError(pp_error, "resources failed to load."); |
return; |
@@ -736,6 +812,7 @@ void PnaclCoordinator::RunTranslate(int32_t pp_error) { |
if (fd < 0) { |
return; |
} |
+ |
pexe_wrapper_.reset(plugin_->wrapper_factory()->MakeFileDesc(fd, O_RDONLY)); |
// Invoke llc followed by ld off the main thread. This allows use of |
// blocking RPCs that would otherwise block the JavaScript main thread. |