Chromium Code Reviews| 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 4efdbb6458c958fbda35c459dc4fe58886c3ee59..886c38d681699cbf4903c65e3e6c5176bc90e018 100644 |
| --- a/content/renderer/pepper/pepper_plugin_instance_impl.cc |
| +++ b/content/renderer/pepper/pepper_plugin_instance_impl.cc |
| @@ -12,6 +12,7 @@ |
| #include "base/memory/linked_ptr.h" |
| #include "base/message_loop/message_loop.h" |
| #include "base/metrics/histogram.h" |
| +#include "base/metrics/sparse_histogram.h" |
| #include "base/stl_util.h" |
| #include "base/strings/stringprintf.h" |
| #include "base/strings/utf_offset_string_conversions.h" |
| @@ -186,6 +187,13 @@ namespace content { |
| namespace { |
| +static const int kInfiniteRatio = 99999; |
| + |
| +#define UMA_HISTOGRAM_ASPECT_RATIO(name, width, height) \ |
| + UMA_HISTOGRAM_SPARSE_SLOWLY( \ |
| + name, \ |
| + (height) ? ((width) * 100) / (height) : kInfiniteRatio); |
| + |
| // Check PP_TextInput_Type and ui::TextInputType are kept in sync. |
| COMPILE_ASSERT(int(ui::TEXT_INPUT_TYPE_NONE) == int(PP_TEXTINPUT_TYPE_NONE), |
| mismatching_enums); |
| @@ -391,6 +399,14 @@ void InitLatencyInfo(ui::LatencyInfo* new_latency, |
| } |
| } |
| +enum PluginFlashTinyContentSize { |
|
raymes
2014/11/10 02:54:30
You may want to make a comment about what this is
tommycli
2014/11/10 15:40:30
Done.
|
| + TINY_CONTENT_SIZE_1_1 = 0, |
| + TINY_CONTENT_SIZE_5_5 = 1, |
| + TINY_CONTENT_SIZE_10_10 = 2, |
| + TINY_CONTENT_SIZE_LARGE = 3, |
| + TINY_CONTENT_SIZE_NUM_ITEMS |
| +}; |
| + |
| // How the throttled power saver is unthrottled, if ever. |
| // These numeric values are used in UMA logs; do not change them. |
| enum PowerSaverUnthrottleMethod { |
| @@ -400,7 +416,47 @@ enum PowerSaverUnthrottleMethod { |
| UNTHROTTLE_METHOD_NUM_ITEMS |
| }; |
| -const char kPowerSaverUnthrottleHistogram[] = "Plugin.PowerSaverUnthrottle"; |
| +const char kFlashClickSizeAspectRatioHistogram[] = |
| + "Plugin.Flash.ClickSize.AspectRatio"; |
| +const char kFlashClickSizeHeightHistogram[] = "Plugin.Flash.ClickSize.Height"; |
| +const char kFlashClickSizeWidthHistogram[] = "Plugin.Flash.ClickSize.Width"; |
| +const char kFlashTinyContentSizeHistogram[] = "Plugin.Flash.TinyContentSize"; |
| +const char kPowerSaverUnthrottleHistogram[] = "Plugin.PowerSaver.Unthrottle"; |
| + |
| +void RecordFlashSizeMetric(int width, int height) { |
|
raymes
2014/11/10 02:54:30
nit: Comments for these helper functions would be
tommycli
2014/11/10 15:40:30
Done.
|
| + PluginFlashTinyContentSize size = TINY_CONTENT_SIZE_LARGE; |
| + |
| + if (width <= 1 && height <= 1) |
| + size = TINY_CONTENT_SIZE_1_1; |
| + else if (width <= 5 && height <= 5) |
| + size = TINY_CONTENT_SIZE_5_5; |
| + else if (width <= 10 && height <= 10) |
| + size = TINY_CONTENT_SIZE_10_10; |
| + |
| + UMA_HISTOGRAM_ENUMERATION(kFlashTinyContentSizeHistogram, size, |
| + TINY_CONTENT_SIZE_NUM_ITEMS); |
| +} |
| + |
| +void RecordFlashClickSizeMetric(int width, int height) { |
| + base::HistogramBase* width_histogram = base::LinearHistogram::FactoryGet( |
| + kFlashClickSizeWidthHistogram, |
| + 0, // minimum width |
| + 500, // maximum width |
| + 100, // number of buckets. |
| + base::HistogramBase::kUmaTargetedHistogramFlag); |
| + width_histogram->Add(width); |
| + |
| + base::HistogramBase* height_histogram = base::LinearHistogram::FactoryGet( |
| + kFlashClickSizeHeightHistogram, |
| + 0, // minimum height |
| + 400, // maximum height |
| + 100, // number of buckets. |
| + base::HistogramBase::kUmaTargetedHistogramFlag); |
| + height_histogram->Add(height); |
| + |
| + UMA_HISTOGRAM_ASPECT_RATIO(kFlashClickSizeAspectRatioHistogram, width, |
| + height); |
| +} |
| void RecordUnthrottleMethodMetric(PowerSaverUnthrottleMethod method) { |
| UMA_HISTOGRAM_ENUMERATION(kPowerSaverUnthrottleHistogram, method, |
| @@ -511,6 +567,7 @@ PepperPluginInstanceImpl::PepperPluginInstanceImpl( |
| layer_bound_to_fullscreen_(false), |
| layer_is_hardware_(false), |
| plugin_url_(plugin_url), |
| + has_been_clicked_(false), |
| power_saver_enabled_(false), |
| is_peripheral_content_(false), |
| plugin_throttled_(false), |
| @@ -606,11 +663,6 @@ PepperPluginInstanceImpl::PepperPluginInstanceImpl( |
| if (GetContentClient()->renderer() && // NULL in unit tests. |
| GetContentClient()->renderer()->IsExternalPepperPlugin(module->name())) |
| external_document_load_ = true; |
| - |
| - if (IsFlashPlugin(module_.get())) { |
| - RenderThread::Get()->RecordAction( |
| - base::UserMetricsAction("Flash.PluginInstanceCreated")); |
| - } |
| } |
| PepperPluginInstanceImpl::~PepperPluginInstanceImpl() { |
| @@ -871,10 +923,16 @@ bool PepperPluginInstanceImpl::Initialize( |
| if (!render_frame_) |
| return false; |
| + blink::WebRect bounds = container_->element().boundsInViewportSpace(); |
| + if (IsFlashPlugin(module_.get())) { |
| + RenderThread::Get()->RecordAction( |
| + base::UserMetricsAction("Flash.PluginInstanceCreated")); |
| + RecordFlashSizeMetric(bounds.width, bounds.height); |
| + } |
| + |
| PluginPowerSaverHelper* power_saver_helper = |
| render_frame_->plugin_power_saver_helper(); |
| GURL content_origin = plugin_url_.GetOrigin(); |
| - blink::WebRect bounds = container_->element().boundsInViewportSpace(); |
| bool cross_origin = false; |
| is_peripheral_content_ = |
| @@ -1158,6 +1216,13 @@ bool PepperPluginInstanceImpl::HandleInputEvent( |
| WebCursorInfo* cursor_info) { |
| TRACE_EVENT0("ppapi", "PepperPluginInstanceImpl::HandleInputEvent"); |
| + if (event.type == blink::WebInputEvent::MouseDown && !has_been_clicked_ && |
| + IsFlashPlugin(module_.get())) { |
| + has_been_clicked_ = true; |
| + blink::WebRect bounds = container_->element().boundsInViewportSpace(); |
| + RecordFlashClickSizeMetric(bounds.width, bounds.height); |
| + } |
| + |
| if (event.type == blink::WebInputEvent::MouseUp && is_peripheral_content_) { |
| is_peripheral_content_ = false; |
| power_saver_enabled_ = false; |