Add SkBaseGpuDevice ...

between SkBaseDevice/SkClipStackDevice and SkGpuDevice/SkGpuDevice_nga

The idea is that SkCanvas will deal with SkBaseGpuDevices rather than SkGpuDevice*s

Change-Id: I1bffeccab44d2a2b73413f50d7c905fa2df8eedc
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/407459
Reviewed-by: Michael Ludwig <michaelludwig@google.com>
Commit-Queue: Robert Phillips <robertphillips@google.com>
diff --git a/src/gpu/SkBaseGpuDevice.h b/src/gpu/SkBaseGpuDevice.h
new file mode 100644
index 0000000..ca55bda
--- /dev/null
+++ b/src/gpu/SkBaseGpuDevice.h
@@ -0,0 +1,45 @@
+/*
+ * Copyright 2021 Google LLC
+ *
+ * Use of this source code is governed by a BSD-style license that can be
+ * found in the LICENSE file.
+ */
+
+#ifndef SkBaseGpuDevice_DEFINED
+#define SkBaseGpuDevice_DEFINED
+
+// NOTE: when not defined, SkGpuDevice extends SkBaseDevice directly and manages its clip stack
+// using GrClipStack. When false, SkGpuDevice continues to extend SkClipStackDevice and uses
+// SkClipStack and GrClipStackClip to manage the clip stack.
+#if !defined(SK_DISABLE_NEW_GR_CLIP_STACK)
+    // For staging purposes, disable this for Android Framework
+    #if defined(SK_BUILD_FOR_ANDROID_FRAMEWORK)
+        #define SK_DISABLE_NEW_GR_CLIP_STACK
+    #endif
+#endif
+
+#if !defined(SK_DISABLE_NEW_GR_CLIP_STACK)
+    #include "src/core/SkDevice.h"
+    #define BASE_DEVICE   SkBaseDevice
+#else
+    #include "src/core/SkClipStackDevice.h"
+    #define BASE_DEVICE   SkClipStackDevice
+#endif
+
+class SkBaseGpuDevice : public BASE_DEVICE {
+public:
+    SkBaseGpuDevice(const SkImageInfo& ii, const SkSurfaceProps& props)
+        : INHERITED(ii, props) {
+    }
+
+    // TODO: SkGpuDevice/SkGpuDevice_nga shared stuff goes here
+
+protected:
+
+private:
+    using INHERITED = BASE_DEVICE;
+};
+
+#undef BASE_DEVICE
+
+#endif