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

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

Issue 1114623002: Plugin Power Saver: Make PPS work well with prerendered pages. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years, 7 months 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/plugin_module.h" 5 #include "content/renderer/pepper/plugin_module.h"
6 6
7 #include <set> 7 #include <set>
8 8
9 #include "base/bind.h" 9 #include "base/bind.h"
10 #include "base/command_line.h" 10 #include "base/command_line.h"
(...skipping 117 matching lines...) Expand 10 before | Expand all | Expand 10 after
128 #include "ppapi/c/private/ppb_uma_private.h" 128 #include "ppapi/c/private/ppb_uma_private.h"
129 #include "ppapi/c/private/ppb_video_destination_private.h" 129 #include "ppapi/c/private/ppb_video_destination_private.h"
130 #include "ppapi/c/private/ppb_video_source_private.h" 130 #include "ppapi/c/private/ppb_video_source_private.h"
131 #include "ppapi/c/private/ppb_x509_certificate_private.h" 131 #include "ppapi/c/private/ppb_x509_certificate_private.h"
132 #include "ppapi/c/trusted/ppb_broker_trusted.h" 132 #include "ppapi/c/trusted/ppb_broker_trusted.h"
133 #include "ppapi/c/trusted/ppb_browser_font_trusted.h" 133 #include "ppapi/c/trusted/ppb_browser_font_trusted.h"
134 #include "ppapi/c/trusted/ppb_char_set_trusted.h" 134 #include "ppapi/c/trusted/ppb_char_set_trusted.h"
135 #include "ppapi/c/trusted/ppb_file_chooser_trusted.h" 135 #include "ppapi/c/trusted/ppb_file_chooser_trusted.h"
136 #include "ppapi/c/trusted/ppb_url_loader_trusted.h" 136 #include "ppapi/c/trusted/ppb_url_loader_trusted.h"
137 #include "ppapi/shared_impl/callback_tracker.h" 137 #include "ppapi/shared_impl/callback_tracker.h"
138 #include "ppapi/shared_impl/dictionary_var.h"
138 #include "ppapi/shared_impl/ppapi_preferences.h" 139 #include "ppapi/shared_impl/ppapi_preferences.h"
139 #include "ppapi/shared_impl/ppapi_switches.h" 140 #include "ppapi/shared_impl/ppapi_switches.h"
140 #include "ppapi/shared_impl/ppb_input_event_shared.h" 141 #include "ppapi/shared_impl/ppb_input_event_shared.h"
141 #include "ppapi/shared_impl/ppb_opengles2_shared.h" 142 #include "ppapi/shared_impl/ppb_opengles2_shared.h"
142 #include "ppapi/shared_impl/ppb_var_shared.h" 143 #include "ppapi/shared_impl/ppb_var_shared.h"
143 #include "ppapi/shared_impl/time_conversion.h" 144 #include "ppapi/shared_impl/time_conversion.h"
144 #include "ppapi/thunk/enter.h" 145 #include "ppapi/thunk/enter.h"
145 #include "ppapi/thunk/ppb_graphics_2d_api.h" 146 #include "ppapi/thunk/ppb_graphics_2d_api.h"
146 #include "ppapi/thunk/thunk.h" 147 #include "ppapi/thunk/thunk.h"
147 148
(...skipping 26 matching lines...) Expand all
174 175
175 // Maintains all currently loaded plugin libs for validating PP_Module 176 // Maintains all currently loaded plugin libs for validating PP_Module
176 // identifiers. 177 // identifiers.
177 typedef std::set<PluginModule*> PluginModuleSet; 178 typedef std::set<PluginModule*> PluginModuleSet;
178 179
179 PluginModuleSet* GetLivePluginSet() { 180 PluginModuleSet* GetLivePluginSet() {
180 CR_DEFINE_STATIC_LOCAL(PluginModuleSet, live_plugin_libs, ()); 181 CR_DEFINE_STATIC_LOCAL(PluginModuleSet, live_plugin_libs, ());
181 return &live_plugin_libs; 182 return &live_plugin_libs;
182 } 183 }
183 184
185 class PowerSaverTestPluginDelegate : public PluginInstanceThrottler::Observer {
186 public:
187 explicit PowerSaverTestPluginDelegate(PluginInstanceThrottlerImpl* throttler)
188 : throttler_(throttler) {
189 throttler_->AddObserver(this);
190 PostPowerSaverStatusToJavaScript(throttler_, "initial");
191 }
192
193 virtual ~PowerSaverTestPluginDelegate() { throttler_->RemoveObserver(this); }
194
195 static void PostPowerSaverStatusToJavaScript(
196 PluginInstanceThrottlerImpl* throttler,
197 const std::string& source) {
198 if (!throttler->GetWebPlugin() || !throttler->GetWebPlugin()->instance())
199 return;
200
201 PepperPluginInstanceImpl* instance = throttler->GetWebPlugin()->instance();
202
203 // Refcounted by the returned PP_Var.
204 ppapi::DictionaryVar* dictionary = new ppapi::DictionaryVar;
205 dictionary->Set(ppapi::StringVar::StringToPPVar("source"),
206 ppapi::StringVar::StringToPPVar(source));
207 dictionary->Set(
208 ppapi::StringVar::StringToPPVar("isHiddenForPlaceholder"),
209 PP_MakeBool(PP_FromBool(throttler->IsHiddenForPlaceholder())));
210 dictionary->Set(ppapi::StringVar::StringToPPVar("isPeripheral"),
211 PP_MakeBool(PP_FromBool(throttler->power_saver_enabled())));
212 dictionary->Set(ppapi::StringVar::StringToPPVar("isThrottled"),
213 PP_MakeBool(PP_FromBool(throttler->IsThrottled())));
214
215 instance->PostMessageToJavaScript(dictionary->GetPPVar());
216 }
217
218 private:
219 void OnThrottleStateChange() override {
220 PostPowerSaverStatusToJavaScript(throttler_, "throttleStatusChange");
221 }
222
223 void OnPeripheralStateChange() override {
224 PostPowerSaverStatusToJavaScript(throttler_, "peripheralStatusChange");
225 }
226
227 void OnHiddenForPlaceholder(bool hidden) override {
228 PostPowerSaverStatusToJavaScript(throttler_,
229 "hiddenForPlaceholderStatusChange");
230 }
231
232 void OnThrottlerDestroyed() override { delete this; }
233
234 // Non-owning pointer.
235 PluginInstanceThrottlerImpl* const throttler_;
236 };
237
184 // PPB_Core -------------------------------------------------------------------- 238 // PPB_Core --------------------------------------------------------------------
185 239
186 void AddRefResource(PP_Resource resource) { 240 void AddRefResource(PP_Resource resource) {
187 PpapiGlobals::Get()->GetResourceTracker()->AddRefResource(resource); 241 PpapiGlobals::Get()->GetResourceTracker()->AddRefResource(resource);
188 } 242 }
189 243
190 void ReleaseResource(PP_Resource resource) { 244 void ReleaseResource(PP_Resource resource) {
191 PpapiGlobals::Get()->GetResourceTracker()->ReleaseResource(resource); 245 PpapiGlobals::Get()->GetResourceTracker()->ReleaseResource(resource);
192 } 246 }
193 247
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after
239 base::MessageLoop::current()->QuitNow(); 293 base::MessageLoop::current()->QuitNow();
240 } 294 }
241 295
242 uint32_t GetLiveObjectsForInstance(PP_Instance instance_id) { 296 uint32_t GetLiveObjectsForInstance(PP_Instance instance_id) {
243 return HostGlobals::Get()->GetResourceTracker()->GetLiveObjectsForInstance( 297 return HostGlobals::Get()->GetResourceTracker()->GetLiveObjectsForInstance(
244 instance_id); 298 instance_id);
245 } 299 }
246 300
247 PP_Bool IsOutOfProcess() { return PP_FALSE; } 301 PP_Bool IsOutOfProcess() { return PP_FALSE; }
248 302
249 PP_Bool IsPeripheral(PP_Instance instance_id) { 303 void PostPowerSaverStatus(PP_Instance instance_id) {
250 PepperPluginInstanceImpl* plugin_instance = 304 PepperPluginInstanceImpl* plugin_instance =
251 host_globals->GetInstance(instance_id); 305 host_globals->GetInstance(instance_id);
252 if (!plugin_instance || !plugin_instance->throttler()) 306 if (!plugin_instance || !plugin_instance->throttler())
253 return PP_FALSE; 307 return;
254 return PP_FromBool(plugin_instance->throttler()->power_saver_enabled()); 308
309 PowerSaverTestPluginDelegate::PostPowerSaverStatusToJavaScript(
310 plugin_instance->throttler(), "getPowerSaverStatusResponse");
311 }
312
313 void SubscribeToPowerSaverNotifications(PP_Instance instance_id) {
314 PepperPluginInstanceImpl* plugin_instance =
315 host_globals->GetInstance(instance_id);
316 if (!plugin_instance || !plugin_instance->throttler())
317 return;
318
319 // Manages its own lifetime.
320 new PowerSaverTestPluginDelegate(plugin_instance->throttler());
255 } 321 }
256 322
257 void SimulateInputEvent(PP_Instance instance, PP_Resource input_event) { 323 void SimulateInputEvent(PP_Instance instance, PP_Resource input_event) {
258 PepperPluginInstanceImpl* plugin_instance = 324 PepperPluginInstanceImpl* plugin_instance =
259 host_globals->GetInstance(instance); 325 host_globals->GetInstance(instance);
260 if (!plugin_instance) 326 if (!plugin_instance)
261 return; 327 return;
262 328
263 EnterResource<PPB_InputEvent_API> enter(input_event, false); 329 EnterResource<PPB_InputEvent_API> enter(input_event, false);
264 if (enter.failed()) 330 if (enter.failed())
(...skipping 30 matching lines...) Expand all
295 content::PepperPluginInstance::Get(instance)->GetIsolate()-> 361 content::PepperPluginInstance::Get(instance)->GetIsolate()->
296 RequestGarbageCollectionForTesting(v8::Isolate::kFullGarbageCollection); 362 RequestGarbageCollectionForTesting(v8::Isolate::kFullGarbageCollection);
297 } 363 }
298 364
299 const PPB_Testing_Private testing_interface = { 365 const PPB_Testing_Private testing_interface = {
300 &ReadImageData, 366 &ReadImageData,
301 &RunMessageLoop, 367 &RunMessageLoop,
302 &QuitMessageLoop, 368 &QuitMessageLoop,
303 &GetLiveObjectsForInstance, 369 &GetLiveObjectsForInstance,
304 &IsOutOfProcess, 370 &IsOutOfProcess,
305 &IsPeripheral, 371 &PostPowerSaverStatus,
372 &SubscribeToPowerSaverNotifications,
306 &SimulateInputEvent, 373 &SimulateInputEvent,
307 &GetDocumentURL, 374 &GetDocumentURL,
308 &GetLiveVars, 375 &GetLiveVars,
309 &SetMinimumArrayBufferSizeForShmem, 376 &SetMinimumArrayBufferSizeForShmem,
310 &RunV8GC}; 377 &RunV8GC};
311 378
312 // GetInterface ---------------------------------------------------------------- 379 // GetInterface ----------------------------------------------------------------
313 380
314 const void* InternalGetInterface(const char* name) { 381 const void* InternalGetInterface(const char* name) {
315 // Allow custom interface factories first stab at the GetInterface call. 382 // Allow custom interface factories first stab at the GetInterface call.
(...skipping 420 matching lines...) Expand 10 before | Expand all | Expand 10 after
736 channel_handle, 803 channel_handle,
737 peer_pid, 804 peer_pid,
738 plugin_child_id, 805 plugin_child_id,
739 false)) // is_external = false 806 false)) // is_external = false
740 return scoped_refptr<PluginModule>(); 807 return scoped_refptr<PluginModule>();
741 808
742 return module; 809 return module;
743 } 810 }
744 811
745 } // namespace content 812 } // namespace content
OLDNEW
« no previous file with comments | « content/renderer/pepper/plugin_instance_throttler_impl.cc ('k') | ppapi/api/private/ppb_testing_private.idl » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698