merge in oc-dr1-release history after reset to master
diff --git a/chromium/plat_support/graphics_utils.cpp b/chromium/plat_support/graphics_utils.cpp
index 89beb75..5d8d0a5 100644
--- a/chromium/plat_support/graphics_utils.cpp
+++ b/chromium/plat_support/graphics_utils.cpp
@@ -38,15 +38,15 @@
class PixelInfo : public AwPixelInfo {
public:
- explicit PixelInfo(android::Canvas* canvas);
+ explicit PixelInfo(SkCanvas* canvas);
~PixelInfo();
};
-PixelInfo::PixelInfo(android::Canvas* canvas) {
+PixelInfo::PixelInfo(SkCanvas* canvas) {
memset(this, 0, sizeof(AwPixelInfo));
version = kAwPixelInfoVersion;
- state = canvas->captureCanvasState();
+ state = SkCanvasStateUtils::CaptureCanvasState(canvas);
}
PixelInfo::~PixelInfo() {
@@ -59,7 +59,21 @@
if (!nativeCanvas)
return NULL;
- PixelInfo* pixels = new PixelInfo(nativeCanvas);
+ SkCanvas* canvas = nativeCanvas->asSkCanvas();
+ if (!canvas)
+ return NULL;
+
+ // Workarounds for http://crbug.com/271096: SW draw only supports
+ // translate & scale transforms, and a simple rectangular clip.
+ // (This also avoids significant wasted time in calling
+ // SkCanvasStateUtils::CaptureCanvasState when the clip is complex).
+ if (!canvas->isClipRect() ||
+ (canvas->getTotalMatrix().getType() &
+ ~(SkMatrix::kTranslate_Mask | SkMatrix::kScale_Mask))) {
+ return NULL;
+ }
+
+ PixelInfo* pixels = new PixelInfo(canvas);
if (!pixels->state) {
delete pixels;
pixels = NULL;