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

Side by Side Diff: third_party/WebKit/Source/modules/webgl/WebGLRenderingContextBase.cpp

Issue 1756633002: Defer WebGL lost context restore until visible. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: rebase Created 4 years, 9 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 unified diff | Download patch
« no previous file with comments | « third_party/WebKit/Source/modules/webgl/WebGLRenderingContextBase.h ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* 1 /*
2 * Copyright (C) 2009 Apple Inc. All rights reserved. 2 * Copyright (C) 2009 Apple Inc. All rights reserved.
3 * 3 *
4 * Redistribution and use in source and binary forms, with or without 4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions 5 * modification, are permitted provided that the following conditions
6 * are met: 6 * are met:
7 * 1. Redistributions of source code must retain the above copyright 7 * 1. Redistributions of source code must retain the above copyright
8 * notice, this list of conditions and the following disclaimer. 8 * notice, this list of conditions and the following disclaimer.
9 * 2. Redistributions in binary form must reproduce the above copyright 9 * 2. Redistributions in binary form must reproduce the above copyright
10 * notice, this list of conditions and the following disclaimer in the 10 * notice, this list of conditions and the following disclaimer in the
(...skipping 815 matching lines...) Expand 10 before | Expand all | Expand 10 after
826 return true; 826 return true;
827 default: 827 default:
828 return false; 828 return false;
829 } 829 }
830 } 830 }
831 831
832 } // namespace 832 } // namespace
833 833
834 WebGLRenderingContextBase::WebGLRenderingContextBase(HTMLCanvasElement* passedCa nvas, PassOwnPtr<WebGraphicsContext3D> context, const WebGLContextAttributes& re questedAttributes) 834 WebGLRenderingContextBase::WebGLRenderingContextBase(HTMLCanvasElement* passedCa nvas, PassOwnPtr<WebGraphicsContext3D> context, const WebGLContextAttributes& re questedAttributes)
835 : CanvasRenderingContext(passedCanvas) 835 : CanvasRenderingContext(passedCanvas)
836 , m_isHidden(false)
836 , m_contextLostMode(NotLostContext) 837 , m_contextLostMode(NotLostContext)
837 , m_autoRecoveryMethod(Manual) 838 , m_autoRecoveryMethod(Manual)
838 , m_dispatchContextLostEventTimer(this, &WebGLRenderingContextBase::dispatch ContextLostEvent) 839 , m_dispatchContextLostEventTimer(this, &WebGLRenderingContextBase::dispatch ContextLostEvent)
839 , m_restoreAllowed(false) 840 , m_restoreAllowed(false)
840 , m_restoreTimer(this, &WebGLRenderingContextBase::maybeRestoreContext) 841 , m_restoreTimer(this, &WebGLRenderingContextBase::maybeRestoreContext)
841 , m_preservedDefaultVAOObjectWrapper(false) 842 , m_preservedDefaultVAOObjectWrapper(false)
842 , m_generatedImageCache(4) 843 , m_generatedImageCache(4)
843 , m_requestedAttributes(requestedAttributes) 844 , m_requestedAttributes(requestedAttributes)
844 , m_synthesizedErrorsToConsole(true) 845 , m_synthesizedErrorsToConsole(true)
845 , m_numGLErrorsToConsoleAllowed(maxGLErrorsAllowedToConsole) 846 , m_numGLErrorsToConsoleAllowed(maxGLErrorsAllowedToConsole)
(...skipping 361 matching lines...) Expand 10 before | Expand all | Expand 10 after
1207 } 1208 }
1208 1209
1209 void WebGLRenderingContextBase::markLayerComposited() 1210 void WebGLRenderingContextBase::markLayerComposited()
1210 { 1211 {
1211 if (!isContextLost()) 1212 if (!isContextLost())
1212 drawingBuffer()->setBufferClearNeeded(true); 1213 drawingBuffer()->setBufferClearNeeded(true);
1213 } 1214 }
1214 1215
1215 void WebGLRenderingContextBase::setIsHidden(bool hidden) 1216 void WebGLRenderingContextBase::setIsHidden(bool hidden)
1216 { 1217 {
1218 m_isHidden = hidden;
1217 if (drawingBuffer()) 1219 if (drawingBuffer())
1218 drawingBuffer()->setIsHidden(hidden); 1220 drawingBuffer()->setIsHidden(hidden);
1221
1222 if (!hidden && isContextLost() && m_restoreAllowed && m_autoRecoveryMethod = = Auto) {
1223 ASSERT(!m_restoreTimer.isActive());
1224 m_restoreTimer.startOneShot(0, BLINK_FROM_HERE);
1225 }
1219 } 1226 }
1220 1227
1221 bool WebGLRenderingContextBase::paintRenderingResultsToCanvas(SourceDrawingBuffe r sourceBuffer) 1228 bool WebGLRenderingContextBase::paintRenderingResultsToCanvas(SourceDrawingBuffe r sourceBuffer)
1222 { 1229 {
1223 if (isContextLost()) 1230 if (isContextLost())
1224 return false; 1231 return false;
1225 1232
1226 bool mustClearNow = clearIfComposited() != Skipped; 1233 bool mustClearNow = clearIfComposited() != Skipped;
1227 if (!m_markedCanvasDirty && !mustClearNow) 1234 if (!m_markedCanvasDirty && !mustClearNow)
1228 return false; 1235 return false;
(...skipping 4665 matching lines...) Expand 10 before | Expand all | Expand 10 after
5894 } 5901 }
5895 5902
5896 return true; 5903 return true;
5897 } 5904 }
5898 5905
5899 void WebGLRenderingContextBase::dispatchContextLostEvent(Timer<WebGLRenderingCon textBase>*) 5906 void WebGLRenderingContextBase::dispatchContextLostEvent(Timer<WebGLRenderingCon textBase>*)
5900 { 5907 {
5901 RefPtrWillBeRawPtr<WebGLContextEvent> event = WebGLContextEvent::create(Even tTypeNames::webglcontextlost, false, true, ""); 5908 RefPtrWillBeRawPtr<WebGLContextEvent> event = WebGLContextEvent::create(Even tTypeNames::webglcontextlost, false, true, "");
5902 canvas()->dispatchEvent(event); 5909 canvas()->dispatchEvent(event);
5903 m_restoreAllowed = event->defaultPrevented(); 5910 m_restoreAllowed = event->defaultPrevented();
5904 if (m_restoreAllowed) { 5911 if (m_restoreAllowed && !m_isHidden) {
5905 if (m_autoRecoveryMethod == Auto) 5912 if (m_autoRecoveryMethod == Auto)
5906 m_restoreTimer.startOneShot(0, BLINK_FROM_HERE); 5913 m_restoreTimer.startOneShot(0, BLINK_FROM_HERE);
5907 } 5914 }
5908 } 5915 }
5909 5916
5910 void WebGLRenderingContextBase::maybeRestoreContext(Timer<WebGLRenderingContextB ase>*) 5917 void WebGLRenderingContextBase::maybeRestoreContext(Timer<WebGLRenderingContextB ase>*)
5911 { 5918 {
5912 ASSERT(isContextLost()); 5919 ASSERT(isContextLost());
5913 5920
5914 // The rendering context is not restored unless the default behavior of the 5921 // The rendering context is not restored unless the default behavior of the
(...skipping 363 matching lines...) Expand 10 before | Expand all | Expand 10 after
6278 webContext()->pixelStorei(GL_UNPACK_ALIGNMENT, 1); 6285 webContext()->pixelStorei(GL_UNPACK_ALIGNMENT, 1);
6279 } 6286 }
6280 6287
6281 void WebGLRenderingContextBase::restoreUnpackParameters() 6288 void WebGLRenderingContextBase::restoreUnpackParameters()
6282 { 6289 {
6283 if (m_unpackAlignment != 1) 6290 if (m_unpackAlignment != 1)
6284 webContext()->pixelStorei(GL_UNPACK_ALIGNMENT, m_unpackAlignment); 6291 webContext()->pixelStorei(GL_UNPACK_ALIGNMENT, m_unpackAlignment);
6285 } 6292 }
6286 6293
6287 } // namespace blink 6294 } // namespace blink
OLDNEW
« no previous file with comments | « third_party/WebKit/Source/modules/webgl/WebGLRenderingContextBase.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698