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

Unified Diff: content/renderer/pepper/pepper_plugin_instance_impl.cc

Issue 703453004: Plugin Power Saver: Add some UMAs to test plugins in wild. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: try reupload Created 6 years, 1 month 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: content/renderer/pepper/pepper_plugin_instance_impl.cc
diff --git a/content/renderer/pepper/pepper_plugin_instance_impl.cc b/content/renderer/pepper/pepper_plugin_instance_impl.cc
index 31ad5fc8edf55520dcb39ec2f3bf96e03c52f515..4efdbb6458c958fbda35c459dc4fe58886c3ee59 100644
--- a/content/renderer/pepper/pepper_plugin_instance_impl.cc
+++ b/content/renderer/pepper/pepper_plugin_instance_impl.cc
@@ -11,6 +11,7 @@
#include "base/logging.h"
#include "base/memory/linked_ptr.h"
#include "base/message_loop/message_loop.h"
+#include "base/metrics/histogram.h"
#include "base/stl_util.h"
#include "base/strings/stringprintf.h"
#include "base/strings/utf_offset_string_conversions.h"
@@ -390,6 +391,22 @@ void InitLatencyInfo(ui::LatencyInfo* new_latency,
}
}
+// How the throttled power saver is unthrottled, if ever.
+// These numeric values are used in UMA logs; do not change them.
+enum PowerSaverUnthrottleMethod {
+ UNTHROTTLE_METHOD_NEVER = 0,
+ UNTHROTTLE_METHOD_BY_CLICK = 1,
+ UNTHROTTLE_METHOD_BY_WHITELIST = 2,
+ UNTHROTTLE_METHOD_NUM_ITEMS
+};
+
+const char kPowerSaverUnthrottleHistogram[] = "Plugin.PowerSaverUnthrottle";
+
+void RecordUnthrottleMethodMetric(PowerSaverUnthrottleMethod method) {
+ UMA_HISTOGRAM_ENUMERATION(kPowerSaverUnthrottleHistogram, method,
+ UNTHROTTLE_METHOD_NUM_ITEMS);
+}
+
bool IsFlashPlugin(PluginModule* module) {
return module->name() == kFlashPluginName;
}
@@ -495,6 +512,7 @@ PepperPluginInstanceImpl::PepperPluginInstanceImpl(
layer_is_hardware_(false),
plugin_url_(plugin_url),
power_saver_enabled_(false),
+ is_peripheral_content_(false),
plugin_throttled_(false),
full_frame_(false),
sent_initial_did_change_view_(false),
@@ -598,6 +616,9 @@ PepperPluginInstanceImpl::PepperPluginInstanceImpl(
PepperPluginInstanceImpl::~PepperPluginInstanceImpl() {
DCHECK(!fullscreen_container_);
+ if (plugin_throttled_)
+ RecordUnthrottleMethodMetric(UNTHROTTLE_METHOD_NEVER);
+
// Notify all the plugin objects of deletion. This will prevent blink from
// calling into the plugin any more.
//
@@ -856,22 +877,28 @@ bool PepperPluginInstanceImpl::Initialize(
blink::WebRect bounds = container_->element().boundsInViewportSpace();
bool cross_origin = false;
- power_saver_enabled_ =
- CommandLine::ForCurrentProcess()->HasSwitch(
- switches::kEnablePluginPowerSaver) &&
+ is_peripheral_content_ =
IsFlashPlugin(module_.get()) &&
- power_saver_helper->ShouldThrottleContent(
- content_origin, bounds.width, bounds.height, &cross_origin);
+ power_saver_helper->ShouldThrottleContent(content_origin, bounds.width,
+ bounds.height, &cross_origin);
- if (power_saver_enabled_) {
+ power_saver_enabled_ = is_peripheral_content_ &&
+ base::CommandLine::ForCurrentProcess()->HasSwitch(
+ switches::kEnablePluginPowerSaver);
+
+ if (is_peripheral_content_) {
+ // To collect UMAs, register peripheral content even if we don't throttle.
power_saver_helper->RegisterPeripheralPlugin(
content_origin,
- base::Bind(&PepperPluginInstanceImpl::DisablePowerSaverAndUnthrottle,
- weak_factory_.GetWeakPtr()));
-
- throttler_.reset(new PepperPluginInstanceThrottler(
- base::Bind(&PepperPluginInstanceImpl::SetPluginThrottled,
- weak_factory_.GetWeakPtr(), true /* throttled */)));
+ base::Bind(
+ &PepperPluginInstanceImpl::DisablePowerSaverByRetroactiveWhitelist,
+ weak_factory_.GetWeakPtr()));
+
+ if (power_saver_enabled_) {
+ throttler_.reset(new PepperPluginInstanceThrottler(
+ base::Bind(&PepperPluginInstanceImpl::SetPluginThrottled,
+ weak_factory_.GetWeakPtr(), true /* throttled */)));
+ }
} else if (cross_origin) {
power_saver_helper->WhitelistContentOrigin(content_origin);
}
@@ -1131,14 +1158,16 @@ bool PepperPluginInstanceImpl::HandleInputEvent(
WebCursorInfo* cursor_info) {
TRACE_EVENT0("ppapi", "PepperPluginInstanceImpl::HandleInputEvent");
- if (event.type == blink::WebInputEvent::MouseUp && power_saver_enabled_)
+ if (event.type == blink::WebInputEvent::MouseUp && is_peripheral_content_) {
+ is_peripheral_content_ = false;
power_saver_enabled_ = false;
- if (plugin_throttled_) {
- if (event.type == blink::WebInputEvent::MouseUp)
- SetPluginThrottled(false /* throttled */);
+ RecordUnthrottleMethodMetric(UNTHROTTLE_METHOD_BY_CLICK);
- return true;
+ if (plugin_throttled_) {
+ SetPluginThrottled(false /* throttled */);
+ return true;
+ }
}
if (!render_frame_)
@@ -3332,10 +3361,15 @@ void PepperPluginInstanceImpl::SetPluginThrottled(bool throttled) {
SendDidChangeView();
}
-void PepperPluginInstanceImpl::DisablePowerSaverAndUnthrottle() {
- DCHECK(power_saver_enabled_);
+void PepperPluginInstanceImpl::DisablePowerSaverByRetroactiveWhitelist() {
+ if (!is_peripheral_content_)
+ return;
+
+ is_peripheral_content_ = false;
power_saver_enabled_ = false;
SetPluginThrottled(false);
+
+ RecordUnthrottleMethodMetric(UNTHROTTLE_METHOD_BY_WHITELIST);
}
} // namespace content
« no previous file with comments | « content/renderer/pepper/pepper_plugin_instance_impl.h ('k') | content/renderer/pepper/plugin_power_saver_helper.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698