adding preabandon flag to DM

BUG=skia:

Review URL: https://codereview.chromium.org/929243004
diff --git a/dm/DMSrcSink.cpp b/dm/DMSrcSink.cpp
index b44f1d7..e67d435 100644
--- a/dm/DMSrcSink.cpp
+++ b/dm/DMSrcSink.cpp
@@ -2,6 +2,7 @@
 #include "SamplePipeControllers.h"
 #include "SkCommonFlags.h"
 #include "SkDocument.h"
+#include "SkError.h"
 #include "SkMultiPictureDraw.h"
 #include "SkNullCanvas.h"
 #include "SkOSFile.h"
@@ -157,6 +158,8 @@
     return fThreaded ? kAnyThread_Enclave : kGPU_Enclave;
 }
 
+void PreAbandonGpuContextErrorHandler(SkError, void*) {}
+
 Error GPUSink::draw(const Src& src, SkBitmap* dst, SkWStream*, SkString* log) const {
     GrContextFactory factory;
     const SkISize size = src.size();
@@ -167,6 +170,10 @@
     if (!surface) {
         return "Could not create a surface.";
     }
+    if (FLAGS_preAbandonGpuContext) {
+        SkSetErrorCallback(&PreAbandonGpuContextErrorHandler, NULL);
+        factory.abandonContexts();
+    }
     SkCanvas* canvas = surface->getCanvas();
     Error err = src.draw(canvas);
     if (!err.isEmpty()) {
@@ -178,7 +185,7 @@
         canvas->getGrContext()->dumpGpuStats(log);
     }
     dst->allocPixels(info);
-    canvas->readPixels(dst, 0,0);
+    canvas->readPixels(dst, 0, 0);
     if (FLAGS_abandonGpuContext) {
         factory.abandonContexts();
     }