SkColorSpaceXformSteps improvements and tests

Added some helper functions and put the booleans in a nested struct
(this is motivated by upcoming changes). Added a unit test of steps
against skcms, with round-tripping in both combinations.

Change-Id: Iea3d60cd52edb5259b5576b1422ed6f856cde815
Reviewed-on: https://skia-review.googlesource.com/134660
Reviewed-by: Mike Klein <mtklein@google.com>
Reviewed-by: Brian Osman <brianosman@google.com>
Commit-Queue: Brian Osman <brianosman@google.com>
diff --git a/src/core/SkColorSpaceXformSteps.h b/src/core/SkColorSpaceXformSteps.h
index 6c38411..3b2a88c 100644
--- a/src/core/SkColorSpaceXformSteps.h
+++ b/src/core/SkColorSpaceXformSteps.h
@@ -12,6 +12,22 @@
 #include "SkImageInfo.h"
 
 struct SkColorSpaceXformSteps {
+    struct Flags {
+        bool unpremul;
+        bool linearize;
+        bool gamut_transform;
+        bool encode;
+        bool premul;
+
+        uint32_t mask() const {
+            return (unpremul        ?  1 : 0)
+                 | (linearize       ?  2 : 0)
+                 | (gamut_transform ?  4 : 0)
+                 | (encode          ?  8 : 0)
+                 | (premul          ? 16 : 0);
+        }
+    };
+
     SkColorSpaceXformSteps(SkColorSpace* src, SkAlphaType srcAT,
                            SkColorSpace* dst);
 
@@ -22,17 +38,13 @@
         return SkColorSpaceXformSteps(src, kOpaque_SkAlphaType, dst);
     }
 
-    bool unpremul;
-    bool linearize;
-    bool gamut_transform;
-    bool encode;
-    bool premul;
+    void apply(float rgba[4]) const;
+
+    Flags flags;
 
     SkColorSpaceTransferFn srcTF,     // Apply for linearize.
                            dstTFInv;  // Apply for encode.
-    float src_to_dst_matrix[9];       // Apply this 3x3 row-major matrix for gamut_transform.
+    float src_to_dst_matrix[9];       // Apply this 3x3 column-major matrix for gamut_transform.
 };
 
-
-
 #endif//SkColorSpaceXformSteps_DEFINED