Update libwebp and resume testing scaled webp

libwebp has a fix for [1]. Update to the commit that contains the fix.

Update libwebp.gypi, corresponding to libwebp's latest makefile.

Turn back on DM testing for scaled webp, now that it should no longer
use uninitialized memory.

[1] https://code.google.com/p/webp/issues/detail?id=254

BUG=skia:4038

Committed: https://skia.googlesource.com/skia/+/0575d3e6c272744a66ab3281f9871366717df339

Review URL: https://codereview.chromium.org/1280073002
diff --git a/DEPS b/DEPS
index 742d1de..5645144 100644
--- a/DEPS
+++ b/DEPS
@@ -14,7 +14,8 @@
   "third_party/externals/gyp"     : "https://chromium.googlesource.com/external/gyp.git@08429da7955a98ef764fafa223dd7de73f654b2d",
   "third_party/externals/harfbuzz": "https://skia.googlesource.com/third_party/harfbuzz.git@0.9.35",
   "third_party/externals/jsoncpp" : "https://chromium.googlesource.com/external/jsoncpp/jsoncpp.git@1afff032c83e26ddf7f2776e8b43de5ad666c1fa",
-  "third_party/externals/libwebp" : "https://chromium.googlesource.com/webm/libwebp.git@v0.4.3",
+  # Slightly ahead of v 0.4.3, to include the fix for skbug.com/4038
+  "third_party/externals/libwebp" : "https://chromium.googlesource.com/webm/libwebp.git@5ff0079ece626f122bfb8e33a5f92b5a68484176",
   "third_party/externals/nanomsg" : "https://skia.googlesource.com/third_party/nanomsg.git@0.4-beta",
   "third_party/externals/zlib"    : "https://chromium.googlesource.com/chromium/src/third_party/zlib@4ba7cdd0e7bf49d671645264f839838fc56e1492",
   # NOTE: If we update libpng, we may need to update the generated file at third_party/libpng/pnglibconf.h
diff --git a/dm/DM.cpp b/dm/DM.cpp
index 2a96a9e..e616c18 100644
--- a/dm/DM.cpp
+++ b/dm/DM.cpp
@@ -302,12 +302,6 @@
     }
 
     for (float scale : nativeScales) {
-        if (scale != 1.0f && (path.endsWith(".webp") || path.endsWith(".WEBP"))) {
-            // FIXME: skbug.com/4038 Scaling webp seems to leave some pixels uninitialized/
-            // compute their colors based on uninitialized values.
-            continue;
-        }
-
         for (CodecSrc::Mode mode : nativeModes) {
             for (uint32_t i = 0; i < numColorTypes; i++) {
                 push_codec_src(path, mode, colorTypes[i], scale);
diff --git a/gyp/libwebp.gyp b/gyp/libwebp.gyp
index fc6f46c..2978cd9 100644
--- a/gyp/libwebp.gyp
+++ b/gyp/libwebp.gyp
@@ -66,18 +66,33 @@
           ],
           'sources': [
             '../third_party/externals/libwebp/src/dsp/alpha_processing.c',
+            '../third_party/externals/libwebp/src/dsp/alpha_processing_mips_dsp_r2.c',
             '../third_party/externals/libwebp/src/dsp/alpha_processing_sse2.c',
+            '../third_party/externals/libwebp/src/dsp/alpha_processing_sse41.c',
             '../third_party/externals/libwebp/src/dsp/cpu.c',
             '../third_party/externals/libwebp/src/dsp/dec.c',
             '../third_party/externals/libwebp/src/dsp/dec_clip_tables.c',
+            '../third_party/externals/libwebp/src/dsp/dec_mips32.c',
+            '../third_party/externals/libwebp/src/dsp/dec_mips_dsp_r2.c',
             '../third_party/externals/libwebp/src/dsp/dec_sse2.c',
+            '../third_party/externals/libwebp/src/dsp/dec_sse41.c',
             '../third_party/externals/libwebp/src/dsp/enc.c',
             '../third_party/externals/libwebp/src/dsp/enc_sse2.c',
+            '../third_party/externals/libwebp/src/dsp/filters.c',
+            '../third_party/externals/libwebp/src/dsp/filters_mips_dsp_r2.c',
+            '../third_party/externals/libwebp/src/dsp/filters_sse2.c',
             '../third_party/externals/libwebp/src/dsp/lossless.c',
+            '../third_party/externals/libwebp/src/dsp/lossless_mips_dsp_r2.c',
             '../third_party/externals/libwebp/src/dsp/lossless_sse2.c',
+            '../third_party/externals/libwebp/src/dsp/rescaler.c',
+            '../third_party/externals/libwebp/src/dsp/rescaler_mips32.c',
+            '../third_party/externals/libwebp/src/dsp/rescaler_mips_dsp_r2.c',
             '../third_party/externals/libwebp/src/dsp/upsampling.c',
+            '../third_party/externals/libwebp/src/dsp/upsampling_mips_dsp_r2.c',
             '../third_party/externals/libwebp/src/dsp/upsampling_sse2.c',
             '../third_party/externals/libwebp/src/dsp/yuv.c',
+            '../third_party/externals/libwebp/src/dsp/yuv_mips32.c',
+            '../third_party/externals/libwebp/src/dsp/yuv_mips_dsp_r2.c',
             '../third_party/externals/libwebp/src/dsp/yuv_sse2.c',
           ],
           'cflags': [ '-w' ],
@@ -108,6 +123,7 @@
                 '../third_party/externals/libwebp/src/dsp/dec_neon.c',
                 '../third_party/externals/libwebp/src/dsp/enc_neon.c',
                 '../third_party/externals/libwebp/src/dsp/lossless_neon.c',
+                '../third_party/externals/libwebp/src/dsp/lossless_enc_neon.c',
                 '../third_party/externals/libwebp/src/dsp/upsampling_neon.c',
               ],
               # behavior similar dsp_neon.c.neon in an Android.mk
@@ -121,6 +137,34 @@
           ],
         },
         {
+          'target_name': 'libwebp_dsp_enc',
+          'type': 'static_library',
+          'includes': [
+            'libwebp_skia.gypi',
+          ],
+          'include_dirs': [
+              '../third_party/externals/libwebp',
+          ],
+          'sources': [
+            '../third_party/externals/libwebp/src/dsp/argb.c',
+            '../third_party/externals/libwebp/src/dsp/argb_mips_dsp_r2.c',
+            '../third_party/externals/libwebp/src/dsp/argb_sse2.c',
+            '../third_party/externals/libwebp/src/dsp/cost.c',
+            '../third_party/externals/libwebp/src/dsp/cost_mips32.c',
+            '../third_party/externals/libwebp/src/dsp/cost_mips_dsp_r2.c',
+            '../third_party/externals/libwebp/src/dsp/cost_sse2.c',
+            '../third_party/externals/libwebp/src/dsp/enc_avx2.c',
+            '../third_party/externals/libwebp/src/dsp/enc_mips32.c',
+            '../third_party/externals/libwebp/src/dsp/enc_mips_dsp_r2.c',
+            '../third_party/externals/libwebp/src/dsp/enc_sse41.c',
+            '../third_party/externals/libwebp/src/dsp/lossless_enc.c',
+            '../third_party/externals/libwebp/src/dsp/lossless_enc_mips32.c',
+            '../third_party/externals/libwebp/src/dsp/lossless_enc_mips_dsp_r2.c',
+            '../third_party/externals/libwebp/src/dsp/lossless_enc_sse2.c',
+            '../third_party/externals/libwebp/src/dsp/lossless_enc_sse41.c',
+          ],
+        },
+        {
           'target_name': 'libwebp_enc',
           'type': 'static_library',
           'includes': [
@@ -129,6 +173,9 @@
           'include_dirs': [
               '../third_party/externals/libwebp',
           ],
+          'dependencies' : [
+            'libwebp_dsp_enc',
+          ],
           'sources': [
             '../third_party/externals/libwebp/src/enc/alpha.c',
             '../third_party/externals/libwebp/src/enc/analysis.c',
@@ -139,8 +186,12 @@
             '../third_party/externals/libwebp/src/enc/frame.c',
             '../third_party/externals/libwebp/src/enc/histogram.c',
             '../third_party/externals/libwebp/src/enc/iterator.c',
+            '../third_party/externals/libwebp/src/enc/near_lossless.c',
             '../third_party/externals/libwebp/src/enc/picture.c',
             '../third_party/externals/libwebp/src/enc/picture_csp.c',
+            '../third_party/externals/libwebp/src/enc/picture_psnr.c',
+            '../third_party/externals/libwebp/src/enc/picture_rescale.c',
+            '../third_party/externals/libwebp/src/enc/picture_tools.c',
             '../third_party/externals/libwebp/src/enc/quant.c',
             '../third_party/externals/libwebp/src/enc/syntax.c',
             '../third_party/externals/libwebp/src/enc/token.c',