| Index: third_party/WebKit/Source/modules/canvas2d/CanvasRenderingContext2D.cpp
|
| diff --git a/third_party/WebKit/Source/modules/canvas2d/CanvasRenderingContext2D.cpp b/third_party/WebKit/Source/modules/canvas2d/CanvasRenderingContext2D.cpp
|
| index a8f41ef5f440bb17342b0f8ca18bcd7ee3a13013..727b8d8b0151ddd67dc16a1f30edac7404b5d685 100644
|
| --- a/third_party/WebKit/Source/modules/canvas2d/CanvasRenderingContext2D.cpp
|
| +++ b/third_party/WebKit/Source/modules/canvas2d/CanvasRenderingContext2D.cpp
|
| @@ -1068,4 +1068,33 @@ unsigned CanvasRenderingContext2D::hitRegionsCount() const
|
| return 0;
|
| }
|
|
|
| +bool CanvasRenderingContext2D::isAccelerationOptimalForCanvasContent() const
|
| +{
|
| + // Simple heuristic to determine if the GPU accelerated pipeline should be
|
| + // used to maximize performance of 2D canvas based on past usage.
|
| +
|
| + int numDrawPathCalls =
|
| + m_usageCounters.numDrawCalls[StrokePath] +
|
| + m_usageCounters.numDrawCalls[FillPath] +
|
| + m_usageCounters.numDrawCalls[FillText] +
|
| + m_usageCounters.numDrawCalls[StrokeText] +
|
| + m_usageCounters.numDrawCalls[FillRect] +
|
| + m_usageCounters.numDrawCalls[StrokeRect];
|
| +
|
| + double acceleratedCost =
|
| + numDrawPathCalls * ExpensiveCanvasHeuristicParameters::AcceleratedDrawPathApproximateCost +
|
| + m_usageCounters.numGetImageDataCalls * ExpensiveCanvasHeuristicParameters::AcceleratedGetImageDataApproximateCost+
|
| + m_usageCounters.numDrawCalls[DrawImage] * ExpensiveCanvasHeuristicParameters::AcceleratedDrawImageApproximateCost;
|
| +
|
| + double recordingCost =
|
| + numDrawPathCalls * ExpensiveCanvasHeuristicParameters::RecordingDrawPathApproximateCost +
|
| + m_usageCounters.numGetImageDataCalls * ExpensiveCanvasHeuristicParameters::UnacceleratedGetImageDataApproximateCost +
|
| + m_usageCounters.numDrawCalls[DrawImage] * ExpensiveCanvasHeuristicParameters::RecordingDrawImageApproximateCost;
|
| +
|
| + if (recordingCost * ExpensiveCanvasHeuristicParameters::AcceleratedHeuristicBias < acceleratedCost) {
|
| + return false;
|
| + }
|
| + return true;
|
| +}
|
| +
|
| } // namespace blink
|
|
|