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

Unified Diff: components/nacl/renderer/ppb_nacl_private_impl.cc

Issue 1005173006: Add a switch for using PNaCl Subzero and use it for -O0 translation. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: stuff Created 5 years, 9 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 side-by-side diff with in-line comments
Download patch
Index: components/nacl/renderer/ppb_nacl_private_impl.cc
diff --git a/components/nacl/renderer/ppb_nacl_private_impl.cc b/components/nacl/renderer/ppb_nacl_private_impl.cc
index fb5e6dc9e356f52fef1a591e386cada970e43eaf..42203581c9f43d6b877787dcad27f536cf718c52 100644
--- a/components/nacl/renderer/ppb_nacl_private_impl.cc
+++ b/components/nacl/renderer/ppb_nacl_private_impl.cc
@@ -267,6 +267,7 @@ class ManifestServiceProxy : public ManifestServiceChannel::Delegate {
PP_PNaClOptions pnacl_options;
pnacl_options.translate = PP_FALSE;
pnacl_options.is_debug = PP_FALSE;
+ pnacl_options.use_subzero = PP_FALSE;
pnacl_options.opt_level = 2;
bool is_helper_process = process_type_ == kPNaClTranslatorProcessType;
if (!ManifestResolveKey(pp_instance_, is_helper_process, key, &url,
@@ -1058,6 +1059,15 @@ PP_Bool ManifestGetProgramURL(PP_Instance instance,
&error_info)) {
*pp_full_url = ppapi::StringVar::StringToPPVar(full_url);
*pp_uses_nonsfi_mode = PP_FromBool(uses_nonsfi_mode);
+ // Check if we should use Subzero (x86-32 / non-debugging case for now).
+ if (pnacl_options->opt_level == 0 && !pnacl_options->is_debug &&
+ strcmp(GetSandboxArch(), "x86-32") == 0 &&
+ base::CommandLine::ForCurrentProcess()->HasSwitch(
+ switches::kEnablePNaClSubzero)) {
+ pnacl_options->use_subzero = PP_TRUE;
+ // Subzero -O2 is closer to LLC -O0, so indicate -O2.
+ pnacl_options->opt_level = 2;
+ }
return PP_TRUE;
}
@@ -1099,7 +1109,8 @@ bool ManifestResolveKey(PP_Instance instance,
PP_Bool GetPNaClResourceInfo(PP_Instance instance,
PP_Var* llc_tool_name,
- PP_Var* ld_tool_name) {
+ PP_Var* ld_tool_name,
+ PP_Var* subzero_tool_name) {
static const char kFilename[] = "chrome://pnacl-translator/pnacl.json";
NexeLoadManager* load_manager = GetNexeLoadManager(instance);
DCHECK(load_manager);
@@ -1176,18 +1187,30 @@ PP_Bool GetPNaClResourceInfo(PP_Instance instance,
if (json_data.isMember("pnacl-llc-name")) {
Json::Value json_name = json_data["pnacl-llc-name"];
if (json_name.isString()) {
- std::string llc_tool_name_str = json_name.asString();
- *llc_tool_name = ppapi::StringVar::StringToPPVar(llc_tool_name_str);
+ *llc_tool_name = ppapi::StringVar::StringToPPVar(json_name.asString());
}
}
if (json_data.isMember("pnacl-ld-name")) {
Json::Value json_name = json_data["pnacl-ld-name"];
if (json_name.isString()) {
- std::string ld_tool_name_str = json_name.asString();
- *ld_tool_name = ppapi::StringVar::StringToPPVar(ld_tool_name_str);
+ *ld_tool_name = ppapi::StringVar::StringToPPVar(json_name.asString());
}
}
+
+ if (json_data.isMember("pnacl-sz-name")) {
+ Json::Value json_name = json_data["pnacl-sz-name"];
+ if (json_name.isString()) {
+ *subzero_tool_name =
+ ppapi::StringVar::StringToPPVar(json_name.asString());
+ }
+ } else {
+ // TODO(jvoung): remove fallback after one chrome release
+ // or when we bump the kMinPnaclVersion.
+ // TODO(jvoung): Just use strings instead of PP_Var!
+ *subzero_tool_name = ppapi::StringVar::StringToPPVar("pnacl-sz.nexe");
+ }
+
return PP_TRUE;
}

Powered by Google App Engine
This is Rietveld 408576698