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

Unified Diff: content/renderer/media/renderer_webmediaplayer_delegate.h

Issue 1739473003: Suspend idle WebMediaPlayer instances after some time. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: NON_EXPORTED_BASE. Created 4 years, 10 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « content/content_tests.gypi ('k') | content/renderer/media/renderer_webmediaplayer_delegate.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: content/renderer/media/renderer_webmediaplayer_delegate.h
diff --git a/content/renderer/media/renderer_webmediaplayer_delegate.h b/content/renderer/media/renderer_webmediaplayer_delegate.h
index 54a5bc9913fc3815f0a1a23a976e8869b36d6b0a..2ca3d46c7652466b38b379177c0d604b31f09e93 100644
--- a/content/renderer/media/renderer_webmediaplayer_delegate.h
+++ b/content/renderer/media/renderer_webmediaplayer_delegate.h
@@ -5,9 +5,14 @@
#ifndef CONTENT_RENDERER_MEDIA_RENDERER_WEBMEDIAPLAYER_DELEGATE_H_
#define CONTENT_RENDERER_MEDIA_RENDERER_WEBMEDIAPLAYER_DELEGATE_H_
+#include <map>
+
#include "base/id_map.h"
#include "base/macros.h"
#include "base/memory/weak_ptr.h"
+#include "base/time/default_tick_clock.h"
+#include "base/timer/timer.h"
+#include "content/common/content_export.h"
#include "content/public/renderer/render_frame_observer.h"
#include "media/blink/webmediaplayer_delegate.h"
@@ -19,10 +24,11 @@ namespace media {
// An interface to allow a WebMediaPlayerImpl to communicate changes of state
// to objects that need to know.
-class RendererWebMediaPlayerDelegate
+class CONTENT_EXPORT RendererWebMediaPlayerDelegate
: public content::RenderFrameObserver,
- public WebMediaPlayerDelegate,
- public base::SupportsWeakPtr<RendererWebMediaPlayerDelegate> {
+ public NON_EXPORTED_BASE(WebMediaPlayerDelegate),
+ public NON_EXPORTED_BASE(
+ base::SupportsWeakPtr<RendererWebMediaPlayerDelegate>) {
public:
explicit RendererWebMediaPlayerDelegate(content::RenderFrame* render_frame);
~RendererWebMediaPlayerDelegate() override;
@@ -47,6 +53,15 @@ class RendererWebMediaPlayerDelegate
void WasShown() override;
bool OnMessageReceived(const IPC::Message& msg) override;
+ // Sets |idle_cleanup_enabled_| to true, zeros out |idle_cleanup_interval_|,
+ // and sets |idle_timeout_| to |idle_timeout|. A zero cleanup interval will
+ // cause the idle timer to run with each run of the message loop.
+ void EnableInstantIdleCleanupForTesting(base::TimeDelta idle_timeout,
+ base::TickClock* tick_clock);
+ bool IsIdleCleanupTimerRunningForTesting() const {
+ return idle_cleanup_timer_.IsRunning();
+ }
+
private:
void OnMediaDelegatePause(int delegate_id);
void OnMediaDelegatePlay(int delegate_id);
@@ -54,9 +69,40 @@ class RendererWebMediaPlayerDelegate
void OnMediaDelegateVolumeMultiplierUpdate(int delegate_id,
double multiplier);
+ // Adds or removes a delegate from |idle_delegate_map_|. The first insertion
+ // or last removal will start or stop |idle_cleanup_timer_| respectively.
+ void AddIdleDelegate(int delegate_id);
+ void RemoveIdleDelegate(int delegate_id);
+
+ // Runs periodically to suspend idle delegates in |idle_delegate_map_|.
+ void CleanupIdleDelegates();
+
bool has_played_media_ = false;
IDMap<Observer> id_map_;
+ // Tracks which delegates have entered an idle state. After some period of
+ // inactivity these players will be suspended to release unused resources.
+ bool idle_cleanup_running_ = false;
+ std::map<int, base::TimeTicks> idle_delegate_map_;
+ base::RepeatingTimer idle_cleanup_timer_;
+
+ // Controls whether cleanup of idle delegates is enabled or not as well as the
+ // polling interval and timeout period for delegates; overridden for testing.
+ bool idle_cleanup_enabled_ = false;
+
+ // Amount of time allowed to elapse after a delegate enters the paused before
+ // the delegate is suspended.
+ base::TimeDelta idle_timeout_;
+
+ // The polling interval used for checking the delegates to see if any have
+ // exceeded |idle_timeout_| since their last pause state.
+ base::TimeDelta idle_cleanup_interval_;
+
+ // Clock used for calculating when delegates have expired. May be overridden
+ // for testing.
+ scoped_ptr<base::DefaultTickClock> default_tick_clock_;
+ base::TickClock* tick_clock_;
+
DISALLOW_COPY_AND_ASSIGN(RendererWebMediaPlayerDelegate);
};
« no previous file with comments | « content/content_tests.gypi ('k') | content/renderer/media/renderer_webmediaplayer_delegate.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698