Compute blend_mode outside CDP

BUG=497817
CQ_INCLUDE_TRYBOTS=tryserver.blink:linux_blink_rel

Review URL: https://codereview.chromium.org/1296713002

Cr-Commit-Position: refs/heads/master@{#343555}
diff --git a/cc/layers/layer.h b/cc/layers/layer.h
index d780a441..7011058 100644
--- a/cc/layers/layer.h
+++ b/cc/layers/layer.h
@@ -141,6 +141,14 @@
   void SetBlendMode(SkXfermode::Mode blend_mode);
   SkXfermode::Mode blend_mode() const { return blend_mode_; }
 
+  void set_draw_blend_mode(SkXfermode::Mode blend_mode) {
+    if (draw_blend_mode_ == blend_mode)
+      return;
+    draw_blend_mode_ = blend_mode;
+    SetNeedsPushProperties();
+  }
+  SkXfermode::Mode draw_blend_mode() const { return draw_blend_mode_; }
+
   bool uses_default_blend_mode() const {
     return blend_mode_ == SkXfermode::kSrcOver_Mode;
   }
@@ -730,6 +738,9 @@
   SkColor background_color_;
   float opacity_;
   SkXfermode::Mode blend_mode_;
+  // draw_blend_mode may be different than blend_mode_,
+  // when a RenderSurface re-parents the layer's blend_mode.
+  SkXfermode::Mode draw_blend_mode_;
   FilterOperations filters_;
   FilterOperations background_filters_;
   LayerPositionConstraint position_constraint_;