summaryrefslogtreecommitdiffstats
path: root/content/renderer
diff options
context:
space:
mode:
authorasargent@chromium.org <asargent@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-02-01 00:21:46 +0000
committerasargent@chromium.org <asargent@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-02-01 00:21:46 +0000
commit76f5e03b8e08272fb542dce8359b20144e8f60ce (patch)
treef13e5cf214529d2608aa7a1cb6b9b09c1442452a /content/renderer
parent96ab38bbd94221053b71fa6f0cfc73c5daae07ec (diff)
downloadchromium_src-76f5e03b8e08272fb542dce8359b20144e8f60ce.zip
chromium_src-76f5e03b8e08272fb542dce8359b20144e8f60ce.tar.gz
chromium_src-76f5e03b8e08272fb542dce8359b20144e8f60ce.tar.bz2
Revert 119977 - Defer render_widget draw until host window is available
In accelerated compositing mode we can't start rendering until the native window (HWND/gtk widget) are created on Windows and GTK without aura. For most render_widgets the code today is racy, but for window.open() and similar creation paths this is a race that we pretty much always lose. This defers the first DoDeferredUpdate on a render_widget until its host_window_ is available. Also defers querying for GL_CHROMIUM_supports_swapbuffers_callback extension until the first draw, since the context isn't ready until the host window is available. BUG=106815 TEST=start with --force-compositing-mode and --show-fps-counter, load up a page that uses window.open() to open a popup, and confirm that the popup is in compositing mode Review URL: http://codereview.chromium.org/9225050 TBR=jamesr@chromium.org Review URL: https://chromiumcodereview.appspot.com/9316015 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@119996 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'content/renderer')
-rw-r--r--content/renderer/render_view_impl.cc19
-rw-r--r--content/renderer/render_view_impl.h7
-rw-r--r--content/renderer/render_widget.cc14
3 files changed, 9 insertions, 31 deletions
diff --git a/content/renderer/render_view_impl.cc b/content/renderer/render_view_impl.cc
index d162f56..c8eb610 100644
--- a/content/renderer/render_view_impl.cc
+++ b/content/renderer/render_view_impl.cc
@@ -4495,21 +4495,12 @@ bool RenderViewImpl::SupportsAsynchronousSwapBuffers() {
if (WebWidgetHandlesCompositorScheduling())
return false;
- if (queried_for_swapbuffers_complete_callback_)
- return context_has_swapbuffers_complete_callback_;
-
- queried_for_swapbuffers_complete_callback_ = true;
-
WebKit::WebGraphicsContext3D* context = webview()->graphicsContext3D();
- if (context) {
- context->makeContextCurrent();
- std::string extensions(context->getRequestableExtensionsCHROMIUM().utf8());
- context_has_swapbuffers_complete_callback_ =
- extensions.find("GL_CHROMIUM_swapbuffers_complete_callback")
- != std::string::npos;
- }
-
- return context_has_swapbuffers_complete_callback_;
+ if (!context)
+ return false;
+ std::string extensions(context->getRequestableExtensionsCHROMIUM().utf8());
+ return extensions.find("GL_CHROMIUM_swapbuffers_complete_callback") !=
+ std::string::npos;
}
void RenderViewImpl::OnSetFocus(bool enable) {
diff --git a/content/renderer/render_view_impl.h b/content/renderer/render_view_impl.h
index 083ab85..b892a80 100644
--- a/content/renderer/render_view_impl.h
+++ b/content/renderer/render_view_impl.h
@@ -1135,13 +1135,6 @@ class RenderViewImpl : public RenderWidget,
std::set<gfx::PluginWindowHandle> fake_plugin_window_handles_;
#endif
- // When this view is composited, the context used for compositing may or may
- // not support the GL_CHROMIUM_swapbuffers_complete_callback extension. Since
- // querying for the existence of this extension is expensive we cache the
- // result. These are used to implement SupportsAsynchronousSwapBuffers().
- bool context_has_swapbuffers_complete_callback_;
- bool queried_for_swapbuffers_complete_callback_;
-
// Helper objects ------------------------------------------------------------
RendererWebCookieJarImpl cookie_jar_;
diff --git a/content/renderer/render_widget.cc b/content/renderer/render_widget.cc
index 6b16fa7..3df2a99 100644
--- a/content/renderer/render_widget.cc
+++ b/content/renderer/render_widget.cc
@@ -175,8 +175,6 @@ void RenderWidget::CompleteInit(gfx::NativeViewId parent_hwnd) {
host_window_ = parent_hwnd;
- DoDeferredUpdate();
-
Send(new ViewHostMsg_RenderViewReady(routing_id_));
}
@@ -739,11 +737,6 @@ void RenderWidget::DoDeferredUpdate() {
if (!webwidget_)
return;
-
- if (!host_window_) {
- TRACE_EVENT0("renderer", "EarlyOut_NoHostWindow");
- return;
- }
if (update_reply_pending_) {
TRACE_EVENT0("renderer", "EarlyOut_UpdateReplyPending");
return;
@@ -762,9 +755,6 @@ void RenderWidget::DoDeferredUpdate() {
return;
}
- if (is_accelerated_compositing_active_)
- using_asynchronous_swapbuffers_ = SupportsAsynchronousSwapBuffers();
-
// Tracking of frame rate jitter
base::TimeTicks frame_begin_ticks = base::TimeTicks::Now();
AnimateIfNeeded();
@@ -1020,6 +1010,10 @@ void RenderWidget::didActivateCompositor(int compositor_identifier) {
is_accelerated_compositing_active_ = true;
Send(new ViewHostMsg_DidActivateAcceleratedCompositing(
routing_id_, is_accelerated_compositing_active_));
+
+ // Note: asynchronous swapbuffer support currently only matters if
+ // compositing scheduling happens on the RenderWidget.
+ using_asynchronous_swapbuffers_ = SupportsAsynchronousSwapBuffers();
}
void RenderWidget::didDeactivateCompositor() {