Index: content/renderer/pepper/plugin_instance_throttler_impl.h |
diff --git a/content/renderer/pepper/plugin_instance_throttler_impl.h b/content/renderer/pepper/plugin_instance_throttler_impl.h |
new file mode 100644 |
index 0000000000000000000000000000000000000000..14352c119b204e5b736ef010e86d6c1ef3c3a68a |
--- /dev/null |
+++ b/content/renderer/pepper/plugin_instance_throttler_impl.h |
@@ -0,0 +1,86 @@ |
+// Copyright 2014 The Chromium Authors. All rights reserved. |
+// Use of this source code is governed by a BSD-style license that can be |
+// found in the LICENSE file. |
+ |
+#ifndef CONTENT_RENDERER_PEPPER_PLUGIN_INSTANCE_THROTTLER_IMPL_H_ |
+#define CONTENT_RENDERER_PEPPER_PLUGIN_INSTANCE_THROTTLER_IMPL_H_ |
+ |
+#include "base/macros.h" |
+#include "base/memory/weak_ptr.h" |
+#include "base/observer_list.h" |
+#include "content/common/content_export.h" |
+#include "content/public/renderer/plugin_instance_throttler.h" |
+#include "ppapi/shared_impl/ppb_view_shared.h" |
+#include "third_party/WebKit/public/platform/WebRect.h" |
+ |
+namespace blink { |
+class WebInputEvent; |
+} |
+ |
+class SkBitmap; |
+ |
+namespace content { |
+ |
+class CONTENT_EXPORT PluginInstanceThrottlerImpl |
+ : public PluginInstanceThrottler { |
+ public: |
+ PluginInstanceThrottlerImpl(RenderFrame* frame, |
+ const GURL& plugin_url, |
+ bool power_saver_enabled); |
+ |
+ ~PluginInstanceThrottlerImpl() override; |
+ |
+ // PluginInstanceThrottler implementation: |
+ void AddObserver(Observer* observer) override; |
+ void RemoveObserver(Observer* observer) override; |
+ bool IsThrottled() const override; |
+ void MarkPluginEssential(PowerSaverUnthrottleMethod method) override; |
+ |
+ bool needs_representative_keyframe() const { |
+ return state_ == POWER_SAVER_ENABLED_AWAITING_KEYFRAME; |
+ } |
+ |
+ bool power_saver_enabled() const { |
+ return state_ == POWER_SAVER_ENABLED_AWAITING_KEYFRAME || |
+ state_ == POWER_SAVER_ENABLED_PLUGIN_THROTTLED; |
+ } |
+ |
+ // Called when the plugin flushes it's graphics context. Supplies the |
+ // throttler with a candidate to use as the representative keyframe. |
+ void OnImageFlush(const SkBitmap* bitmap); |
+ |
+ // Returns true if |event| was handled and shouldn't be further processed. |
+ bool ConsumeInputEvent(const blink::WebInputEvent& event); |
+ |
+ private: |
+ friend class PluginInstanceThrottlerImplTest; |
+ |
+ enum State { |
+ // Initial state if Power Saver is disabled. We are just collecting metrics. |
+ POWER_SAVER_DISABLED, |
+ // Initial state if Power Saver is enabled. Waiting for a keyframe. |
+ POWER_SAVER_ENABLED_AWAITING_KEYFRAME, |
+ // We've chosen a keyframe and the plug-in is throttled. |
+ POWER_SAVER_ENABLED_PLUGIN_THROTTLED, |
+ // Plugin instance is no longer considered peripheral. This can happen from |
+ // a user click, whitelisting, or some other reason. We can end up in this |
+ // state regardless of whether power saver is enabled. |
+ PLUGIN_INSTANCE_MARKED_ESSENTIAL |
+ }; |
+ |
+ void EngageThrottle(); |
+ |
+ State state_; |
+ |
+ // Number of consecutive interesting frames we've encountered. |
+ int consecutive_interesting_frames_; |
+ |
+ ObserverList<Observer> observer_list_; |
+ |
+ base::WeakPtrFactory<PluginInstanceThrottlerImpl> weak_factory_; |
+ |
+ DISALLOW_COPY_AND_ASSIGN(PluginInstanceThrottlerImpl); |
+}; |
+} |
+ |
+#endif // CONTENT_RENDERER_PEPPER_PLUGIN_INSTANCE_THROTTLER_IMPL_H_ |