Index: content/renderer/render_view_impl.cc |
diff --git a/content/renderer/render_view_impl.cc b/content/renderer/render_view_impl.cc |
index a23022d868b4d50e97c987b672a53812c5d68694..817fdc0fb9c6cc464801e9f310991319bc98182c 100644 |
--- a/content/renderer/render_view_impl.cc |
+++ b/content/renderer/render_view_impl.cc |
@@ -408,6 +408,8 @@ RenderViewImpl::RenderViewImpl( |
cached_is_main_frame_pinned_to_right_(false), |
cached_has_main_frame_horizontal_scrollbar_(false), |
cached_has_main_frame_vertical_scrollbar_(false), |
+ context_has_swapbuffers_complete_callback_(false), |
+ queried_for_swapbuffers_complete_callback_(false), |
ALLOW_THIS_IN_INITIALIZER_LIST(cookie_jar_(this)), |
geolocation_dispatcher_(NULL), |
speech_input_dispatcher_(NULL), |
@@ -4520,14 +4522,20 @@ 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) |
- return false; |
- if (!context->makeContextCurrent()) |
- return false; |
- std::string extensions(context->getRequestableExtensionsCHROMIUM().utf8()); |
- return extensions.find("GL_CHROMIUM_swapbuffers_complete_callback") != |
- std::string::npos; |
+ 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_; |
} |
void RenderViewImpl::OnSetFocus(bool enable) { |