Replace StatefulBaseRenderer inheritance with CanvasState member

Incrementally disentangles DisplayListRenderer and OpenGLRenderer.
Introduces abstract CanvasStateClient class to share three functions
between the two.

Design doc at https://docs.google.com/a/google.com/document/d/1PY1JF7AfPEF2UOUAnETS5j_4_tnJShTAMExvpCJfP8o/edit?usp=sharing.

BUG:15672762
R=djsollen@google.com,ccraik@google.com,jreck@google.com

Change-Id: Ic9fdffe18808e7d921ad06d01ea1ca25b2ad6f23
diff --git a/libs/hwui/DisplayListRenderer.h b/libs/hwui/DisplayListRenderer.h
index 34b0a1f..7dd788d 100644
--- a/libs/hwui/DisplayListRenderer.h
+++ b/libs/hwui/DisplayListRenderer.h
@@ -25,9 +25,11 @@
 #include <SkTLazy.h>
 #include <cutils/compiler.h>
 
+#include "CanvasState.h"
 #include "DisplayList.h"
 #include "DisplayListLogBuffer.h"
-#include "StatefulBaseRenderer.h"
+#include "RenderNode.h"
+#include "Renderer.h"
 
 namespace android {
 namespace uirenderer {
@@ -57,7 +59,7 @@
 /**
  * Records drawing commands in a display list for later playback into an OpenGLRenderer.
  */
-class ANDROID_API DisplayListRenderer: public StatefulBaseRenderer {
+class ANDROID_API DisplayListRenderer: public Renderer, public CanvasStateClient {
 public:
     DisplayListRenderer();
     virtual ~DisplayListRenderer();
@@ -70,6 +72,9 @@
 // Frame state operations
 // ----------------------------------------------------------------------------
     virtual void prepareDirty(float left, float top, float right, float bottom, bool opaque);
+    virtual void prepare(bool opaque) {
+        prepareDirty(0.0f, 0.0f, mState.getWidth(), mState.getHeight(), opaque);
+    }
     virtual bool finish();
     virtual void interrupt();
     virtual void resume();
@@ -77,7 +82,10 @@
 // ----------------------------------------------------------------------------
 // Canvas state operations
 // ----------------------------------------------------------------------------
+    virtual void setViewport(int width, int height) { mState.setViewport(width, height); }
+
     // Save (layer)
+    virtual int getSaveCount() const { return mState.getSaveCount(); }
     virtual int save(int flags);
     virtual void restore();
     virtual void restoreToCount(int saveCount);
@@ -85,6 +93,8 @@
             const SkPaint* paint, int flags);
 
     // Matrix
+    virtual void getMatrix(SkMatrix* outMatrix) const { mState.getMatrix(outMatrix); }
+
     virtual void translate(float dx, float dy, float dz = 0.0f);
     virtual void rotate(float degrees);
     virtual void scale(float sx, float sy);
@@ -100,9 +110,14 @@
 
     // Misc
     virtual void setDrawFilter(SkDrawFilter* filter);
+    virtual const Rect& getLocalClipBounds() const { return mState.getLocalClipBounds(); }
+    const Rect& getRenderTargetClipBounds() const { return mState.getRenderTargetClipBounds(); }
+    virtual bool quickRejectConservative(float left, float top, float right, float bottom) const {
+        return mState.quickRejectConservative(left, top, right, bottom);
+    }
 
     bool isCurrentTransformSimple() {
-        return currentTransform()->isSimple();
+        return mState.currentTransform()->isSimple();
     }
 
 // ----------------------------------------------------------------------------
@@ -163,7 +178,18 @@
     void setHighContrastText(bool highContrastText) {
         mHighContrastText = highContrastText;
     }
+
+// ----------------------------------------------------------------------------
+// CanvasState callbacks
+// ----------------------------------------------------------------------------
+    virtual void onViewportInitialized() { }
+    virtual void onSnapshotRestored(const Snapshot& removed, const Snapshot& restored) { }
+    virtual GLuint onGetTargetFbo() const { return -1; }
+
 private:
+
+    CanvasState mState;
+
     enum DeferredBarrierType {
         kBarrier_None,
         kBarrier_InOrder,