diff options
author | nduca@chromium.org <nduca@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-05-12 21:10:24 +0000 |
---|---|---|
committer | nduca@chromium.org <nduca@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-05-12 21:10:24 +0000 |
commit | 652257791aa8aa96c53edd18edf2bd8c4dcaec1b (patch) | |
tree | 4f88b09862e79a8f6419d503641b943fe476f1ac /content/renderer/render_view.cc | |
parent | a1b621b3d14415485da5fc2f2df44f6dfcde84fd (diff) | |
download | chromium_src-652257791aa8aa96c53edd18edf2bd8c4dcaec1b.zip chromium_src-652257791aa8aa96c53edd18edf2bd8c4dcaec1b.tar.gz chromium_src-652257791aa8aa96c53edd18edf2bd8c4dcaec1b.tar.bz2 |
Drive compositor scheduling with the swapbuffers callback.
This modifies the compositor to hold DoDeferredUpdate until the previous frames are ack'd by the GPU.
This vastly improves rendering smoothness.
There is some complexity in the way we intercept the SwapBuffers callback due to the different types of GraphicsContexts that get scheduled by render_widget.
BUG=80480,53051
Review URL: http://codereview.chromium.org/6902106
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@85186 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'content/renderer/render_view.cc')
-rw-r--r-- | content/renderer/render_view.cc | 17 |
1 files changed, 17 insertions, 0 deletions
diff --git a/content/renderer/render_view.cc b/content/renderer/render_view.cc index 62b1e99..2469fcf 100644 --- a/content/renderer/render_view.cc +++ b/content/renderer/render_view.cc @@ -3695,6 +3695,14 @@ void RenderView::DidFlushPaint() { } } +void RenderView::OnViewContextSwapBuffersComplete() { + RenderWidget::OnSwapBuffersComplete(); +} + +void RenderView::OnViewContextSwapBuffersAborted() { + RenderWidget::OnSwapBuffersAborted(); +} + webkit::ppapi::PluginInstance* RenderView::GetBitmapForOptimizedPluginPaint( const gfx::Rect& paint_bounds, TransportDIB** dib, @@ -3885,6 +3893,15 @@ void RenderView::OnWasRestored(bool needs_repainting) { #endif // OS_MACOSX } +bool RenderView::SupportsAsynchronousSwapBuffers() { + WebKit::WebGraphicsContext3D* context = webview()->graphicsContext3D(); + if (!context) + return false; + std::string extensions(context->getRequestableExtensionsCHROMIUM().utf8()); + return extensions.find("GL_CHROMIUM_swapbuffers_complete_callback") != + std::string::npos; +} + void RenderView::OnSetFocus(bool enable) { RenderWidget::OnSetFocus(enable); |