add --skvm and '!' to viewer to toggle using skvm blitters

Change-Id: I71b81e89a871d9bd96534f1fb8b88fe25045685c
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/278417
Reviewed-by: Mike Klein <mtklein@google.com>
Commit-Queue: Mike Reed <reed@google.com>
diff --git a/tools/viewer/Viewer.cpp b/tools/viewer/Viewer.cpp
index 665da4a..3d51910 100644
--- a/tools/viewer/Viewer.cpp
+++ b/tools/viewer/Viewer.cpp
@@ -130,6 +130,7 @@
 static DEFINE_bool(redraw, false, "Toggle continuous redraw.");
 
 static DEFINE_bool(offscreen, false, "Force rendering to an offscreen surface.");
+static DEFINE_bool(skvm, false, "Try to use skvm blitters for raster.");
 
 #ifndef SK_GL
 static_assert(false, "viewer requires GL backend for raster.")
@@ -251,6 +252,8 @@
 const char* kOFF = "OFF";
 const char* kRefreshStateName = "Refresh";
 
+extern bool gUseSkVMBlitter;
+
 Viewer::Viewer(int argc, char** argv, void* platformData)
     : fCurrentSlide(-1)
     , fRefresh(false)
@@ -299,6 +302,8 @@
     SetResourcePath("/data/local/tmp/resources");
 #endif
 
+    gUseSkVMBlitter = FLAGS_skvm;
+
     ToolUtils::SetDefaultFontMgr();
 
     initializeEventTracingForTools();
@@ -607,6 +612,11 @@
         this->updateTitle();
         fWindow->inval();
     });
+    fCommands.addCommand('!', "SkVM", "Toggle SkVM", [this]() {
+        gUseSkVMBlitter = !gUseSkVMBlitter;
+        this->updateTitle();
+        fWindow->inval();
+    });
 
     // set up slides
     this->initSlides();
@@ -823,6 +833,9 @@
     if (fDrawViaSerialize) {
         title.append(" <serialize>");
     }
+    if (gUseSkVMBlitter) {
+        title.append(" <skvm>");
+    }
 
     SkPaintTitleUpdater paintTitle(&title);
     auto paintFlag = [this, &paintTitle](bool SkPaintFields::* flag,