Support multiple scales for dfpaths.

Adds miplevel as part of dfpath key, and scale factor so we know
how much to adjust to fit desired scale.

BUG=skia:2935

Review URL: https://codereview.chromium.org/687283002
diff --git a/src/gpu/GrAADistanceFieldPathRenderer.h b/src/gpu/GrAADistanceFieldPathRenderer.h
index 40430bb..10f0eba 100755
--- a/src/gpu/GrAADistanceFieldPathRenderer.h
+++ b/src/gpu/GrAADistanceFieldPathRenderer.h
@@ -41,18 +41,27 @@
 
 private:
     struct PathData {
-        uint32_t   fGenID;
+        struct Key {
+            uint32_t   fGenID;
+            // rendered size for stored path (32x32 max, 64x64 max, 128x128 max)
+            uint32_t   fDimension;
+            bool operator==(const Key& other) const {
+                return other.fGenID == fGenID && other.fDimension == fDimension;
+            }
+        };
+        Key        fKey;
+        SkScalar   fScale;
         GrPlot*    fPlot;
         SkRect     fBounds;
         SkIPoint16 fAtlasLocation;
         SK_DECLARE_INTERNAL_LLIST_INTERFACE(PathData);
         
-        static inline const uint32_t& GetKey(const PathData& data) {
-            return data.fGenID;
+        static inline const Key& GetKey(const PathData& data) {
+            return data.fKey;
         }
         
-        static inline uint32_t Hash(uint32_t key) {
-            return SkChecksum::Murmur3(&key, sizeof(key));
+        static inline uint32_t Hash(Key key) {
+            return SkChecksum::Murmur3(reinterpret_cast<const uint32_t*>(&key), sizeof(key));
         }
     };
     typedef SkTInternalLList<PathData> PathDataList;
@@ -63,11 +72,12 @@
     // current set of flags used to create the cached geometry processor
     uint32_t                           fEffectFlags;
     GrAtlas::ClientPlotUsage           fPlotUsage;
-    SkTDynamicHash<PathData, uint32_t> fPathCache;
+    SkTDynamicHash<PathData, PathData::Key> fPathCache;
     PathDataList                       fPathList;
     
     bool internalDrawPath(const SkPath& path, const PathData* pathData, GrDrawTarget* target);
-    PathData* addPathToAtlas(const SkPath& path, const SkStrokeRec& stroke, bool antiAlias);
+    PathData* addPathToAtlas(const SkPath& path, const SkStrokeRec& stroke, bool antiAlias,
+                             uint32_t dimension, SkScalar scale);
     bool freeUnusedPlot();
     
     typedef GrPathRenderer INHERITED;