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

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

Issue 2557783002: Improve metrics for display list canvas fallback reason (Closed)
Patch Set: Created 4 years 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 9240884ee8718c62410b7b6dca462d0dcfef5044..ae97369ef92a46a4ddbb3a727b0e85266d7ba6bc 100644
--- a/third_party/WebKit/Source/modules/webgl/WebGLRenderingContextBase.cpp
+++ b/third_party/WebKit/Source/modules/webgl/WebGLRenderingContextBase.cpp
@@ -4862,7 +4862,24 @@ bool WebGLRenderingContextBase::canUseTexImageByGPU(
return true;
}
+SnapshotReason WebGLRenderingContextBase::functionIDToSnapshotReason(
+ TexImageFunctionID id) {
+ switch (id) {
+ case TexImage2D:
+ return SnapshotReasonWebGLTexImage2D;
+ case TexSubImage2D:
+ return SnapshotReasonWebGLTexSubImage2D;
+ case TexImage3D:
+ return SnapshotReasonWebGLTexImage3D;
+ case TexSubImage3D:
+ return SnapshotReasonWebGLTexSubImage3D;
+ }
+ NOTREACHED();
+ return SnapshotReasonUnknown;
+}
+
void WebGLRenderingContextBase::texImageCanvasByGPU(
+ TexImageFunctionID functionID,
HTMLCanvasElement* canvas,
GLuint targetTexture,
GLenum targetInternalformat,
@@ -4875,9 +4892,10 @@ void WebGLRenderingContextBase::texImageCanvasByGPU(
ImageBuffer* buffer = canvas->buffer();
if (buffer &&
!buffer->copyToPlatformTexture(
- contextGL(), targetTexture, targetInternalformat, targetType,
- targetLevel, m_unpackPremultiplyAlpha, m_unpackFlipY,
- IntPoint(xoffset, yoffset), sourceSubRectangle)) {
+ functionIDToSnapshotReason(functionID), contextGL(), targetTexture,
+ targetInternalformat, targetType, targetLevel,
+ m_unpackPremultiplyAlpha, m_unpackFlipY, IntPoint(xoffset, yoffset),
+ sourceSubRectangle)) {
NOTREACHED();
}
} else {
@@ -4894,7 +4912,7 @@ void WebGLRenderingContextBase::texImageCanvasByGPU(
}
void WebGLRenderingContextBase::texImageByGPU(
- TexImageByGPUType functionType,
+ TexImageFunctionID functionID,
WebGLTexture* texture,
GLenum target,
GLint level,
@@ -4916,7 +4934,7 @@ void WebGLRenderingContextBase::texImageByGPU(
GLenum targetInternalformat = internalformat;
GLint targetLevel = level;
bool possibleDirectCopy = false;
- if (functionType == TexImage2DByGPU) {
+ if (functionID == TexImage2D) {
possibleDirectCopy = Extensions3DUtil::canUseCopyTextureCHROMIUM(
target, internalformat, type, level);
}
@@ -4947,9 +4965,10 @@ void WebGLRenderingContextBase::texImageByGPU(
}
if (image->isCanvasElement()) {
- texImageCanvasByGPU(static_cast<HTMLCanvasElement*>(image), targetTexture,
- targetInternalformat, targetType, targetLevel,
- copyXOffset, copyYOffset, sourceSubRectangle);
+ texImageCanvasByGPU(functionID, static_cast<HTMLCanvasElement*>(image),
+ targetTexture, targetInternalformat, targetType,
+ targetLevel, copyXOffset, copyYOffset,
+ sourceSubRectangle);
} else {
texImageBitmapByGPU(static_cast<ImageBitmap*>(image), targetTexture,
targetInternalformat, targetType, targetLevel,
@@ -4963,12 +4982,12 @@ void WebGLRenderingContextBase::texImageByGPU(
contextGL()->FramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0,
GL_TEXTURE_2D, targetTexture, 0);
contextGL()->BindTexture(texture->getTarget(), texture->object());
- if (functionType == TexImage2DByGPU) {
+ if (functionID == TexImage2D) {
contextGL()->CopyTexSubImage2D(target, level, 0, 0, 0, 0, width, height);
- } else if (functionType == TexSubImage2DByGPU) {
+ } else if (functionID == TexSubImage2D) {
contextGL()->CopyTexSubImage2D(target, level, xoffset, yoffset, 0, 0,
width, height);
- } else if (functionType == TexSubImage3DByGPU) {
+ } else if (functionID == TexSubImage3D) {
contextGL()->CopyTexSubImage3D(target, level, xoffset, yoffset, zoffset,
0, 0, width, height);
}
@@ -5034,7 +5053,10 @@ void WebGLRenderingContextBase::texImageHelperHTMLCanvasElement(
// 2D canvas has only FrontBuffer.
texImageImpl(functionID, target, level, internalformat, xoffset, yoffset,
zoffset, format, type,
- canvas->copiedImage(FrontBuffer, PreferAcceleration).get(),
+ canvas
+ ->copiedImage(FrontBuffer, PreferAcceleration,
+ functionIDToSnapshotReason(functionID))
+ .get(),
WebGLImageConversion::HtmlDomCanvas, m_unpackFlipY,
m_unpackPremultiplyAlpha, sourceSubRectangle, 1, 0);
return;
@@ -5050,11 +5072,11 @@ void WebGLRenderingContextBase::texImageHelperHTMLCanvasElement(
if (functionID == TexImage2D) {
texImage2DBase(target, level, internalformat, sourceSubRectangle.width(),
sourceSubRectangle.height(), 0, format, type, 0);
- texImageByGPU(TexImage2DByGPU, texture, target, level, internalformat,
- type, 0, 0, 0, canvas, adjustedSourceSubRectangle);
+ texImageByGPU(functionID, texture, target, level, internalformat, type, 0,
+ 0, 0, canvas, adjustedSourceSubRectangle);
} else {
- texImageByGPU(TexSubImage2DByGPU, texture, target, level, GL_RGBA, type,
- xoffset, yoffset, 0, canvas, adjustedSourceSubRectangle);
+ texImageByGPU(functionID, texture, target, level, GL_RGBA, type, xoffset,
+ yoffset, 0, canvas, adjustedSourceSubRectangle);
}
} else {
// 3D functions.
@@ -5062,12 +5084,14 @@ void WebGLRenderingContextBase::texImageHelperHTMLCanvasElement(
// TODO(zmo): Implement GPU-to-GPU copy path (crbug.com/612542).
// Note that code will also be needed to copy to layers of 3D
// textures, and elements of 2D texture arrays.
- texImageImpl(functionID, target, level, internalformat, xoffset, yoffset,
- zoffset, format, type,
- canvas->copiedImage(FrontBuffer, PreferAcceleration).get(),
- WebGLImageConversion::HtmlDomCanvas, m_unpackFlipY,
- m_unpackPremultiplyAlpha, sourceSubRectangle, depth,
- unpackImageHeight);
+ texImageImpl(
+ functionID, target, level, internalformat, xoffset, yoffset, zoffset,
+ format, type, canvas
+ ->copiedImage(FrontBuffer, PreferAcceleration,
+ functionIDToSnapshotReason(functionID))
+ .get(),
+ WebGLImageConversion::HtmlDomCanvas, m_unpackFlipY,
+ m_unpackPremultiplyAlpha, sourceSubRectangle, depth, unpackImageHeight);
}
}
@@ -5175,7 +5199,8 @@ void WebGLRenderingContextBase::texImageHelperHTMLVideoElement(
video->videoHeight(), 0, format, type, nullptr);
if (imageBuffer->copyToPlatformTexture(
- contextGL(), texture->object(), internalformat, type, level,
+ functionIDToSnapshotReason(functionID), contextGL(),
+ texture->object(), internalformat, type, level,
m_unpackPremultiplyAlpha, m_unpackFlipY, IntPoint(0, 0),
IntRect(0, 0, video->videoWidth(), video->videoHeight()))) {
return;
@@ -5284,11 +5309,11 @@ void WebGLRenderingContextBase::texImageHelperImageBitmap(
if (functionID == TexImage2D) {
texImage2DBase(target, level, internalformat, width, height, 0, format,
type, 0);
- texImageByGPU(TexImage2DByGPU, texture, target, level, internalformat,
- type, 0, 0, 0, bitmap, sourceSubRect);
+ texImageByGPU(functionID, texture, target, level, internalformat, type, 0,
+ 0, 0, bitmap, sourceSubRect);
} else if (functionID == TexSubImage2D) {
- texImageByGPU(TexSubImage2DByGPU, texture, target, level, GL_RGBA, type,
- xoffset, yoffset, 0, bitmap, sourceSubRect);
+ texImageByGPU(functionID, texture, target, level, GL_RGBA, type, xoffset,
+ yoffset, 0, bitmap, sourceSubRect);
}
return;
}

Powered by Google App Engine
This is Rietveld 408576698