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

Unified Diff: content/renderer/media/webmediaplayer_impl.cc

Issue 251733005: Remove dropped frame counting and task posting from VideoFrameCompositor. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: NON_EXPORTED_BASE() Created 6 years, 8 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/renderer/media/webmediaplayer_impl.h ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: content/renderer/media/webmediaplayer_impl.cc
diff --git a/content/renderer/media/webmediaplayer_impl.cc b/content/renderer/media/webmediaplayer_impl.cc
index ea68fc7348126590c586d2cc31718fbf749f7223..0f111646735a315208f6839f43baa15fb7f3bbc6 100644
--- a/content/renderer/media/webmediaplayer_impl.cc
+++ b/content/renderer/media/webmediaplayer_impl.cc
@@ -171,12 +171,14 @@ WebMediaPlayerImpl::WebMediaPlayerImpl(
supports_save_(true),
starting_(false),
chunk_demuxer_(NULL),
- compositor_( // Threaded compositing isn't enabled universally yet.
- (RenderThreadImpl::current()->compositor_message_loop_proxy()
- ? RenderThreadImpl::current()->compositor_message_loop_proxy()
- : base::MessageLoopProxy::current()),
+ // 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(
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(
@@ -232,6 +234,8 @@ WebMediaPlayerImpl::~WebMediaPlayerImpl() {
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(
@@ -560,7 +564,7 @@ void WebMediaPlayerImpl::paint(WebCanvas* canvas,
// - 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);
@@ -594,14 +598,7 @@ unsigned WebMediaPlayerImpl::droppedFrameCount() const {
DCHECK(main_loop_->BelongsToCurrentThread());
media::PipelineStatistics stats = pipeline_.GetStatistics();
-
- 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;
+ return stats.video_frames_dropped;
}
unsigned WebMediaPlayerImpl::audioDecodedByteCount() const {
@@ -626,7 +623,7 @@ bool WebMediaPlayerImpl::copyVideoTextureToPlatformTexture(
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");
@@ -991,8 +988,8 @@ void WebMediaPlayerImpl::OnPipelineMetadata(
if (hasVideo()) {
DCHECK(!video_weblayer_);
- video_weblayer_.reset(new webkit::WebLayerImpl(
- cc::VideoLayer::Create(compositor_.GetVideoFrameProvider())));
+ video_weblayer_.reset(
+ new webkit::WebLayerImpl(cc::VideoLayer::Create(compositor_)));
video_weblayer_->setOpaque(opaque_);
client_->setWebLayer(video_weblayer_.get());
}
@@ -1309,7 +1306,11 @@ void WebMediaPlayerImpl::OnOpacityChanged(bool opaque) {
void WebMediaPlayerImpl::FrameReady(
const scoped_refptr<media::VideoFrame>& frame) {
- compositor_.UpdateCurrentFrame(frame);
+ compositor_task_runner_->PostTask(
+ FROM_HERE,
+ base::Bind(&VideoFrameCompositor::UpdateCurrentFrame,
+ base::Unretained(compositor_),
+ frame));
}
void WebMediaPlayerImpl::SetDecryptorReadyCB(
« no previous file with comments | « content/renderer/media/webmediaplayer_impl.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698