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 edb356c453c112863bae348cff5fa5a6102827b9..37bddcfe5fd461bfd8f24659fa8754418c81c89c 100644 |
| --- a/content/renderer/pepper/pepper_plugin_instance_impl.cc |
| +++ b/content/renderer/pepper/pepper_plugin_instance_impl.cc |
| @@ -38,8 +38,7 @@ |
| #include "content/renderer/pepper/pepper_file_ref_renderer_host.h" |
| #include "content/renderer/pepper/pepper_graphics_2d_host.h" |
| #include "content/renderer/pepper/pepper_in_process_router.h" |
| -#include "content/renderer/pepper/pepper_plugin_instance_impl.h" |
| -#include "content/renderer/pepper/pepper_plugin_instance_throttler.h" |
| +#include "content/renderer/pepper/pepper_plugin_instance_metrics.h" |
| #include "content/renderer/pepper/pepper_try_catch.h" |
| #include "content/renderer/pepper/pepper_url_loader_host.h" |
| #include "content/renderer/pepper/plugin_module.h" |
| @@ -80,7 +79,6 @@ |
| #include "ppapi/proxy/uma_private_resource.h" |
| #include "ppapi/proxy/url_loader_resource.h" |
| #include "ppapi/shared_impl/ppapi_permissions.h" |
| -#include "ppapi/shared_impl/ppapi_preferences.h" |
| #include "ppapi/shared_impl/ppb_gamepad_shared.h" |
| #include "ppapi/shared_impl/ppb_input_event_shared.h" |
| #include "ppapi/shared_impl/ppb_url_util_shared.h" |
| @@ -129,12 +127,6 @@ |
| #include "ui/events/keycodes/keyboard_codes_posix.h" |
| #endif |
| -#if defined(OS_WIN) |
| -#include "base/metrics/histogram.h" |
| -#include "base/win/windows_version.h" |
| -#include "skia/ext/platform_canvas.h" |
| -#endif |
| - |
| using base::StringPrintf; |
| using ppapi::InputEventData; |
| using ppapi::PpapiGlobals; |
| @@ -486,6 +478,7 @@ PepperPluginInstanceImpl::PepperPluginInstanceImpl( |
| layer_is_hardware_(false), |
| plugin_url_(plugin_url), |
| is_flash_plugin_(module->name() == kFlashPluginName), |
| + has_been_clicked_(false), |
| javascript_used_(false), |
| full_frame_(false), |
| sent_initial_did_change_view_(false), |
| @@ -622,6 +615,9 @@ PepperPluginInstanceImpl::~PepperPluginInstanceImpl() { |
| // This should be last since some of the above "instance deleted" calls will |
| // want to look up in the global map to get info off of our object. |
| HostGlobals::Get()->InstanceDeleted(pp_instance_); |
| + |
| + if (throttler_) |
| + throttler_->RemoveObserver(this); |
| } |
| // NOTE: Any of these methods that calls into the plugin needs to take into |
| @@ -798,51 +794,25 @@ void PepperPluginInstanceImpl::InstanceCrashed() { |
| UnSetAndDeleteLockTargetAdapter(); |
| } |
| -static void SetGPUHistogram(const ppapi::Preferences& prefs, |
| - const std::vector<std::string>& arg_names, |
| - const std::vector<std::string>& arg_values) { |
| -// Calculate a histogram to let us determine how likely people are to try to |
| -// run Stage3D content on machines that have it blacklisted. |
| -#if defined(OS_WIN) |
| - bool needs_gpu = false; |
| - bool is_xp = base::win::GetVersion() <= base::win::VERSION_XP; |
| - |
| - for (size_t i = 0; i < arg_names.size(); i++) { |
| - if (arg_names[i] == "wmode") { |
| - // In theory content other than Flash could have a "wmode" argument, |
| - // but that's pretty unlikely. |
| - if (arg_values[i] == "direct" || arg_values[i] == "gpu") |
| - needs_gpu = true; |
| - break; |
| - } |
| - } |
| - // 0 : No 3D content and GPU is blacklisted |
| - // 1 : No 3D content and GPU is not blacklisted |
| - // 2 : 3D content but GPU is blacklisted |
| - // 3 : 3D content and GPU is not blacklisted |
| - // 4 : No 3D content and GPU is blacklisted on XP |
| - // 5 : No 3D content and GPU is not blacklisted on XP |
| - // 6 : 3D content but GPU is blacklisted on XP |
| - // 7 : 3D content and GPU is not blacklisted on XP |
| - UMA_HISTOGRAM_ENUMERATION( |
| - "Flash.UsesGPU", is_xp * 4 + needs_gpu * 2 + prefs.is_webgl_supported, 8); |
| -#endif |
| -} |
| - |
| bool PepperPluginInstanceImpl::Initialize( |
| const std::vector<std::string>& arg_names, |
| const std::vector<std::string>& arg_values, |
| bool full_frame, |
| - RenderFrame::PluginPowerSaverMode power_saver_mode) { |
| + PluginInstanceThrottler* throttler) { |
| if (!render_frame_) |
| return false; |
| - blink::WebRect bounds = container()->element().boundsInViewportSpace(); |
| + if (is_flash_plugin_ && RenderThread::Get()) { |
| + RenderThread::Get()->RecordAction( |
| + base::UserMetricsAction("Flash.PluginInstanceCreated")); |
| + blink::WebRect bounds = container()->element().boundsInViewportSpace(); |
| + RecordFlashSizeMetric(bounds.width, bounds.height); |
| + } |
| - throttler_.reset(new PepperPluginInstanceThrottler( |
| - render_frame(), bounds, is_flash_plugin_, plugin_url_, power_saver_mode, |
| - base::Bind(&PepperPluginInstanceImpl::SendDidChangeView, |
| - weak_factory_.GetWeakPtr()))); |
| + if (throttler) { |
|
Bernhard Bauer
2015/01/13 23:29:36
If this is called with a nullptr and |throttler_|
tommycli
2015/01/14 01:45:00
Done.
|
| + throttler_.reset(throttler); |
| + throttler_->AddObserver(this); |
| + } |
| message_channel_ = MessageChannel::Create(this, &message_channel_object_); |
| @@ -1099,7 +1069,15 @@ bool PepperPluginInstanceImpl::HandleInputEvent( |
| WebCursorInfo* cursor_info) { |
| TRACE_EVENT0("ppapi", "PepperPluginInstanceImpl::HandleInputEvent"); |
| - if (throttler_->ConsumeInputEvent(event)) |
| + if (!has_been_clicked_ && is_flash_plugin_ && |
| + event.type == blink::WebInputEvent::MouseDown && |
| + (event.modifiers & blink::WebInputEvent::LeftButtonDown)) { |
| + has_been_clicked_ = true; |
| + blink::WebRect bounds = container()->element().boundsInViewportSpace(); |
| + RecordFlashClickSizeMetric(bounds.width, bounds.height); |
| + } |
| + |
| + if (throttler_ && throttler_->ConsumeInputEvent(event)) |
| return true; |
| if (!render_frame_) |
| @@ -2058,6 +2036,10 @@ bool PepperPluginInstanceImpl::PrepareTextureMailbox( |
| void PepperPluginInstanceImpl::OnDestruct() { render_frame_ = NULL; } |
| +void PepperPluginInstanceImpl::OnThrottleStateChange() { |
| + SendDidChangeView(); |
| +} |
| + |
| void PepperPluginInstanceImpl::AddLatencyInfo( |
| const std::vector<ui::LatencyInfo>& latency_info) { |
| if (render_frame_ && render_frame_->GetRenderWidget()) { |