BitmapTextBatch and BitmapTextBlob

BUG=skia:

Committed: https://skia.googlesource.com/skia/+/eed1dae04932483579b02c10f0706127d3f5d984

Review URL: https://codereview.chromium.org/1011403004
diff --git a/src/gpu/GrBatchAtlas.h b/src/gpu/GrBatchAtlas.h
index b514b9d..cd8123f 100644
--- a/src/gpu/GrBatchAtlas.h
+++ b/src/gpu/GrBatchAtlas.h
@@ -25,6 +25,8 @@
     // An AtlasID is an opaque handle which callers can use to determine if the atlas contains
     // a specific piece of data
     typedef uint32_t AtlasID;
+    static const uint32_t kInvalidAtlasID = 0;
+    static const uint64_t kInvalidAtlasGeneration = 0;
 
     // A function pointer for use as a callback during eviction.  Whenever GrBatchAtlas evicts a
     // specific AtlasID, it will call all of the registered listeners so they can optionally process
@@ -43,6 +45,7 @@
 
     GrTexture* getTexture() const { return fTexture; }
 
+    uint64_t atlasGeneration() const { return fAtlasGeneration; }
     bool hasID(AtlasID id);
     void setLastRefToken(AtlasID id, BatchToken batchToken);
     void registerEvictionCallback(EvictionFunc func, void* userData) {
@@ -72,6 +75,7 @@
     int fPlotWidth;
     int fPlotHeight;
     size_t fBPP;
+    uint64_t fAtlasGeneration;
 
     struct EvictionData {
         EvictionFunc fFunc;