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

Unified Diff: ppapi/native_client/src/trusted/plugin/plugin.cc

Issue 61643022: Proxy private UMA pepper interface for out-of-process and NaCl plugins. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: addressing feedback Created 7 years 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: ppapi/native_client/src/trusted/plugin/plugin.cc
diff --git a/ppapi/native_client/src/trusted/plugin/plugin.cc b/ppapi/native_client/src/trusted/plugin/plugin.cc
index f348b0fcc1e42193b21fbbf7a07f01278340333e..4a1621f8c6a9b4b0a819311b3d41bec0cde39260 100644
--- a/ppapi/native_client/src/trusted/plugin/plugin.cc
+++ b/ppapi/native_client/src/trusted/plugin/plugin.cc
@@ -34,7 +34,6 @@
#include "ppapi/c/ppb_var.h"
#include "ppapi/c/ppp_instance.h"
#include "ppapi/c/private/ppb_nacl_private.h"
-#include "ppapi/c/private/ppb_uma_private.h"
#include "ppapi/cpp/dev/url_util_dev.h"
#include "ppapi/cpp/module.h"
#include "ppapi/cpp/text_input_controller.h"
@@ -78,6 +77,13 @@ const char* const kDevAttribute = "@dev";
const char* const kChromeExtensionUriScheme = "chrome-extension";
const char* const kDataUriScheme = "data";
+const PPB_NaCl_Private* GetNaClInterface() {
+ pp::Module *module = pp::Module::Get();
+ CHECK(module);
+ return static_cast<const PPB_NaCl_Private*>(
+ module->GetBrowserInterface(PPB_NACL_PRIVATE_INTERFACE));
+}
+
bbudge 2014/01/08 19:01:49 Did you intentionally move this here? It seems bet
elijahtaylor1 2014/01/08 23:59:41 I don't know how this ended up here. Done.
// Up to 20 seconds
const int64_t kTimeSmallMin = 1; // in ms
const int64_t kTimeSmallMax = 20000; // in ms
@@ -97,153 +103,6 @@ const int64_t kSizeKBMin = 1;
const int64_t kSizeKBMax = 512*1024; // very large .nexe
const uint32_t kSizeKBBuckets = 100;
-const PPB_NaCl_Private* GetNaClInterface() {
- pp::Module *module = pp::Module::Get();
- CHECK(module);
- return static_cast<const PPB_NaCl_Private*>(
- module->GetBrowserInterface(PPB_NACL_PRIVATE_INTERFACE));
-}
-
-const PPB_UMA_Private* GetUMAInterface() {
- pp::Module *module = pp::Module::Get();
- CHECK(module);
- return static_cast<const PPB_UMA_Private*>(
- module->GetBrowserInterface(PPB_UMA_PRIVATE_INTERFACE));
-}
-
-void HistogramTimeSmall(const std::string& name, int64_t ms) {
- if (ms < 0) return;
-
- const PPB_UMA_Private* ptr = GetUMAInterface();
- if (ptr == NULL) return;
-
- ptr->HistogramCustomTimes(pp::Var(name).pp_var(),
- ms,
- kTimeSmallMin, kTimeSmallMax,
- kTimeSmallBuckets);
-}
-
-void HistogramTimeMedium(const std::string& name, int64_t ms) {
- if (ms < 0) return;
-
- const PPB_UMA_Private* ptr = GetUMAInterface();
- if (ptr == NULL) return;
-
- ptr->HistogramCustomTimes(pp::Var(name).pp_var(),
- ms,
- kTimeMediumMin, kTimeMediumMax,
- kTimeMediumBuckets);
-}
-
-void HistogramTimeLarge(const std::string& name, int64_t ms) {
- if (ms < 0) return;
-
- const PPB_UMA_Private* ptr = GetUMAInterface();
- if (ptr == NULL) return;
-
- ptr->HistogramCustomTimes(pp::Var(name).pp_var(),
- ms,
- kTimeLargeMin, kTimeLargeMax,
- kTimeLargeBuckets);
-}
-
-void HistogramSizeKB(const std::string& name, int32_t sample) {
- if (sample < 0) return;
-
- const PPB_UMA_Private* ptr = GetUMAInterface();
- if (ptr == NULL) return;
-
- ptr->HistogramCustomCounts(pp::Var(name).pp_var(),
- sample,
- kSizeKBMin, kSizeKBMax,
- kSizeKBBuckets);
-}
-
-void HistogramEnumerate(const std::string& name, int sample, int maximum,
- int out_of_range_replacement) {
- if (sample < 0 || sample >= maximum) {
- if (out_of_range_replacement < 0)
- // No replacement for bad input, abort.
- return;
- else
- // Use a specific value to signal a bad input.
- sample = out_of_range_replacement;
- }
- const PPB_UMA_Private* ptr = GetUMAInterface();
- if (ptr == NULL) return;
- ptr->HistogramEnumeration(pp::Var(name).pp_var(), sample, maximum);
-}
-
-void HistogramEnumerateOsArch(const std::string& sandbox_isa) {
- enum NaClOSArch {
- kNaClLinux32 = 0,
- kNaClLinux64,
- kNaClLinuxArm,
- kNaClMac32,
- kNaClMac64,
- kNaClMacArm,
- kNaClWin32,
- kNaClWin64,
- kNaClWinArm,
- kNaClOSArchMax
- };
-
- NaClOSArch os_arch = kNaClOSArchMax;
-#if NACL_LINUX
- os_arch = kNaClLinux32;
-#elif NACL_OSX
- os_arch = kNaClMac32;
-#elif NACL_WINDOWS
- os_arch = kNaClWin32;
-#endif
-
- if (sandbox_isa == "x86-64")
- os_arch = static_cast<NaClOSArch>(os_arch + 1);
- if (sandbox_isa == "arm")
- os_arch = static_cast<NaClOSArch>(os_arch + 2);
-
- HistogramEnumerate("NaCl.Client.OSArch", os_arch, kNaClOSArchMax, -1);
-}
-
-void HistogramEnumerateLoadStatus(PluginErrorCode error_code,
- bool is_installed) {
- HistogramEnumerate("NaCl.LoadStatus.Plugin", error_code, ERROR_MAX,
- ERROR_UNKNOWN);
-
- // Gather data to see if being installed changes load outcomes.
- const char* name = is_installed ? "NaCl.LoadStatus.Plugin.InstalledApp" :
- "NaCl.LoadStatus.Plugin.NotInstalledApp";
- HistogramEnumerate(name, error_code, ERROR_MAX,
- ERROR_UNKNOWN);
-}
-
-void HistogramEnumerateSelLdrLoadStatus(NaClErrorCode error_code,
- bool is_installed) {
- HistogramEnumerate("NaCl.LoadStatus.SelLdr", error_code, NACL_ERROR_CODE_MAX,
- LOAD_STATUS_UNKNOWN);
-
- // Gather data to see if being installed changes load outcomes.
- const char* name = is_installed ? "NaCl.LoadStatus.SelLdr.InstalledApp" :
- "NaCl.LoadStatus.SelLdr.NotInstalledApp";
- HistogramEnumerate(name, error_code, NACL_ERROR_CODE_MAX,
- LOAD_STATUS_UNKNOWN);
-}
-
-void HistogramEnumerateManifestIsDataURI(bool is_data_uri) {
- HistogramEnumerate("NaCl.Manifest.IsDataURI", is_data_uri, 2, -1);
-}
-
-void HistogramHTTPStatusCode(const std::string& name, int status) {
- // Log the status codes in rough buckets - 1XX, 2XX, etc.
- int sample = status / 100;
- // HTTP status codes only go up to 5XX, using "6" to indicate an internal
- // error.
- // Note: installed files may have "0" for a status code.
- if (status < 0 || status >= 600)
- sample = 6;
- HistogramEnumerate(name, sample, 7, 6);
-}
-
} // namespace
void Plugin::AddPropertyGet(const nacl::string& prop_name,
@@ -356,20 +215,125 @@ void Plugin::ShutDownSubprocesses() {
static_cast<void*>(this)));
}
-void Plugin::StartSelLdrOnMainThread(int32_t pp_error,
- ServiceRuntime* service_runtime,
- const SelLdrStartParams& params,
- bool* success) {
- if (pp_error != PP_OK) {
- PLUGIN_PRINTF(("Plugin::StartSelLdrOnMainThread: non-PP_OK arg "
- "-- SHOULD NOT HAPPEN\n"));
- *success = false;
- return;
+void Plugin::HistogramTimeSmall(const std::string& name,
+ int64_t ms) {
+ if (ms < 0) return;
+ uma_interface_.HistogramCustomTimes(name,
+ ms,
+ kTimeSmallMin, kTimeSmallMax,
+ kTimeSmallBuckets);
+}
+
+void Plugin::HistogramTimeMedium(const std::string& name,
+ int64_t ms) {
+ if (ms < 0) return;
+ uma_interface_.HistogramCustomTimes(name,
+ ms,
+ kTimeMediumMin, kTimeMediumMax,
+ kTimeMediumBuckets);
+}
+
+void Plugin::HistogramTimeLarge(const std::string& name,
+ int64_t ms) {
+ if (ms < 0) return;
+ uma_interface_.HistogramCustomTimes(name,
+ ms,
+ kTimeLargeMin, kTimeLargeMax,
+ kTimeLargeBuckets);
+}
+
+void Plugin::HistogramSizeKB(const std::string& name,
+ int32_t sample) {
+ if (sample < 0) return;
+ uma_interface_.HistogramCustomCounts(name,
+ sample,
+ kSizeKBMin, kSizeKBMax,
+ kSizeKBBuckets);
+}
+
+void Plugin::HistogramEnumerate(const std::string& name,
+ int sample,
+ int maximum,
+ int out_of_range_replacement) {
+ if (sample < 0 || sample >= maximum) {
+ if (out_of_range_replacement < 0)
+ // No replacement for bad input, abort.
+ return;
+ else
+ // Use a specific value to signal a bad input.
+ sample = out_of_range_replacement;
}
- *success = service_runtime->StartSelLdr(params);
- // Signal outside of StartSelLdr here, so that the write to *success
- // is done before signaling.
- service_runtime->SignalStartSelLdrDone();
+ uma_interface_.HistogramEnumeration(name, sample, maximum);
+}
+
+void Plugin::HistogramEnumerateOsArch(const std::string& sandbox_isa) {
+ enum NaClOSArch {
+ kNaClLinux32 = 0,
+ kNaClLinux64,
+ kNaClLinuxArm,
+ kNaClMac32,
+ kNaClMac64,
+ kNaClMacArm,
+ kNaClWin32,
+ kNaClWin64,
+ kNaClWinArm,
+ kNaClOSArchMax
+ };
+
+ NaClOSArch os_arch = kNaClOSArchMax;
+#if NACL_LINUX
+ os_arch = kNaClLinux32;
+#elif NACL_OSX
+ os_arch = kNaClMac32;
+#elif NACL_WINDOWS
+ os_arch = kNaClWin32;
+#endif
+
+ if (sandbox_isa == "x86-64")
+ os_arch = static_cast<NaClOSArch>(os_arch + 1);
+ if (sandbox_isa == "arm")
+ os_arch = static_cast<NaClOSArch>(os_arch + 2);
+
+ HistogramEnumerate("NaCl.Client.OSArch", os_arch, kNaClOSArchMax, -1);
+}
+
+void Plugin::HistogramEnumerateLoadStatus(PluginErrorCode error_code,
+ bool is_installed) {
+ HistogramEnumerate("NaCl.LoadStatus.Plugin", error_code, ERROR_MAX,
+ ERROR_UNKNOWN);
+
+ // Gather data to see if being installed changes load outcomes.
+ const char* name = is_installed ? "NaCl.LoadStatus.Plugin.InstalledApp" :
+ "NaCl.LoadStatus.Plugin.NotInstalledApp";
+ HistogramEnumerate(name, error_code, ERROR_MAX, ERROR_UNKNOWN);
+}
+
+void Plugin::HistogramEnumerateSelLdrLoadStatus(NaClErrorCode error_code,
+ bool is_installed) {
+ HistogramEnumerate("NaCl.LoadStatus.SelLdr", error_code,
+ NACL_ERROR_CODE_MAX, LOAD_STATUS_UNKNOWN);
+
+ // Gather data to see if being installed changes load outcomes.
+ const char* name = is_installed ? "NaCl.LoadStatus.SelLdr.InstalledApp" :
+ "NaCl.LoadStatus.SelLdr.NotInstalledApp";
+ HistogramEnumerate(name, error_code, NACL_ERROR_CODE_MAX,
+ LOAD_STATUS_UNKNOWN);
+}
+
+void Plugin::HistogramEnumerateManifestIsDataURI(bool is_data_uri) {
+ HistogramEnumerate("NaCl.Manifest.IsDataURI", is_data_uri, 2, -1);
+}
+
+void Plugin::HistogramHTTPStatusCode(const std::string& name,
+ int status) {
+ // Log the status codes in rough buckets - 1XX, 2XX, etc.
+ int sample = status / 100;
+ // HTTP status codes only go up to 5XX, using "6" to indicate an internal
+ // error.
+ // Note: installed files may have "0" for a status code.
+ if (status < 0 || status >= 600)
+ sample = 6;
+ HistogramEnumerate(name, sample, 7, 6);
}
bool Plugin::LoadNaClModuleCommon(nacl::DescWrapper* wrapper,
@@ -424,6 +388,22 @@ bool Plugin::LoadNaClModuleCommon(nacl::DescWrapper* wrapper,
return true;
}
+void Plugin::StartSelLdrOnMainThread(int32_t pp_error,
+ ServiceRuntime* service_runtime,
+ const SelLdrStartParams& params,
+ bool* success) {
+ if (pp_error != PP_OK) {
+ PLUGIN_PRINTF(("Plugin::StartSelLdrOnMainThread: non-PP_OK arg "
+ "-- SHOULD NOT HAPPEN\n"));
+ *success = false;
+ return;
+ }
+ *success = service_runtime->StartSelLdr(params);
+ // Signal outside of StartSelLdr here, so that the write to *success
+ // is done before signaling.
+ service_runtime->SignalStartSelLdrDone();
+}
+
bool Plugin::LoadNaClModule(nacl::DescWrapper* wrapper,
ErrorInfo* error_info,
bool enable_dyncode_syscalls,
@@ -701,7 +681,8 @@ Plugin::Plugin(PP_Instance pp_instance)
ready_time_(0),
nexe_size_(0),
time_of_last_progress_event_(0),
- nacl_interface_(NULL) {
+ nacl_interface_(NULL),
+ uma_interface_(this) {
PLUGIN_PRINTF(("Plugin::Plugin (this=%p, pp_instance=%"
NACL_PRId32 ")\n", static_cast<void*>(this), pp_instance));
callback_factory_.Initialize(this);
@@ -1355,7 +1336,6 @@ void Plugin::ReportLoadSuccess(LengthComputable length_computable,
}
-// TODO(ncbray): report UMA stats
void Plugin::ReportLoadError(const ErrorInfo& error_info) {
PLUGIN_PRINTF(("Plugin::ReportLoadError (error='%s')\n",
error_info.message().c_str()));

Powered by Google App Engine
This is Rietveld 408576698