diff options
author | dongseong.hwang <dongseong.hwang@intel.com> | 2015-01-08 12:11:13 -0800 |
---|---|---|
committer | Commit bot <commit-bot@chromium.org> | 2015-01-08 20:12:02 +0000 |
commit | 0c4e9d8781aea6e52fdb4a7aee978817910c67ea (patch) | |
tree | f7028dbfd1cba76dacf55f9f0389c4752c6fbd8c /mojo/services | |
parent | d2386aadf6c8350dabff4f820f2b73f44c487caa (diff) | |
download | chromium_src-0c4e9d8781aea6e52fdb4a7aee978817910c67ea.zip chromium_src-0c4e9d8781aea6e52fdb4a7aee978817910c67ea.tar.gz chromium_src-0c4e9d8781aea6e52fdb4a7aee978817910c67ea.tar.bz2 |
media: Optimize HW Video to 2D Canvas copy.
Currently, when we draws GPU decoded Video on accelerated 2D Canvas, chromium
reads back pixel from GPU and then uploads the pixel to GPU to make a SkBitmap.
It's so inefficient for both speed and battery. On the other hand, only Android
copies GPU-GPU in this case, but Android doesn't have cache mechanism which
SkCanvasVideoRenderer provides.
This CL makes all platforms copy gpu-gpu with cache mechanism. Cache mechanism
is useful when 2d canvas draws a video frame many times.
e.g. http://craftymind.com/factory/html5video/CanvasVideo.html
In addition, fix white video background on Android when not loaded. Other platforms
draw black background thanks to SkCanvasVideoRenderer::Paint().
In detail of the changes;
1. Implement gpu-gpu copy in SkCanvasVideoRenderer::Paint() like previous
WebMediaPlayerAndroid::paint().
2. Move duplicated GPU code on WebMediaPlayerImpl and WebMediaPlayerAndroid to
SkCanvasVideoRenderer.
Perf data on i5 IvyBridge
blink_perf.all:Canvas_draw-video-to-hw-accelerated-canvas-2d
15.8x speed up: 116.27 runs/s -> 1847.23 runs/s
NOTE: measure after disabling cache in SkCanvasVideoRenderer
BUG=401058, 263667
Review URL: https://codereview.chromium.org/445013002
Cr-Commit-Position: refs/heads/master@{#310577}
Diffstat (limited to 'mojo/services')
-rw-r--r-- | mojo/services/html_viewer/webmediaplayer_factory.cc | 8 |
1 files changed, 4 insertions, 4 deletions
diff --git a/mojo/services/html_viewer/webmediaplayer_factory.cc b/mojo/services/html_viewer/webmediaplayer_factory.cc index 98b4dc0..f6e5a51 100644 --- a/mojo/services/html_viewer/webmediaplayer_factory.cc +++ b/mojo/services/html_viewer/webmediaplayer_factory.cc @@ -99,10 +99,10 @@ blink::WebMediaPlayer* WebMediaPlayerFactory::CreateMediaPlayer( GetAudioHardwareConfig())); } - media::WebMediaPlayerParams params(media::WebMediaPlayerParams::DeferLoadCB(), - CreateAudioRendererSink(), media_log, - GetMediaThreadTaskRunner(), - compositor_task_runner_, initial_cdm); + media::WebMediaPlayerParams params( + media::WebMediaPlayerParams::DeferLoadCB(), CreateAudioRendererSink(), + media_log, GetMediaThreadTaskRunner(), compositor_task_runner_, + media::WebMediaPlayerParams::Context3DCB(), initial_cdm); base::WeakPtr<media::WebMediaPlayerDelegate> delegate; scoped_ptr<media::CdmFactory> cdm_factory(new media::DefaultCdmFactory()); |