Chromium Code Reviews| Index: third_party/WebKit/Source/modules/canvas2d/BaseRenderingContext2D.cpp |
| diff --git a/third_party/WebKit/Source/modules/canvas2d/BaseRenderingContext2D.cpp b/third_party/WebKit/Source/modules/canvas2d/BaseRenderingContext2D.cpp |
| index e0db5591d855ae297d2134e964605ecc916ca831..e18695113413e3db4d91ea3dc405909736b4dc74 100644 |
| --- a/third_party/WebKit/Source/modules/canvas2d/BaseRenderingContext2D.cpp |
| +++ b/third_party/WebKit/Source/modules/canvas2d/BaseRenderingContext2D.cpp |
| @@ -964,7 +964,6 @@ void BaseRenderingContext2D::drawImageInternal(SkCanvas* c, CanvasImageSource* i |
| trackDrawCall(DrawBitmapImage, nullptr, dstRect.width(), dstRect.height()); |
| } |
| - |
| int initialSaveCount = c->getSaveCount(); |
| SkPaint imagePaint = *paint; |
| @@ -1076,6 +1075,26 @@ void BaseRenderingContext2D::drawImage(ExecutionContext* executionContext, Canva |
| validateStateStack(); |
| + // Heuristic for disabling acceleration based on anticipated texture upload overhead |
| + // See comments in ExpensiveCanvasHeuristicParameters.h for explanation. |
| + ImageBuffer* buffer = imageBuffer(); |
| + if (buffer && buffer->isAccelerated() && !imageSource->isAccelerated()) { |
| + float srcArea = srcRect.width() * srcRect.height(); |
| + if (srcArea > ExpensiveCanvasHeuristicParameters::DrawImageTextureUploadHardSizeLimit) { |
| + buffer->disableAcceleration(); |
| + } else if (srcArea > ExpensiveCanvasHeuristicParameters::DrawImageTextureUploadSoftSizeLimit) { |
| + SkRect bounds = dstRect; |
| + SkMatrix ctm = drawingCanvas()->getTotalMatrix(); |
| + ctm.mapRect(&bounds); |
| + float dstArea = dstRect.width() * dstRect.height(); |
| + if (srcArea > dstArea * ExpensiveCanvasHeuristicParameters::DrawImageTextureUploadSoftSizeLimitScaleThreshold) { |
|
xidachen
2016/09/23 20:56:36
I am a little confused by this logic.
Say that sr
|
| + buffer->disableAcceleration(); |
| + } |
| + } |
| + } |
| + |
| + validateStateStack(); |
| + |
| // TODO(xidachen): After collecting some data, come back and prune off |
| // the ones that is not needed. |
| Optional<ScopedUsHistogramTimer> timer; |