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

Side by Side Diff: content/renderer/pepper/pepper_plugin_instance_impl.cc

Issue 707113002: Plugin Power Saver: Refactor Plugin Instance Throttling code (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@0190-plugin-power-saver-add-some-umas
Patch Set: 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 unified diff | Download patch
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "content/renderer/pepper/pepper_plugin_instance_impl.h" 5 #include "content/renderer/pepper/pepper_plugin_instance_impl.h"
6 6
7 #include "base/bind.h" 7 #include "base/bind.h"
8 #include "base/callback_helpers.h" 8 #include "base/callback_helpers.h"
9 #include "base/command_line.h"
10 #include "base/debug/trace_event.h" 9 #include "base/debug/trace_event.h"
11 #include "base/logging.h" 10 #include "base/logging.h"
12 #include "base/memory/linked_ptr.h" 11 #include "base/memory/linked_ptr.h"
13 #include "base/message_loop/message_loop.h" 12 #include "base/message_loop/message_loop.h"
14 #include "base/metrics/histogram.h"
15 #include "base/metrics/sparse_histogram.h"
16 #include "base/stl_util.h" 13 #include "base/stl_util.h"
17 #include "base/strings/stringprintf.h" 14 #include "base/strings/stringprintf.h"
18 #include "base/strings/utf_offset_string_conversions.h" 15 #include "base/strings/utf_offset_string_conversions.h"
19 #include "base/strings/utf_string_conversions.h" 16 #include "base/strings/utf_string_conversions.h"
20 #include "base/time/time.h" 17 #include "base/time/time.h"
21 #include "cc/base/latency_info_swap_promise.h" 18 #include "cc/base/latency_info_swap_promise.h"
22 #include "cc/blink/web_layer_impl.h" 19 #include "cc/blink/web_layer_impl.h"
23 #include "cc/layers/texture_layer.h" 20 #include "cc/layers/texture_layer.h"
24 #include "cc/trees/layer_tree_host.h" 21 #include "cc/trees/layer_tree_host.h"
25 #include "content/common/content_constants_internal.h" 22 #include "content/common/content_constants_internal.h"
26 #include "content/common/frame_messages.h" 23 #include "content/common/frame_messages.h"
27 #include "content/common/input/web_input_event_traits.h" 24 #include "content/common/input/web_input_event_traits.h"
28 #include "content/public/common/content_constants.h" 25 #include "content/public/common/content_constants.h"
29 #include "content/public/common/content_switches.h"
30 #include "content/public/common/page_zoom.h" 26 #include "content/public/common/page_zoom.h"
31 #include "content/public/renderer/content_renderer_client.h" 27 #include "content/public/renderer/content_renderer_client.h"
32 #include "content/renderer/gpu/render_widget_compositor.h" 28 #include "content/renderer/gpu/render_widget_compositor.h"
33 #include "content/renderer/pepper/content_decryptor_delegate.h" 29 #include "content/renderer/pepper/content_decryptor_delegate.h"
34 #include "content/renderer/pepper/event_conversion.h" 30 #include "content/renderer/pepper/event_conversion.h"
35 #include "content/renderer/pepper/fullscreen_container.h" 31 #include "content/renderer/pepper/fullscreen_container.h"
36 #include "content/renderer/pepper/gfx_conversion.h" 32 #include "content/renderer/pepper/gfx_conversion.h"
37 #include "content/renderer/pepper/host_dispatcher_wrapper.h" 33 #include "content/renderer/pepper/host_dispatcher_wrapper.h"
38 #include "content/renderer/pepper/host_globals.h" 34 #include "content/renderer/pepper/host_globals.h"
39 #include "content/renderer/pepper/message_channel.h" 35 #include "content/renderer/pepper/message_channel.h"
40 #include "content/renderer/pepper/pepper_browser_connection.h" 36 #include "content/renderer/pepper/pepper_browser_connection.h"
41 #include "content/renderer/pepper/pepper_compositor_host.h" 37 #include "content/renderer/pepper/pepper_compositor_host.h"
42 #include "content/renderer/pepper/pepper_file_ref_renderer_host.h" 38 #include "content/renderer/pepper/pepper_file_ref_renderer_host.h"
43 #include "content/renderer/pepper/pepper_graphics_2d_host.h" 39 #include "content/renderer/pepper/pepper_graphics_2d_host.h"
44 #include "content/renderer/pepper/pepper_in_process_router.h" 40 #include "content/renderer/pepper/pepper_in_process_router.h"
45 #include "content/renderer/pepper/pepper_plugin_instance_impl.h" 41 #include "content/renderer/pepper/pepper_plugin_instance_impl.h"
46 #include "content/renderer/pepper/pepper_plugin_instance_throttler.h" 42 #include "content/renderer/pepper/pepper_plugin_instance_throttler.h"
47 #include "content/renderer/pepper/pepper_try_catch.h" 43 #include "content/renderer/pepper/pepper_try_catch.h"
48 #include "content/renderer/pepper/pepper_url_loader_host.h" 44 #include "content/renderer/pepper/pepper_url_loader_host.h"
49 #include "content/renderer/pepper/plugin_module.h" 45 #include "content/renderer/pepper/plugin_module.h"
50 #include "content/renderer/pepper/plugin_object.h" 46 #include "content/renderer/pepper/plugin_object.h"
51 #include "content/renderer/pepper/plugin_power_saver_helper.h"
52 #include "content/renderer/pepper/ppapi_preferences_builder.h" 47 #include "content/renderer/pepper/ppapi_preferences_builder.h"
53 #include "content/renderer/pepper/ppb_buffer_impl.h" 48 #include "content/renderer/pepper/ppb_buffer_impl.h"
54 #include "content/renderer/pepper/ppb_graphics_3d_impl.h" 49 #include "content/renderer/pepper/ppb_graphics_3d_impl.h"
55 #include "content/renderer/pepper/ppb_image_data_impl.h" 50 #include "content/renderer/pepper/ppb_image_data_impl.h"
56 #include "content/renderer/pepper/renderer_ppapi_host_impl.h" 51 #include "content/renderer/pepper/renderer_ppapi_host_impl.h"
57 #include "content/renderer/pepper/url_request_info_util.h" 52 #include "content/renderer/pepper/url_request_info_util.h"
58 #include "content/renderer/pepper/url_response_info_util.h" 53 #include "content/renderer/pepper/url_response_info_util.h"
59 #include "content/renderer/render_frame_impl.h" 54 #include "content/renderer/render_frame_impl.h"
60 #include "content/renderer/render_thread_impl.h" 55 #include "content/renderer/render_thread_impl.h"
61 #include "content/renderer/render_view_impl.h" 56 #include "content/renderer/render_view_impl.h"
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
106 #include "third_party/WebKit/public/platform/WebGamepads.h" 101 #include "third_party/WebKit/public/platform/WebGamepads.h"
107 #include "third_party/WebKit/public/platform/WebRect.h" 102 #include "third_party/WebKit/public/platform/WebRect.h"
108 #include "third_party/WebKit/public/platform/WebString.h" 103 #include "third_party/WebKit/public/platform/WebString.h"
109 #include "third_party/WebKit/public/platform/WebURL.h" 104 #include "third_party/WebKit/public/platform/WebURL.h"
110 #include "third_party/WebKit/public/platform/WebURLError.h" 105 #include "third_party/WebKit/public/platform/WebURLError.h"
111 #include "third_party/WebKit/public/platform/WebURLRequest.h" 106 #include "third_party/WebKit/public/platform/WebURLRequest.h"
112 #include "third_party/WebKit/public/web/WebBindings.h" 107 #include "third_party/WebKit/public/web/WebBindings.h"
113 #include "third_party/WebKit/public/web/WebCompositionUnderline.h" 108 #include "third_party/WebKit/public/web/WebCompositionUnderline.h"
114 #include "third_party/WebKit/public/web/WebDataSource.h" 109 #include "third_party/WebKit/public/web/WebDataSource.h"
115 #include "third_party/WebKit/public/web/WebDocument.h" 110 #include "third_party/WebKit/public/web/WebDocument.h"
116 #include "third_party/WebKit/public/web/WebElement.h"
117 #include "third_party/WebKit/public/web/WebInputEvent.h" 111 #include "third_party/WebKit/public/web/WebInputEvent.h"
118 #include "third_party/WebKit/public/web/WebLocalFrame.h" 112 #include "third_party/WebKit/public/web/WebLocalFrame.h"
119 #include "third_party/WebKit/public/web/WebPluginContainer.h" 113 #include "third_party/WebKit/public/web/WebPluginContainer.h"
120 #include "third_party/WebKit/public/web/WebPrintParams.h" 114 #include "third_party/WebKit/public/web/WebPrintParams.h"
121 #include "third_party/WebKit/public/web/WebPrintScalingOption.h" 115 #include "third_party/WebKit/public/web/WebPrintScalingOption.h"
122 #include "third_party/WebKit/public/web/WebScopedUserGesture.h" 116 #include "third_party/WebKit/public/web/WebScopedUserGesture.h"
123 #include "third_party/WebKit/public/web/WebScriptSource.h" 117 #include "third_party/WebKit/public/web/WebScriptSource.h"
124 #include "third_party/WebKit/public/web/WebSecurityOrigin.h" 118 #include "third_party/WebKit/public/web/WebSecurityOrigin.h"
125 #include "third_party/WebKit/public/web/WebUserGestureIndicator.h" 119 #include "third_party/WebKit/public/web/WebUserGestureIndicator.h"
126 #include "third_party/WebKit/public/web/WebView.h" 120 #include "third_party/WebKit/public/web/WebView.h"
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after
180 using blink::WebURLRequest; 174 using blink::WebURLRequest;
181 using blink::WebURLResponse; 175 using blink::WebURLResponse;
182 using blink::WebUserGestureIndicator; 176 using blink::WebUserGestureIndicator;
183 using blink::WebUserGestureToken; 177 using blink::WebUserGestureToken;
184 using blink::WebView; 178 using blink::WebView;
185 179
186 namespace content { 180 namespace content {
187 181
188 namespace { 182 namespace {
189 183
190 static const int kInfiniteRatio = 99999;
191
192 #define UMA_HISTOGRAM_ASPECT_RATIO(name, width, height) \
193 UMA_HISTOGRAM_SPARSE_SLOWLY( \
194 name, \
195 (height) ? ((width) * 100) / (height) : kInfiniteRatio);
196
197 // Check PP_TextInput_Type and ui::TextInputType are kept in sync. 184 // Check PP_TextInput_Type and ui::TextInputType are kept in sync.
198 COMPILE_ASSERT(int(ui::TEXT_INPUT_TYPE_NONE) == int(PP_TEXTINPUT_TYPE_NONE), 185 COMPILE_ASSERT(int(ui::TEXT_INPUT_TYPE_NONE) == int(PP_TEXTINPUT_TYPE_NONE),
199 mismatching_enums); 186 mismatching_enums);
200 COMPILE_ASSERT(int(ui::TEXT_INPUT_TYPE_TEXT) == int(PP_TEXTINPUT_TYPE_TEXT), 187 COMPILE_ASSERT(int(ui::TEXT_INPUT_TYPE_TEXT) == int(PP_TEXTINPUT_TYPE_TEXT),
201 mismatching_enums); 188 mismatching_enums);
202 COMPILE_ASSERT(int(ui::TEXT_INPUT_TYPE_PASSWORD) == 189 COMPILE_ASSERT(int(ui::TEXT_INPUT_TYPE_PASSWORD) ==
203 int(PP_TEXTINPUT_TYPE_PASSWORD), 190 int(PP_TEXTINPUT_TYPE_PASSWORD),
204 mismatching_enums); 191 mismatching_enums);
205 COMPILE_ASSERT(int(ui::TEXT_INPUT_TYPE_SEARCH) == int(PP_TEXTINPUT_TYPE_SEARCH), 192 COMPILE_ASSERT(int(ui::TEXT_INPUT_TYPE_SEARCH) == int(PP_TEXTINPUT_TYPE_SEARCH),
206 mismatching_enums); 193 mismatching_enums);
(...skipping 185 matching lines...) Expand 10 before | Expand all | Expand 10 after
392 input_sequence); 379 input_sequence);
393 new_latency->TraceEventType(WebInputEventTraits::GetName(type)); 380 new_latency->TraceEventType(WebInputEventTraits::GetName(type));
394 if (old_latency) { 381 if (old_latency) {
395 new_latency->CopyLatencyFrom(*old_latency, 382 new_latency->CopyLatencyFrom(*old_latency,
396 ui::INPUT_EVENT_LATENCY_ORIGINAL_COMPONENT); 383 ui::INPUT_EVENT_LATENCY_ORIGINAL_COMPONENT);
397 new_latency->CopyLatencyFrom(*old_latency, 384 new_latency->CopyLatencyFrom(*old_latency,
398 ui::INPUT_EVENT_LATENCY_UI_COMPONENT); 385 ui::INPUT_EVENT_LATENCY_UI_COMPONENT);
399 } 386 }
400 } 387 }
401 388
402 // Histogram tracking prevalence of tiny Flash instances. Units in pixels.
403 enum PluginFlashTinyContentSize {
404 TINY_CONTENT_SIZE_1_1 = 0,
405 TINY_CONTENT_SIZE_5_5 = 1,
406 TINY_CONTENT_SIZE_10_10 = 2,
407 TINY_CONTENT_SIZE_LARGE = 3,
408 TINY_CONTENT_SIZE_NUM_ITEMS
409 };
410
411 // How the throttled power saver is unthrottled, if ever.
412 // These numeric values are used in UMA logs; do not change them.
413 enum PowerSaverUnthrottleMethod {
414 UNTHROTTLE_METHOD_NEVER = 0,
415 UNTHROTTLE_METHOD_BY_CLICK = 1,
416 UNTHROTTLE_METHOD_BY_WHITELIST = 2,
417 UNTHROTTLE_METHOD_NUM_ITEMS
418 };
419
420 const char kFlashClickSizeAspectRatioHistogram[] =
421 "Plugin.Flash.ClickSize.AspectRatio";
422 const char kFlashClickSizeHeightHistogram[] = "Plugin.Flash.ClickSize.Height";
423 const char kFlashClickSizeWidthHistogram[] = "Plugin.Flash.ClickSize.Width";
424 const char kFlashTinyContentSizeHistogram[] = "Plugin.Flash.TinyContentSize";
425 const char kPowerSaverUnthrottleHistogram[] = "Plugin.PowerSaver.Unthrottle";
426
427 // Record size metrics for all Flash instances.
428 void RecordFlashSizeMetric(int width, int height) {
429 PluginFlashTinyContentSize size = TINY_CONTENT_SIZE_LARGE;
430
431 if (width <= 1 && height <= 1)
432 size = TINY_CONTENT_SIZE_1_1;
433 else if (width <= 5 && height <= 5)
434 size = TINY_CONTENT_SIZE_5_5;
435 else if (width <= 10 && height <= 10)
436 size = TINY_CONTENT_SIZE_10_10;
437
438 UMA_HISTOGRAM_ENUMERATION(kFlashTinyContentSizeHistogram, size,
439 TINY_CONTENT_SIZE_NUM_ITEMS);
440 }
441
442 // Records size metrics for Flash instances that are clicked.
443 void RecordFlashClickSizeMetric(int width, int height) {
444 base::HistogramBase* width_histogram = base::LinearHistogram::FactoryGet(
445 kFlashClickSizeWidthHistogram,
446 0, // minimum width
447 500, // maximum width
448 100, // number of buckets.
449 base::HistogramBase::kUmaTargetedHistogramFlag);
450 width_histogram->Add(width);
451
452 base::HistogramBase* height_histogram = base::LinearHistogram::FactoryGet(
453 kFlashClickSizeHeightHistogram,
454 0, // minimum height
455 400, // maximum height
456 100, // number of buckets.
457 base::HistogramBase::kUmaTargetedHistogramFlag);
458 height_histogram->Add(height);
459
460 UMA_HISTOGRAM_ASPECT_RATIO(kFlashClickSizeAspectRatioHistogram, width,
461 height);
462 }
463
464 void RecordUnthrottleMethodMetric(PowerSaverUnthrottleMethod method) {
465 UMA_HISTOGRAM_ENUMERATION(kPowerSaverUnthrottleHistogram, method,
466 UNTHROTTLE_METHOD_NUM_ITEMS);
467 }
468
469 bool IsFlashPlugin(PluginModule* module) {
470 return module->name() == kFlashPluginName;
471 }
472
473 } // namespace 389 } // namespace
474 390
475 // static 391 // static
476 PepperPluginInstanceImpl* PepperPluginInstanceImpl::Create( 392 PepperPluginInstanceImpl* PepperPluginInstanceImpl::Create(
477 RenderFrameImpl* render_frame, 393 RenderFrameImpl* render_frame,
478 PluginModule* module, 394 PluginModule* module,
479 WebPluginContainer* container, 395 WebPluginContainer* container,
480 const GURL& plugin_url) { 396 const GURL& plugin_url) {
481 base::Callback<const void*(const char*)> get_plugin_interface_func = 397 base::Callback<const void*(const char*)> get_plugin_interface_func =
482 base::Bind(&PluginModule::GetPluginInterface, module); 398 base::Bind(&PluginModule::GetPluginInterface, module);
(...skipping 80 matching lines...) Expand 10 before | Expand all | Expand 10 after
563 const GURL& plugin_url) 479 const GURL& plugin_url)
564 : RenderFrameObserver(render_frame), 480 : RenderFrameObserver(render_frame),
565 render_frame_(render_frame), 481 render_frame_(render_frame),
566 module_(module), 482 module_(module),
567 instance_interface_(instance_interface), 483 instance_interface_(instance_interface),
568 pp_instance_(0), 484 pp_instance_(0),
569 container_(container), 485 container_(container),
570 layer_bound_to_fullscreen_(false), 486 layer_bound_to_fullscreen_(false),
571 layer_is_hardware_(false), 487 layer_is_hardware_(false),
572 plugin_url_(plugin_url), 488 plugin_url_(plugin_url),
573 has_been_clicked_(false),
574 power_saver_enabled_(false),
575 is_peripheral_content_(false),
576 plugin_throttled_(false),
577 full_frame_(false), 489 full_frame_(false),
578 sent_initial_did_change_view_(false), 490 sent_initial_did_change_view_(false),
579 bound_graphics_2d_platform_(NULL), 491 bound_graphics_2d_platform_(NULL),
580 bound_compositor_(NULL), 492 bound_compositor_(NULL),
581 has_webkit_focus_(false), 493 has_webkit_focus_(false),
582 has_content_area_focus_(false), 494 has_content_area_focus_(false),
583 find_identifier_(-1), 495 find_identifier_(-1),
584 plugin_find_interface_(NULL), 496 plugin_find_interface_(NULL),
585 plugin_input_event_interface_(NULL), 497 plugin_input_event_interface_(NULL),
586 plugin_mouse_lock_interface_(NULL), 498 plugin_mouse_lock_interface_(NULL),
(...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after
664 resource_creation_ = host_impl->CreateInProcessResourceCreationAPI(this); 576 resource_creation_ = host_impl->CreateInProcessResourceCreationAPI(this);
665 577
666 if (GetContentClient()->renderer() && // NULL in unit tests. 578 if (GetContentClient()->renderer() && // NULL in unit tests.
667 GetContentClient()->renderer()->IsExternalPepperPlugin(module->name())) 579 GetContentClient()->renderer()->IsExternalPepperPlugin(module->name()))
668 external_document_load_ = true; 580 external_document_load_ = true;
669 } 581 }
670 582
671 PepperPluginInstanceImpl::~PepperPluginInstanceImpl() { 583 PepperPluginInstanceImpl::~PepperPluginInstanceImpl() {
672 DCHECK(!fullscreen_container_); 584 DCHECK(!fullscreen_container_);
673 585
674 if (plugin_throttled_)
675 RecordUnthrottleMethodMetric(UNTHROTTLE_METHOD_NEVER);
676
677 // Notify all the plugin objects of deletion. This will prevent blink from 586 // Notify all the plugin objects of deletion. This will prevent blink from
678 // calling into the plugin any more. 587 // calling into the plugin any more.
679 // 588 //
680 // Swap out the set so we can delete from it (the objects will try to 589 // Swap out the set so we can delete from it (the objects will try to
681 // unregister themselves inside the delete call). 590 // unregister themselves inside the delete call).
682 PluginObjectSet plugin_object_copy; 591 PluginObjectSet plugin_object_copy;
683 live_plugin_objects_.swap(plugin_object_copy); 592 live_plugin_objects_.swap(plugin_object_copy);
684 for (PluginObjectSet::iterator i = plugin_object_copy.begin(); 593 for (PluginObjectSet::iterator i = plugin_object_copy.begin();
685 i != plugin_object_copy.end(); 594 i != plugin_object_copy.end();
686 ++i) { 595 ++i) {
(...skipping 232 matching lines...) Expand 10 before | Expand all | Expand 10 after
919 #endif 828 #endif
920 } 829 }
921 830
922 bool PepperPluginInstanceImpl::Initialize( 831 bool PepperPluginInstanceImpl::Initialize(
923 const std::vector<std::string>& arg_names, 832 const std::vector<std::string>& arg_names,
924 const std::vector<std::string>& arg_values, 833 const std::vector<std::string>& arg_values,
925 bool full_frame) { 834 bool full_frame) {
926 if (!render_frame_) 835 if (!render_frame_)
927 return false; 836 return false;
928 837
929 blink::WebRect bounds = container_->element().boundsInViewportSpace(); 838 throttler_.reset(new PepperPluginInstanceThrottler(
930 if (IsFlashPlugin(module_.get())) { 839 render_frame()->plugin_power_saver_helper(),
931 RenderThread::Get()->RecordAction( 840 container()->element().boundsInViewportSpace(), module()->name(),
932 base::UserMetricsAction("Flash.PluginInstanceCreated")); 841 plugin_url_, base::Bind(&PepperPluginInstanceImpl::SendDidChangeView,
933 RecordFlashSizeMetric(bounds.width, bounds.height); 842 weak_factory_.GetWeakPtr())));
934 }
935
936 PluginPowerSaverHelper* power_saver_helper =
937 render_frame_->plugin_power_saver_helper();
938 GURL content_origin = plugin_url_.GetOrigin();
939
940 bool cross_origin = false;
941 is_peripheral_content_ =
942 IsFlashPlugin(module_.get()) &&
943 power_saver_helper->ShouldThrottleContent(content_origin, bounds.width,
944 bounds.height, &cross_origin);
945
946 power_saver_enabled_ = is_peripheral_content_ &&
947 base::CommandLine::ForCurrentProcess()->HasSwitch(
948 switches::kEnablePluginPowerSaver);
949
950 if (is_peripheral_content_) {
951 // To collect UMAs, register peripheral content even if we don't throttle.
952 power_saver_helper->RegisterPeripheralPlugin(
953 content_origin,
954 base::Bind(
955 &PepperPluginInstanceImpl::DisablePowerSaverByRetroactiveWhitelist,
956 weak_factory_.GetWeakPtr()));
957
958 if (power_saver_enabled_) {
959 throttler_.reset(new PepperPluginInstanceThrottler(
960 base::Bind(&PepperPluginInstanceImpl::SetPluginThrottled,
961 weak_factory_.GetWeakPtr(), true /* throttled */)));
962 }
963 } else if (cross_origin) {
964 power_saver_helper->WhitelistContentOrigin(content_origin);
965 }
966 843
967 message_channel_ = MessageChannel::Create(this, &message_channel_object_); 844 message_channel_ = MessageChannel::Create(this, &message_channel_object_);
968 845
969 full_frame_ = full_frame; 846 full_frame_ = full_frame;
970 847
971 UpdateTouchEventRequest(); 848 UpdateTouchEventRequest();
972 container_->setWantsWheelEvents(IsAcceptingWheelEvents()); 849 container_->setWantsWheelEvents(IsAcceptingWheelEvents());
973 850
974 SetGPUHistogram(ppapi::Preferences(PpapiPreferencesBuilder::Build( 851 SetGPUHistogram(ppapi::Preferences(PpapiPreferencesBuilder::Build(
975 render_frame_->render_view()->webkit_preferences())), 852 render_frame_->render_view()->webkit_preferences())),
(...skipping 236 matching lines...) Expand 10 before | Expand all | Expand 10 after
1212 gfx::Rect caret(text_input_caret_); 1089 gfx::Rect caret(text_input_caret_);
1213 caret.Offset(view_data_.rect.point.x, view_data_.rect.point.y); 1090 caret.Offset(view_data_.rect.point.x, view_data_.rect.point.y);
1214 return caret; 1091 return caret;
1215 } 1092 }
1216 1093
1217 bool PepperPluginInstanceImpl::HandleInputEvent( 1094 bool PepperPluginInstanceImpl::HandleInputEvent(
1218 const blink::WebInputEvent& event, 1095 const blink::WebInputEvent& event,
1219 WebCursorInfo* cursor_info) { 1096 WebCursorInfo* cursor_info) {
1220 TRACE_EVENT0("ppapi", "PepperPluginInstanceImpl::HandleInputEvent"); 1097 TRACE_EVENT0("ppapi", "PepperPluginInstanceImpl::HandleInputEvent");
1221 1098
1222 if (event.type == blink::WebInputEvent::MouseDown && !has_been_clicked_ && 1099 if (throttler_->ConsumeInputEvent(event))
1223 IsFlashPlugin(module_.get())) { 1100 return true;
1224 has_been_clicked_ = true;
1225 blink::WebRect bounds = container_->element().boundsInViewportSpace();
1226 RecordFlashClickSizeMetric(bounds.width, bounds.height);
1227 }
1228
1229 if (event.type == blink::WebInputEvent::MouseUp && is_peripheral_content_) {
1230 is_peripheral_content_ = false;
1231 power_saver_enabled_ = false;
1232
1233 RecordUnthrottleMethodMetric(UNTHROTTLE_METHOD_BY_CLICK);
1234
1235 if (plugin_throttled_) {
1236 SetPluginThrottled(false /* throttled */);
1237 return true;
1238 }
1239 }
1240 1101
1241 if (!render_frame_) 1102 if (!render_frame_)
1242 return false; 1103 return false;
1243 if (WebInputEvent::isMouseEventType(event.type)) { 1104 if (WebInputEvent::isMouseEventType(event.type)) {
1244 render_frame_->PepperDidReceiveMouseEvent(this); 1105 render_frame_->PepperDidReceiveMouseEvent(this);
1245 } 1106 }
1246 1107
1247 // Don't dispatch input events to crashed plugins. 1108 // Don't dispatch input events to crashed plugins.
1248 if (module()->is_crashed()) 1109 if (module()->is_crashed())
1249 return false; 1110 return false;
(...skipping 532 matching lines...) Expand 10 before | Expand all | Expand 10 after
1782 view_change_weak_ptr_factory_.InvalidateWeakPtrs(); 1643 view_change_weak_ptr_factory_.InvalidateWeakPtrs();
1783 SendDidChangeView(); 1644 SendDidChangeView();
1784 } 1645 }
1785 1646
1786 void PepperPluginInstanceImpl::SendDidChangeView() { 1647 void PepperPluginInstanceImpl::SendDidChangeView() {
1787 // Don't send DidChangeView to crashed plugins. 1648 // Don't send DidChangeView to crashed plugins.
1788 if (module()->is_crashed()) 1649 if (module()->is_crashed())
1789 return; 1650 return;
1790 1651
1791 // When plugin is throttled, send ViewData indicating it's in the background. 1652 // When plugin is throttled, send ViewData indicating it's in the background.
1792 const ppapi::ViewData& view_data = 1653 const ppapi::ViewData& view_data = throttler_->is_throttled()
1793 plugin_throttled_ ? empty_view_data_ : view_data_; 1654 ? throttler_->throttled_view_data()
1655 : view_data_;
1794 1656
1795 if (view_change_weak_ptr_factory_.HasWeakPtrs() || 1657 if (view_change_weak_ptr_factory_.HasWeakPtrs() ||
1796 (sent_initial_did_change_view_ && 1658 (sent_initial_did_change_view_ &&
1797 last_sent_view_data_.Equals(view_data))) 1659 last_sent_view_data_.Equals(view_data)))
1798 return; // Nothing to update. 1660 return; // Nothing to update.
1799 1661
1800 sent_initial_did_change_view_ = true; 1662 sent_initial_did_change_view_ = true;
1801 last_sent_view_data_ = view_data; 1663 last_sent_view_data_ = view_data;
1802 ScopedPPResource resource( 1664 ScopedPPResource resource(
1803 ScopedPPResource::PassRef(), 1665 ScopedPPResource::PassRef(),
(...skipping 1609 matching lines...) Expand 10 before | Expand all | Expand 10 after
3413 } else { 3275 } else {
3414 // Running out-of-process. Initiate an IPC call to notify the plugin 3276 // Running out-of-process. Initiate an IPC call to notify the plugin
3415 // process. 3277 // process.
3416 ppapi::proxy::HostDispatcher* dispatcher = 3278 ppapi::proxy::HostDispatcher* dispatcher =
3417 ppapi::proxy::HostDispatcher::GetForInstance(pp_instance()); 3279 ppapi::proxy::HostDispatcher::GetForInstance(pp_instance());
3418 dispatcher->Send(new PpapiMsg_PPPInstance_HandleDocumentLoad( 3280 dispatcher->Send(new PpapiMsg_PPPInstance_HandleDocumentLoad(
3419 ppapi::API_ID_PPP_INSTANCE, pp_instance(), pending_host_id, data)); 3281 ppapi::API_ID_PPP_INSTANCE, pp_instance(), pending_host_id, data));
3420 } 3282 }
3421 } 3283 }
3422 3284
3423 void PepperPluginInstanceImpl::SetPluginThrottled(bool throttled) {
3424 // Do not throttle if we've already disabled power saver.
3425 if (!power_saver_enabled_ && throttled)
3426 return;
3427
3428 plugin_throttled_ = throttled;
3429 SendDidChangeView();
3430 }
3431
3432 void PepperPluginInstanceImpl::DisablePowerSaverByRetroactiveWhitelist() {
3433 if (!is_peripheral_content_)
3434 return;
3435
3436 is_peripheral_content_ = false;
3437 power_saver_enabled_ = false;
3438 SetPluginThrottled(false);
3439
3440 RecordUnthrottleMethodMetric(UNTHROTTLE_METHOD_BY_WHITELIST);
3441 }
3442
3443 } // namespace content 3285 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698