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

Unified Diff: third_party/WebKit/Source/modules/webgl/WebGLRenderingContextBase.cpp

Issue 2594843002: Implementing promise-based commit for driving OffscreenCanvas animations (Closed)
Patch Set: rebase Created 3 years, 11 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 side-by-side diff with in-line comments
Download patch
Index: third_party/WebKit/Source/modules/webgl/WebGLRenderingContextBase.cpp
diff --git a/third_party/WebKit/Source/modules/webgl/WebGLRenderingContextBase.cpp b/third_party/WebKit/Source/modules/webgl/WebGLRenderingContextBase.cpp
index f9ee5f6cf2a4a4893103a15f357f1db562321b47..badcb26bbb0bdca65abdf747c72005faa4b6020f 100644
--- a/third_party/WebKit/Source/modules/webgl/WebGLRenderingContextBase.cpp
+++ b/third_party/WebKit/Source/modules/webgl/WebGLRenderingContextBase.cpp
@@ -714,34 +714,34 @@ ImageBitmap* WebGLRenderingContextBase::transferToImageBitmapBase(
return ImageBitmap::create(drawingBuffer()->transferToStaticBitmapImage());
}
-void WebGLRenderingContextBase::commit(ScriptState* scriptState,
- ExceptionState& exceptionState) {
+ScriptPromise WebGLRenderingContextBase::commit(
+ ScriptState* scriptState,
+ ExceptionState& exceptionState) {
UseCounter::Feature feature = UseCounter::OffscreenCanvasCommitWebGL;
UseCounter::count(scriptState->getExecutionContext(), feature);
- if (!getOffscreenCanvas()) {
+ if (!offscreenCanvas()) {
exceptionState.throwDOMException(InvalidStateError,
"Commit() was called on a rendering "
"context that was not created from an "
"OffscreenCanvas.");
- return;
+ return exceptionState.reject(scriptState);
}
// no HTMLCanvas associated, thrown InvalidStateError
- if (!getOffscreenCanvas()->hasPlaceholderCanvas()) {
+ if (!offscreenCanvas()->hasPlaceholderCanvas()) {
exceptionState.throwDOMException(InvalidStateError,
"Commit() was called on a context whose "
"OffscreenCanvas is not associated with a "
"canvas element.");
- return;
+ return exceptionState.reject(scriptState);
+ }
+ if (!drawingBuffer()) {
+ return offscreenCanvas()->commit(nullptr, false, scriptState);
}
- if (!drawingBuffer())
- return;
- double commitStartTime = WTF::monotonicallyIncreasingTime();
// TODO(crbug.com/646864): Make commit() work correctly with
// { preserveDrawingBuffer : true }.
- getOffscreenCanvas()->getOrCreateFrameDispatcher()->dispatchFrame(
+ return offscreenCanvas()->commit(
std::move(drawingBuffer()->transferToStaticBitmapImage()),
- commitStartTime,
- drawingBuffer()->contextProvider()->isSoftwareRendering());
+ drawingBuffer()->contextProvider()->isSoftwareRendering(), scriptState);
}
PassRefPtr<Image> WebGLRenderingContextBase::getImage(
@@ -7406,8 +7406,8 @@ bool WebGLRenderingContextBase::validateDrawElements(const char* functionName,
void WebGLRenderingContextBase::dispatchContextLostEvent(TimerBase*) {
WebGLContextEvent* event = WebGLContextEvent::create(
EventTypeNames::webglcontextlost, false, true, "");
- if (getOffscreenCanvas())
- getOffscreenCanvas()->dispatchEvent(event);
+ if (offscreenCanvas())
+ offscreenCanvas()->dispatchEvent(event);
else
canvas()->dispatchEvent(event);
m_restoreAllowed = event->defaultPrevented();
@@ -7453,9 +7453,8 @@ void WebGLRenderingContextBase::maybeRestoreContext(TimerBase*) {
toPlatformContextAttributes(creationAttributes(), version());
Platform::GraphicsInfo glInfo;
std::unique_ptr<WebGraphicsContext3DProvider> contextProvider;
- const auto& url = canvas()
- ? canvas()->document().topDocument().url()
- : getOffscreenCanvas()->getExecutionContext()->url();
+ const auto& url = canvas() ? canvas()->document().topDocument().url()
+ : offscreenCanvas()->getExecutionContext()->url();
if (isMainThread()) {
contextProvider = WTF::wrapUnique(
Platform::current()->createOffscreenGraphicsContext3DProvider(
@@ -7510,7 +7509,7 @@ void WebGLRenderingContextBase::maybeRestoreContext(TimerBase*) {
if (canvas())
canvas()->dispatchEvent(event);
else
- getOffscreenCanvas()->dispatchEvent(event);
+ offscreenCanvas()->dispatchEvent(event);
}
String WebGLRenderingContextBase::ensureNotNull(const String& text) const {
@@ -7636,8 +7635,8 @@ IntSize WebGLRenderingContextBase::clampedCanvasSize() const {
width = canvas()->width();
height = canvas()->height();
} else {
- width = getOffscreenCanvas()->width();
- height = getOffscreenCanvas()->height();
+ width = offscreenCanvas()->width();
+ height = offscreenCanvas()->height();
}
return IntSize(clamp(width, 1, m_maxViewportDims[0]),
clamp(height, 1, m_maxViewportDims[1]));
@@ -7799,7 +7798,7 @@ void WebGLRenderingContextBase::getHTMLOrOffscreenCanvas(
if (canvas())
result.setHTMLCanvasElement(canvas());
else
- result.setOffscreenCanvas(getOffscreenCanvas());
+ result.setOffscreenCanvas(offscreenCanvas());
}
} // namespace blink

Powered by Google App Engine
This is Rietveld 408576698