Index: trunk/src/content/renderer/media/webmediaplayer_impl.cc |
=================================================================== |
--- trunk/src/content/renderer/media/webmediaplayer_impl.cc (revision 266950) |
+++ trunk/src/content/renderer/media/webmediaplayer_impl.cc (working copy) |
@@ -171,14 +171,12 @@ |
supports_save_(true), |
starting_(false), |
chunk_demuxer_(NULL), |
- // Threaded compositing isn't enabled universally yet. |
- compositor_task_runner_( |
- RenderThreadImpl::current()->compositor_message_loop_proxy() |
- ? RenderThreadImpl::current()->compositor_message_loop_proxy() |
- : base::MessageLoopProxy::current()), |
- compositor_(new VideoFrameCompositor( |
+ compositor_( // Threaded compositing isn't enabled universally yet. |
+ (RenderThreadImpl::current()->compositor_message_loop_proxy() |
+ ? RenderThreadImpl::current()->compositor_message_loop_proxy() |
+ : base::MessageLoopProxy::current()), |
BIND_TO_RENDER_LOOP(&WebMediaPlayerImpl::OnNaturalSizeChanged), |
- BIND_TO_RENDER_LOOP(&WebMediaPlayerImpl::OnOpacityChanged))), |
+ BIND_TO_RENDER_LOOP(&WebMediaPlayerImpl::OnOpacityChanged)), |
text_track_index_(0), |
web_cdm_(NULL) { |
media_log_->AddEvent( |
@@ -234,8 +232,6 @@ |
base::Bind(&base::WaitableEvent::Signal, base::Unretained(&waiter))); |
waiter.Wait(); |
- compositor_task_runner_->DeleteSoon(FROM_HERE, compositor_); |
- |
// Let V8 know we are not using extra resources anymore. |
if (incremented_externally_allocated_memory_) { |
v8::Isolate::GetCurrent()->AdjustAmountOfExternalAllocatedMemory( |
@@ -564,7 +560,7 @@ |
// - We haven't reached HAVE_CURRENT_DATA and need to paint black |
// - We're painting to a canvas |
// See http://crbug.com/341225 http://crbug.com/342621 for details. |
- scoped_refptr<media::VideoFrame> video_frame = compositor_->GetCurrentFrame(); |
+ scoped_refptr<media::VideoFrame> video_frame = compositor_.GetCurrentFrame(); |
TRACE_EVENT0("media", "WebMediaPlayerImpl:paint"); |
gfx::Rect gfx_rect(rect); |
@@ -598,7 +594,14 @@ |
DCHECK(main_loop_->BelongsToCurrentThread()); |
media::PipelineStatistics stats = pipeline_.GetStatistics(); |
- return stats.video_frames_dropped; |
+ |
+ unsigned frames_dropped = stats.video_frames_dropped; |
+ |
+ frames_dropped += const_cast<VideoFrameCompositor&>(compositor_) |
+ .GetFramesDroppedBeforeCompositorWasNotified(); |
+ |
+ DCHECK_LE(frames_dropped, stats.video_frames_decoded); |
+ return frames_dropped; |
} |
unsigned WebMediaPlayerImpl::audioDecodedByteCount() const { |
@@ -623,7 +626,7 @@ |
unsigned int type, |
bool premultiply_alpha, |
bool flip_y) { |
- scoped_refptr<media::VideoFrame> video_frame = compositor_->GetCurrentFrame(); |
+ scoped_refptr<media::VideoFrame> video_frame = compositor_.GetCurrentFrame(); |
TRACE_EVENT0("media", "WebMediaPlayerImpl:copyVideoTextureToPlatformTexture"); |
@@ -988,8 +991,8 @@ |
if (hasVideo()) { |
DCHECK(!video_weblayer_); |
- video_weblayer_.reset( |
- new webkit::WebLayerImpl(cc::VideoLayer::Create(compositor_))); |
+ video_weblayer_.reset(new webkit::WebLayerImpl( |
+ cc::VideoLayer::Create(compositor_.GetVideoFrameProvider()))); |
video_weblayer_->setOpaque(opaque_); |
client_->setWebLayer(video_weblayer_.get()); |
} |
@@ -1306,11 +1309,7 @@ |
void WebMediaPlayerImpl::FrameReady( |
const scoped_refptr<media::VideoFrame>& frame) { |
- compositor_task_runner_->PostTask( |
- FROM_HERE, |
- base::Bind(&VideoFrameCompositor::UpdateCurrentFrame, |
- base::Unretained(compositor_), |
- frame)); |
+ compositor_.UpdateCurrentFrame(frame); |
} |
void WebMediaPlayerImpl::SetDecryptorReadyCB( |