1fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot/*
2fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot * Copyright 2012 Google Inc.
3fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot *
4fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot * Use of this source code is governed by a BSD-style license that can be
5fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot * found in the LICENSE file.
6fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot */
7fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
8fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
9fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot#ifndef SKDEBUGCANVAS_H_
10fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot#define SKDEBUGCANVAS_H_
11fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
12fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot#include "SkCanvas.h"
13fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot#include "SkDrawCommand.h"
14fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot#include "SkPath.h"
15fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot#include "SkPathOps.h"
16fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot#include "SkPicture.h"
17fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot#include "SkString.h"
18fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot#include "SkTArray.h"
19fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot#include "SkVertices.h"
20fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot#include "UrlDataManager.h"
21fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
22fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robotclass GrAuditTrail;
23fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robotclass SkNWayCanvas;
24fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
25fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robotclass SkDebugCanvas : public SkCanvas {
26fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robotpublic:
27fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    SkDebugCanvas(int width, int height);
28fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
29fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    ~SkDebugCanvas() override;
30fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
31fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    void toggleFilter(bool toggle) { fFilter = toggle; }
32fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
33fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    void setMegaVizMode(bool megaVizMode) { fMegaVizMode = megaVizMode; }
34fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
35fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    bool getMegaVizMode() const { return fMegaVizMode; }
36fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
37fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    /**
38fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot     * Enable or disable overdraw visualization
39fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot     */
40fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    void setOverdrawViz(bool overdrawViz);
41fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
42fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    bool getOverdrawViz() const { return fOverdrawViz; }
43fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
44fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    /**
45fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot     * Set the color of the clip visualization. An alpha of zero renders the clip invisible.
46fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot     */
47fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    void setClipVizColor(SkColor clipVizColor) { this->fClipVizColor = clipVizColor; }
48fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
49fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    SkColor getClipVizColor() const { return fClipVizColor; }
50fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
51fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    void setDrawGpuOpBounds(bool drawGpuOpBounds) { fDrawGpuOpBounds = drawGpuOpBounds; }
52fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
53fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    bool getDrawGpuOpBounds() const { return fDrawGpuOpBounds; }
54fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
55fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    bool getAllowSimplifyClip() const { return fAllowSimplifyClip; }
56fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
57fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    void setPicture(SkPicture *picture) { fPicture = picture; }
58fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
59fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    /**
60fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot     * Enable or disable texure filtering override
61fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot     */
62fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    void overrideTexFiltering(bool overrideTexFiltering, SkFilterQuality);
63fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
64fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    /**
65fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        Executes all draw calls to the canvas.
66fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        @param canvas  The canvas being drawn to
67fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot     */
68fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    void draw(SkCanvas *canvas);
69fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
70fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    /**
71fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        Executes the draw calls up to the specified index.
72fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        @param canvas  The canvas being drawn to
73fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        @param index  The index of the final command being executed
74fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        @param m an optional Mth gpu op to highlight, or -1
75fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot     */
76fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    void drawTo(SkCanvas *canvas, int index, int m = -1);
77fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
78fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    /**
79fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        Returns the most recently calculated transformation matrix
80fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot     */
81fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    const SkMatrix &getCurrentMatrix() {
82fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        return fMatrix;
83fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    }
84fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
85fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    /**
86fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        Returns the most recently calculated clip
87fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot     */
88fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    const SkIRect &getCurrentClip() {
89fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        return fClip;
90fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    }
91fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
92fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    /**
93fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        Returns the index of the last draw command to write to the pixel at (x,y)
94fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot     */
95fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    int getCommandAtPoint(int x, int y, int index);
96fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
97fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    /**
98fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        Removes the command at the specified index
99fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        @param index  The index of the command to delete
100fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot     */
101fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    void deleteDrawCommandAt(int index);
102fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
103fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    /**
104fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        Returns the draw command at the given index.
105fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        @param index  The index of the command
106fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot     */
107fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    SkDrawCommand *getDrawCommandAt(int index);
108fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
109fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    /**
110fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        Sets the draw command for a given index.
111fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        @param index  The index to overwrite
112fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        @param command The new command
113fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot     */
114fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    void setDrawCommandAt(int index, SkDrawCommand *command);
115fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
116fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    /**
117fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        Returns information about the command at the given index.
118fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        @param index  The index of the command
119fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot     */
120fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    const SkTDArray<SkString *> *getCommandInfo(int index) const;
121fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
122fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    /**
123fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        Returns the visibility of the command at the given index.
124fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        @param index  The index of the command
125fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot     */
126fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    bool getDrawCommandVisibilityAt(int index);
127fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
128fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    /**
129fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        Returns the vector of draw commands
130fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot     */
131fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    SK_ATTR_DEPRECATED("please use getDrawCommandAt and getSize instead")
132fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    const SkTDArray<SkDrawCommand *> &getDrawCommands() const;
133fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
134fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    /**
135fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        Returns the vector of draw commands. Do not use this entry
136fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        point - it is going away!
137fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot     */
138fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    SkTDArray<SkDrawCommand *> &getDrawCommands();
139fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
140fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    /**
141fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        Returns length of draw command vector.
142fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot     */
143fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    int getSize() const {
144fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        return fCommandVector.count();
145fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    }
146fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
147fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    /**
148fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        Toggles the visibility / execution of the draw command at index i with
149fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        the value of toggle.
150fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot     */
151fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    void toggleCommand(int index, bool toggle);
152fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
153fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    void setUserMatrix(SkMatrix matrix) {
154fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        fUserMatrix = matrix;
155fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    }
156fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
157fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    SkString clipStackData() const { return fClipStackData; }
158fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
159fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    /**
160fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        Returns a JSON object representing up to the Nth draw, where N is less than
161fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        SkDebugCanvas::getSize(). The encoder may use the UrlDataManager to store binary data such
162fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        as images, referring to them via URLs embedded in the JSON.
163fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot     */
164fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    Json::Value toJSON(UrlDataManager &urlDataManager, int n, SkCanvas *);
165fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
166fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    Json::Value toJSONOpList(int n, SkCanvas*);
167fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
168fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    void detachCommands(SkTDArray<SkDrawCommand*>* dst) {
169fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        fCommandVector.swap(*dst);
170fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    }
171fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
172fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robotprotected:
173fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    void willSave() override;
174fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
175fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    SaveLayerStrategy getSaveLayerStrategy(const SaveLayerRec &) override;
176fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
177fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    void willRestore() override;
178fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
179fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    void didConcat(const SkMatrix &) override;
180fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
181fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    void didSetMatrix(const SkMatrix &) override;
182fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
183fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    void onDrawAnnotation(const SkRect&, const char[], SkData*) override;
184fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    void onDrawDRRect(const SkRRect&, const SkRRect&, const SkPaint&) override;
185fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    void onDrawText(const void* text, size_t byteLength, SkScalar x, SkScalar y,
186fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot                    const SkPaint&) override;
187fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    void onDrawPosText(const void* text, size_t byteLength, const SkPoint pos[],
188fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot                       const SkPaint&) override;
189fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    void onDrawPosTextH(const void* text, size_t byteLength, const SkScalar xpos[],
190fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot                        SkScalar constY, const SkPaint&) override;
191fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    void onDrawTextOnPath(const void* text, size_t byteLength, const SkPath& path,
192fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot                          const SkMatrix* matrix, const SkPaint&) override;
193fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    void onDrawTextRSXform(const void* text, size_t byteLength, const SkRSXform[], const SkRect*,
194fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot                           const SkPaint&) override;
195fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    void onDrawTextBlob(const SkTextBlob* blob, SkScalar x, SkScalar y,
196fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot                        const SkPaint& paint) override;
197fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
198fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    void onDrawPatch(const SkPoint cubics[12], const SkColor colors[4],
199fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot                     const SkPoint texCoords[4], SkBlendMode, const SkPaint& paint) override;
200fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    void onDrawPaint(const SkPaint&) override;
201fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
202fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    void onDrawRect(const SkRect&, const SkPaint&) override;
203fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    void onDrawOval(const SkRect&, const SkPaint&) override;
204fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    void onDrawArc(const SkRect&, SkScalar, SkScalar, bool, const SkPaint&) override;
205fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    void onDrawRRect(const SkRRect&, const SkPaint&) override;
206fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    void onDrawPoints(PointMode, size_t count, const SkPoint pts[], const SkPaint&) override;
207fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    void onDrawVerticesObject(const SkVertices*, SkBlendMode, const SkPaint&) override;
208fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    void onDrawPath(const SkPath&, const SkPaint&) override;
209fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    void onDrawBitmap(const SkBitmap&, SkScalar left, SkScalar top, const SkPaint*) override;
210fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    void onDrawBitmapRect(const SkBitmap&, const SkRect* src, const SkRect& dst, const SkPaint*,
211fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot                          SrcRectConstraint) override;
212fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    void onDrawImage(const SkImage*, SkScalar left, SkScalar top, const SkPaint*) override;
213fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    void onDrawImageLattice(const SkImage* image, const Lattice& lattice,
214fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot                            const SkRect& dst, const SkPaint* paint) override;
215fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    void onDrawImageRect(const SkImage*, const SkRect* src, const SkRect& dst,
216fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot                         const SkPaint*, SrcRectConstraint) override;
217fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    void onDrawBitmapNine(const SkBitmap&, const SkIRect& center, const SkRect& dst,
218fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot                          const SkPaint*) override;
219fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    void onClipRect(const SkRect&, SkClipOp, ClipEdgeStyle) override;
220fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    void onClipRRect(const SkRRect&, SkClipOp, ClipEdgeStyle) override;
221fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    void onClipPath(const SkPath&, SkClipOp, ClipEdgeStyle) override;
222fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    void onClipRegion(const SkRegion& region, SkClipOp) override;
223fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
224fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    void onDrawPicture(const SkPicture*, const SkMatrix*, const SkPaint*) override;
225fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
226fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    void markActiveCommands(int index);
227fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
228fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robotprivate:
229fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    SkTDArray<SkDrawCommand*> fCommandVector;
230fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    SkPicture* fPicture;
231fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    bool fFilter;
232fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    bool fMegaVizMode;
233fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    SkMatrix fUserMatrix;
234fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    SkMatrix fMatrix;
235fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    SkIRect fClip;
236fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
237fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    SkString fClipStackData;
238fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    bool fCalledAddStackData;
239fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    SkPath fSaveDevPath;
240fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
241fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    bool fOverdrawViz;
242fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    bool fOverrideFilterQuality;
243fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    SkFilterQuality fFilterQuality;
244fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    SkColor fClipVizColor;
245fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    bool fDrawGpuOpBounds;
246fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
247fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    /**
248fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        The active saveLayer commands at a given point in the renderering.
249fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        Only used when "mega" visualization is enabled.
250fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    */
251fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    SkTDArray<SkDrawCommand*> fActiveLayers;
252fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
253fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    /**
254fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        Adds the command to the class' vector of commands.
255fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        @param command  The draw command for execution
256fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot     */
257fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    void addDrawCommand(SkDrawCommand* command);
258fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
259fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    /**
260fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        Applies any panning and zooming the user has specified before
261fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        drawing anything else into the canvas.
262fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot     */
263fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    void applyUserTransform(SkCanvas* canvas);
264fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
265fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    void resetClipStackData() { fClipStackData.reset(); fCalledAddStackData = false; }
266fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
267fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    void addClipStackData(const SkPath& devPath, const SkPath& operand, SkClipOp elementOp);
268fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    void addPathData(const SkPath& path, const char* pathName);
269fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    bool lastClipStackData(const SkPath& devPath);
270fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    void outputConicPoints(const SkPoint* pts, SkScalar weight);
271fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    void outputPoints(const SkPoint* pts, int count);
272fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    void outputPointsCommon(const SkPoint* pts, int count);
273fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    void outputScalar(SkScalar num);
274fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
275fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    GrAuditTrail* getAuditTrail(SkCanvas*);
276fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
277fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    void drawAndCollectOps(int n, SkCanvas*);
278fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    void cleanupAuditTrail(SkCanvas*);
279fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
280fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    typedef SkCanvas INHERITED;
281fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot};
282fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
283fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot#endif
284