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

Side by Side Diff: content/renderer/media/webmediaplayer_ms_compositor.h

Issue 1417533006: Unit test for WebMediaPlayerMS (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Kill Memory Leak Created 5 years 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 2015 The Chromium Authors. All rights reserved. 1 // Copyright 2015 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 #ifndef CONTENT_RENDERER_MEDIA_WEBMEDIAPLAYER_MS_COMPOSITOR_H 5 #ifndef CONTENT_RENDERER_MEDIA_WEBMEDIAPLAYER_MS_COMPOSITOR_H
6 #define CONTENT_RENDERER_MEDIA_WEBMEDIAPLAYER_MS_COMPOSITOR_H 6 #define CONTENT_RENDERER_MEDIA_WEBMEDIAPLAYER_MS_COMPOSITOR_H
7 7
8 #include <map> 8 #include <map>
9 #include <vector> 9 #include <vector>
10 10
11 #include "base/memory/scoped_ptr.h" 11 #include "base/memory/scoped_ptr.h"
12 #include "base/memory/weak_ptr.h" 12 #include "base/memory/weak_ptr.h"
13 #include "base/message_loop/message_loop.h" 13 #include "base/message_loop/message_loop.h"
14 #include "base/synchronization/lock.h" 14 #include "base/synchronization/lock.h"
15 #include "base/threading/thread_checker.h" 15 #include "base/threading/thread_checker.h"
16 #include "cc/layers/video_frame_provider.h" 16 #include "cc/layers/video_frame_provider.h"
17 #include "content/common/content_export.h"
17 18
18 namespace base { 19 namespace base {
19 class SingleThreadTaskRunner; 20 class SingleThreadTaskRunner;
20 } 21 }
21 22
22 namespace blink { 23 namespace blink {
23 class WebURL; 24 class WebURL;
24 } 25 }
25 26
26 namespace gfx { 27 namespace gfx {
(...skipping 10 matching lines...) Expand all
37 38
38 // This class is designed to handle the work load on compositor thread for 39 // This class is designed to handle the work load on compositor thread for
39 // WebMediaPlayerMS. It will be instantiated on the main thread, but destroyed 40 // WebMediaPlayerMS. It will be instantiated on the main thread, but destroyed
40 // on the compositor thread. 41 // on the compositor thread.
41 // 42 //
42 // WebMediaPlayerMSCompositor utilizes VideoRendererAlgorithm to store the 43 // WebMediaPlayerMSCompositor utilizes VideoRendererAlgorithm to store the
43 // incoming frames and select the best frame for rendering to maximize the 44 // incoming frames and select the best frame for rendering to maximize the
44 // smoothness, if REFERENCE_TIMEs are populated for incoming VideoFrames. 45 // smoothness, if REFERENCE_TIMEs are populated for incoming VideoFrames.
45 // Otherwise, WebMediaPlayerMSCompositor will simply store the most recent 46 // Otherwise, WebMediaPlayerMSCompositor will simply store the most recent
46 // frame, and submit it whenever asked by the compositor. 47 // frame, and submit it whenever asked by the compositor.
47 class WebMediaPlayerMSCompositor : public cc::VideoFrameProvider { 48 class CONTENT_EXPORT WebMediaPlayerMSCompositor
49 : public NON_EXPORTED_BASE(cc::VideoFrameProvider) {
48 public: 50 public:
49 // This |url| represents the media stream we are rendering. 51 // This |url| represents the media stream we are rendering. |url| is used to
52 // find out what web stream this WebMediaPlayerMSCompositor is playing, and
53 // together with flag "--disable-rtc-smoothness-algorithm" determine whether
54 // we enable algorithm or not.
50 WebMediaPlayerMSCompositor( 55 WebMediaPlayerMSCompositor(
51 const scoped_refptr<base::SingleThreadTaskRunner>& compositor_task_runner, 56 const scoped_refptr<base::SingleThreadTaskRunner>& compositor_task_runner,
52 const blink::WebURL& url, 57 const blink::WebURL& url,
53 const base::WeakPtr<WebMediaPlayerMS>& player); 58 const base::WeakPtr<WebMediaPlayerMS>& player);
59
54 ~WebMediaPlayerMSCompositor() override; 60 ~WebMediaPlayerMSCompositor() override;
55 61
56 void EnqueueFrame(const scoped_refptr<media::VideoFrame>& frame); 62 void EnqueueFrame(const scoped_refptr<media::VideoFrame>& frame);
57 63
58 // Statistical data 64 // Statistical data
59 gfx::Size GetCurrentSize(); 65 gfx::Size GetCurrentSize();
60 base::TimeDelta GetCurrentTime(); 66 base::TimeDelta GetCurrentTime();
61 size_t total_frame_count() const; 67 size_t total_frame_count() const;
62 size_t dropped_frame_count() const; 68 size_t dropped_frame_count() const;
63 69
64 // VideoFrameProvider implementation. 70 // VideoFrameProvider implementation.
65 void SetVideoFrameProviderClient( 71 void SetVideoFrameProviderClient(
66 cc::VideoFrameProvider::Client* client) override; 72 cc::VideoFrameProvider::Client* client) override;
67 bool UpdateCurrentFrame(base::TimeTicks deadline_min, 73 bool UpdateCurrentFrame(base::TimeTicks deadline_min,
68 base::TimeTicks deadline_max) override; 74 base::TimeTicks deadline_max) override;
69 bool HasCurrentFrame() override; 75 bool HasCurrentFrame() override;
70 scoped_refptr<media::VideoFrame> GetCurrentFrame() override; 76 scoped_refptr<media::VideoFrame> GetCurrentFrame() override;
71 void PutCurrentFrame() override; 77 void PutCurrentFrame() override;
72 78
73 void StartRendering(); 79 void StartRendering();
74 void StopRendering(); 80 void StopRendering();
75 void ReplaceCurrentFrameWithACopy(); 81 void ReplaceCurrentFrameWithACopy();
76 82
77 private: 83 private:
84 friend class WebMediaPlayerMSTest;
85
78 bool MapTimestampsToRenderTimeTicks( 86 bool MapTimestampsToRenderTimeTicks(
79 const std::vector<base::TimeDelta>& timestamps, 87 const std::vector<base::TimeDelta>& timestamps,
80 std::vector<base::TimeTicks>* wall_clock_times); 88 std::vector<base::TimeTicks>* wall_clock_times);
81 89
82 void SetCurrentFrame(const scoped_refptr<media::VideoFrame>& frame); 90 void SetCurrentFrame(const scoped_refptr<media::VideoFrame>& frame);
83 91
84 // For algorithm enabled case only: given the render interval, update 92 // For algorithm enabled case only: given the render interval, update
85 // current_frame_ and dropped_frame_count_. 93 // current_frame_ and dropped_frame_count_.
86 void Render(base::TimeTicks deadline_min, base::TimeTicks deadline_max); 94 void Render(base::TimeTicks deadline_min, base::TimeTicks deadline_max);
87 95
88 void StartRenderingInternal(); 96 void StartRenderingInternal();
89 void StopRenderingInternal(); 97 void StopRenderingInternal();
90 98
99 void SetAlgorithmEnabledForTesting(bool algorithm_enabled);
100
91 // Used for DCHECKs to ensure method calls executed in the correct thread. 101 // Used for DCHECKs to ensure method calls executed in the correct thread.
92 base::ThreadChecker thread_checker_; 102 base::ThreadChecker thread_checker_;
93 103
94 scoped_refptr<base::SingleThreadTaskRunner> compositor_task_runner_; 104 scoped_refptr<base::SingleThreadTaskRunner> compositor_task_runner_;
95 base::MessageLoop* main_message_loop_; 105 base::MessageLoop* main_message_loop_;
96 106
97 base::WeakPtr<WebMediaPlayerMS> player_; 107 base::WeakPtr<WebMediaPlayerMS> player_;
98 108
99 size_t serial_; 109 size_t serial_;
100 110
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
133 143
134 std::map<base::TimeDelta, base::TimeTicks> timestamps_to_clock_times_; 144 std::map<base::TimeDelta, base::TimeTicks> timestamps_to_clock_times_;
135 145
136 // |current_frame_lock_| protects |current_frame_used_by_compositor_|, 146 // |current_frame_lock_| protects |current_frame_used_by_compositor_|,
137 // |current_frame_|, and |rendering_frame_buffer_|. 147 // |current_frame_|, and |rendering_frame_buffer_|.
138 base::Lock current_frame_lock_; 148 base::Lock current_frame_lock_;
139 }; 149 };
140 } 150 }
141 151
142 #endif // CONTENT_RENDERER_MEDIA_WEBMEDIAPLAYER_MS_COMPOSITOR_H 152 #endif // CONTENT_RENDERER_MEDIA_WEBMEDIAPLAYER_MS_COMPOSITOR_H
OLDNEW
« no previous file with comments | « content/renderer/media/webmediaplayer_ms.cc ('k') | content/renderer/media/webmediaplayer_ms_compositor.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698