diff --git a/bench/TextBench.cpp b/bench/TextBench.cpp
index 799a3c8..adbd962 100644
--- a/bench/TextBench.cpp
+++ b/bench/TextBench.cpp
@@ -1,10 +1,50 @@
 #include "SkBenchmark.h"
 #include "SkCanvas.h"
+#include "SkFontHost.h"
 #include "SkPaint.h"
 #include "SkRandom.h"
 #include "SkString.h"
 #include "SkTemplates.h"
 
+static void dump_font(const char name[], SkFontID fontID) {
+    SkDebugf("Font \"%s\" %x\n", name, fontID);
+    int count = SkFontHost::CountTables(fontID);
+    SkAutoTArray<SkFontTableTag> storage(count);
+    SkFontTableTag* tags = storage.get();
+    SkFontHost::GetTableTags(fontID, tags);
+    for (int i = 0; i < count; i++) {
+        uint32_t tag = tags[i];
+        uint8_t data[4];
+        size_t size = SkFontHost::GetTableSize(fontID, tag);
+        size_t bytes = SkFontHost::GetTableData(fontID, tag,
+                                                0, sizeof(data), data);
+        SkDebugf("   tag=%c%c%c%c size=%d bytes=%d %x %x %x %x\n",
+                 uint8_t(tag>>24), uint8_t(tag>>16), uint8_t(tag>>8), uint8_t(tag),
+                 size, bytes, data[0], data[1], data[2], data[3]);
+    }
+}
+
+static void test_tables() {
+    static bool gOnce;
+    if (gOnce) {
+        return;
+    }
+    gOnce = true;
+    
+    static const char* gNames[] = {
+        "Arial", "Times", "Courier"
+    };
+    
+    for (size_t i = 0; i < SK_ARRAY_COUNT(gNames); i++) {
+        SkTypeface* tf = SkTypeface::CreateFromName(gNames[i], SkTypeface::kNormal);
+        if (tf) {
+            SkFontID fontID = tf->uniqueID();
+            dump_font(gNames[i], fontID);
+            tf->unref();
+        }
+    }
+}
+
 /*  Some considerations for performance:
         short -vs- long strings (measuring overhead)
         tiny -vs- large pointsize (measure blit -vs- overhead)
@@ -23,6 +63,8 @@
     enum { N = 300 };
 public:
     TextBench(const char text[], int ps, bool linearText, bool posText) {
+        test_tables();
+        
         fText.set(text);
 
         fPaint.setAntiAlias(true);
