1902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com/*
2902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com * Copyright 2012 Google Inc.
3902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com *
4902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com * Use of this source code is governed by a BSD-style license that can be
5902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com * found in the LICENSE file.
6902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com */
7902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
8902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
9902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com#ifndef SKDEBUGCANVAS_H_
10902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com#define SKDEBUGCANVAS_H_
11902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
12902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com#include "SkCanvas.h"
13902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com#include "SkDrawCommand.h"
14d3ebb48320cf1b7e969974673e4bd7743816985ebungeman#include "SkPath.h"
152a67e123a3e559774a16a58cbe5106bc0fb86740commit-bot@chromium.org#include "SkPathOps.h"
16902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com#include "SkPicture.h"
17fb8c1fcab19c99b56d2fdcf6234751d6f0465142reed#include "SkString.h"
18d3ebb48320cf1b7e969974673e4bd7743816985ebungeman#include "SkTArray.h"
19199fb875c5e63c13233209e89b943c7ac7ab6665Brian Salomon#include "SkVertices.h"
20402cd91f60bcf1a2f86f769bd02d79ace73770c9ethannicholas#include "UrlDataManager.h"
21902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
22ae47aeeda09408989223291c54d12b2a98fa2b12joshualittclass GrAuditTrail;
2365cdb57ae8fd23ccec5f7f4f86b34e4aa85c45aefmalitaclass SkNWayCanvas;
2432bbcf828d66ad244fa25b468bc3a229e531491frobertphillips@google.com
250f61faa7b7041efcedd1363b11b44fa97ad97448Mike Kleinclass SkDebugCanvas : public SkCanvas {
26902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.compublic:
2780a4a60f96c33ccd850f9b0eb4b69ab08c198196chudy@google.com    SkDebugCanvas(int width, int height);
2895302da19d8b0a3bcd9d9be0e79f486760787f09vjiaoblack
29d3b65972aad96453ff4510caa3e25a2b847c6d1eBrian Salomon    ~SkDebugCanvas() override;
30902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
31768ac85655017d4106444bf3ad044680a575ccaacommit-bot@chromium.org    void toggleFilter(bool toggle) { fFilter = toggle; }
32768ac85655017d4106444bf3ad044680a575ccaacommit-bot@chromium.org
33768ac85655017d4106444bf3ad044680a575ccaacommit-bot@chromium.org    void setMegaVizMode(bool megaVizMode) { fMegaVizMode = megaVizMode; }
3495302da19d8b0a3bcd9d9be0e79f486760787f09vjiaoblack
3557f74e0aa931e7784d47cba3ecc83020aa8e72b2commit-bot@chromium.org    bool getMegaVizMode() const { return fMegaVizMode; }
36902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
37902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com    /**
38f4741c1322944e194ca34a8f5cf8188fe2c0efe2robertphillips@google.com     * Enable or disable overdraw visualization
39f4741c1322944e194ca34a8f5cf8188fe2c0efe2robertphillips@google.com     */
4065cdb57ae8fd23ccec5f7f4f86b34e4aa85c45aefmalita    void setOverdrawViz(bool overdrawViz);
4195302da19d8b0a3bcd9d9be0e79f486760787f09vjiaoblack
4257f74e0aa931e7784d47cba3ecc83020aa8e72b2commit-bot@chromium.org    bool getOverdrawViz() const { return fOverdrawViz; }
4357f74e0aa931e7784d47cba3ecc83020aa8e72b2commit-bot@chromium.org
440a0520afccb9dcad9db2258c936456e69012fa34ethannicholas    /**
450a0520afccb9dcad9db2258c936456e69012fa34ethannicholas     * Set the color of the clip visualization. An alpha of zero renders the clip invisible.
460a0520afccb9dcad9db2258c936456e69012fa34ethannicholas     */
470a0520afccb9dcad9db2258c936456e69012fa34ethannicholas    void setClipVizColor(SkColor clipVizColor) { this->fClipVizColor = clipVizColor; }
4895302da19d8b0a3bcd9d9be0e79f486760787f09vjiaoblack
490a0520afccb9dcad9db2258c936456e69012fa34ethannicholas    SkColor getClipVizColor() const { return fClipVizColor; }
500a0520afccb9dcad9db2258c936456e69012fa34ethannicholas
51144a5c518ae921f210bdd9647c061e57d18f440cBrian Salomon    void setDrawGpuOpBounds(bool drawGpuOpBounds) { fDrawGpuOpBounds = drawGpuOpBounds; }
5210d8fc29bc1605c134e98f5b58c2efb73cef6073joshualitt
53144a5c518ae921f210bdd9647c061e57d18f440cBrian Salomon    bool getDrawGpuOpBounds() const { return fDrawGpuOpBounds; }
545d5207a39e294e4e810685b2cff1d7c770e21b9cjoshualitt
552a67e123a3e559774a16a58cbe5106bc0fb86740commit-bot@chromium.org    bool getAllowSimplifyClip() const { return fAllowSimplifyClip; }
562a67e123a3e559774a16a58cbe5106bc0fb86740commit-bot@chromium.org
5795302da19d8b0a3bcd9d9be0e79f486760787f09vjiaoblack    void setPicture(SkPicture *picture) { fPicture = picture; }
58f4741c1322944e194ca34a8f5cf8188fe2c0efe2robertphillips@google.com
59f4741c1322944e194ca34a8f5cf8188fe2c0efe2robertphillips@google.com    /**
6032bbcf828d66ad244fa25b468bc3a229e531491frobertphillips@google.com     * Enable or disable texure filtering override
6132bbcf828d66ad244fa25b468bc3a229e531491frobertphillips@google.com     */
6293a1215fe0ab007ce941c721f1fd3e9dcb5d4754reed    void overrideTexFiltering(bool overrideTexFiltering, SkFilterQuality);
6332bbcf828d66ad244fa25b468bc3a229e531491frobertphillips@google.com
6432bbcf828d66ad244fa25b468bc3a229e531491frobertphillips@google.com    /**
65902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com        Executes all draw calls to the canvas.
66902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com        @param canvas  The canvas being drawn to
67902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com     */
6895302da19d8b0a3bcd9d9be0e79f486760787f09vjiaoblack    void draw(SkCanvas *canvas);
69902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
70902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com    /**
71902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com        Executes the draw calls up to the specified index.
72902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com        @param canvas  The canvas being drawn to
73902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com        @param index  The index of the final command being executed
74144a5c518ae921f210bdd9647c061e57d18f440cBrian Salomon        @param m an optional Mth gpu op to highlight, or -1
75902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com     */
7695302da19d8b0a3bcd9d9be0e79f486760787f09vjiaoblack    void drawTo(SkCanvas *canvas, int index, int m = -1);
770b5bbb0f82e022c8acfbcb6312f0ed18e1ab90cechudy@google.com
780b5bbb0f82e022c8acfbcb6312f0ed18e1ab90cechudy@google.com    /**
79a9e937c7b712b024de108fa963f92d0e70e4a296chudy@google.com        Returns the most recently calculated transformation matrix
80a9e937c7b712b024de108fa963f92d0e70e4a296chudy@google.com     */
8195302da19d8b0a3bcd9d9be0e79f486760787f09vjiaoblack    const SkMatrix &getCurrentMatrix() {
82a9e937c7b712b024de108fa963f92d0e70e4a296chudy@google.com        return fMatrix;
83a9e937c7b712b024de108fa963f92d0e70e4a296chudy@google.com    }
84a9e937c7b712b024de108fa963f92d0e70e4a296chudy@google.com
85a9e937c7b712b024de108fa963f92d0e70e4a296chudy@google.com    /**
86a9e937c7b712b024de108fa963f92d0e70e4a296chudy@google.com        Returns the most recently calculated clip
87a9e937c7b712b024de108fa963f92d0e70e4a296chudy@google.com     */
8895302da19d8b0a3bcd9d9be0e79f486760787f09vjiaoblack    const SkIRect &getCurrentClip() {
89a9e937c7b712b024de108fa963f92d0e70e4a296chudy@google.com        return fClip;
90a9e937c7b712b024de108fa963f92d0e70e4a296chudy@google.com    }
91a9e937c7b712b024de108fa963f92d0e70e4a296chudy@google.com
92a9e937c7b712b024de108fa963f92d0e70e4a296chudy@google.com    /**
930b5bbb0f82e022c8acfbcb6312f0ed18e1ab90cechudy@google.com        Returns the index of the last draw command to write to the pixel at (x,y)
940b5bbb0f82e022c8acfbcb6312f0ed18e1ab90cechudy@google.com     */
95830b8793bb1646bb76817bdc228dd8e2a92bef7dchudy@google.com    int getCommandAtPoint(int x, int y, int index);
96902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
97902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com    /**
9850c84da68b17647371a81593402e897d639989e4robertphillips@google.com        Removes the command at the specified index
9950c84da68b17647371a81593402e897d639989e4robertphillips@google.com        @param index  The index of the command to delete
10050c84da68b17647371a81593402e897d639989e4robertphillips@google.com     */
10150c84da68b17647371a81593402e897d639989e4robertphillips@google.com    void deleteDrawCommandAt(int index);
10250c84da68b17647371a81593402e897d639989e4robertphillips@google.com
10350c84da68b17647371a81593402e897d639989e4robertphillips@google.com    /**
104902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com        Returns the draw command at the given index.
105902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com        @param index  The index of the command
106902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com     */
10795302da19d8b0a3bcd9d9be0e79f486760787f09vjiaoblack    SkDrawCommand *getDrawCommandAt(int index);
108902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
109902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com    /**
11050c84da68b17647371a81593402e897d639989e4robertphillips@google.com        Sets the draw command for a given index.
11150c84da68b17647371a81593402e897d639989e4robertphillips@google.com        @param index  The index to overwrite
11250c84da68b17647371a81593402e897d639989e4robertphillips@google.com        @param command The new command
11350c84da68b17647371a81593402e897d639989e4robertphillips@google.com     */
11495302da19d8b0a3bcd9d9be0e79f486760787f09vjiaoblack    void setDrawCommandAt(int index, SkDrawCommand *command);
11550c84da68b17647371a81593402e897d639989e4robertphillips@google.com
11650c84da68b17647371a81593402e897d639989e4robertphillips@google.com    /**
117902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com        Returns information about the command at the given index.
118902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com        @param index  The index of the command
119902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com     */
12095302da19d8b0a3bcd9d9be0e79f486760787f09vjiaoblack    const SkTDArray<SkString *> *getCommandInfo(int index) const;
121902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
122902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com    /**
1237e4cfbf144af7d530d552946cee2a21d30b9b50fchudy@google.com        Returns the visibility of the command at the given index.
1247e4cfbf144af7d530d552946cee2a21d30b9b50fchudy@google.com        @param index  The index of the command
1257e4cfbf144af7d530d552946cee2a21d30b9b50fchudy@google.com     */
1267e4cfbf144af7d530d552946cee2a21d30b9b50fchudy@google.com    bool getDrawCommandVisibilityAt(int index);
1277e4cfbf144af7d530d552946cee2a21d30b9b50fchudy@google.com
1287e4cfbf144af7d530d552946cee2a21d30b9b50fchudy@google.com    /**
129902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com        Returns the vector of draw commands
130902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com     */
1314469938e92d779dff05e745559e67907bbf21e78reed@google.com    SK_ATTR_DEPRECATED("please use getDrawCommandAt and getSize instead")
13295302da19d8b0a3bcd9d9be0e79f486760787f09vjiaoblack    const SkTDArray<SkDrawCommand *> &getDrawCommands() const;
1332e71f1619d9a2c51c1292e618f42a56ad2da1de8skia.committer@gmail.com
134febc0ec41b4cff6ea69f2b89d72c0d330d198283robertphillips@google.com    /**
135febc0ec41b4cff6ea69f2b89d72c0d330d198283robertphillips@google.com        Returns the vector of draw commands. Do not use this entry
136febc0ec41b4cff6ea69f2b89d72c0d330d198283robertphillips@google.com        point - it is going away!
137febc0ec41b4cff6ea69f2b89d72c0d330d198283robertphillips@google.com     */
13895302da19d8b0a3bcd9d9be0e79f486760787f09vjiaoblack    SkTDArray<SkDrawCommand *> &getDrawCommands();
139902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
140902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com    /**
141f14143226acf209615c4dd841aa6632aff112ab3chudy@google.com        Returns length of draw command vector.
142f14143226acf209615c4dd841aa6632aff112ab3chudy@google.com     */
1430d4fe14a41bd04535310f8b2edee9e30191fdd79commit-bot@chromium.org    int getSize() const {
14467baba4892649fdb6fb0827c7d54e5adb7538443robertphillips@google.com        return fCommandVector.count();
145f14143226acf209615c4dd841aa6632aff112ab3chudy@google.com    }
146f14143226acf209615c4dd841aa6632aff112ab3chudy@google.com
147902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com    /**
148902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com        Toggles the visibility / execution of the draw command at index i with
149902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com        the value of toggle.
150902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com     */
151902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com    void toggleCommand(int index, bool toggle);
152902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
153e8cc6e8071935339a06548b13a0668b56a7540f5bungeman@google.com    void setUserMatrix(SkMatrix matrix) {
154e8cc6e8071935339a06548b13a0668b56a7540f5bungeman@google.com        fUserMatrix = matrix;
155830b8793bb1646bb76817bdc228dd8e2a92bef7dchudy@google.com    }
156830b8793bb1646bb76817bdc228dd8e2a92bef7dchudy@google.com
1572a67e123a3e559774a16a58cbe5106bc0fb86740commit-bot@chromium.org    SkString clipStackData() const { return fClipStackData; }
1582a67e123a3e559774a16a58cbe5106bc0fb86740commit-bot@chromium.org
159402cd91f60bcf1a2f86f769bd02d79ace73770c9ethannicholas    /**
1600a0520afccb9dcad9db2258c936456e69012fa34ethannicholas        Returns a JSON object representing up to the Nth draw, where N is less than
1619d524f22bfde5dc3dc8f48e1be39bdebd3bb0304halcanary        SkDebugCanvas::getSize(). The encoder may use the UrlDataManager to store binary data such
1620a0520afccb9dcad9db2258c936456e69012fa34ethannicholas        as images, referring to them via URLs embedded in the JSON.
163402cd91f60bcf1a2f86f769bd02d79ace73770c9ethannicholas     */
16495302da19d8b0a3bcd9d9be0e79f486760787f09vjiaoblack    Json::Value toJSON(UrlDataManager &urlDataManager, int n, SkCanvas *);
165402cd91f60bcf1a2f86f769bd02d79ace73770c9ethannicholas
166144a5c518ae921f210bdd9647c061e57d18f440cBrian Salomon    Json::Value toJSONOpList(int n, SkCanvas*);
167ae47aeeda09408989223291c54d12b2a98fa2b12joshualitt
168144a5c518ae921f210bdd9647c061e57d18f440cBrian Salomon    ////////////////////////////////////////////////////////////////////////////////
169144a5c518ae921f210bdd9647c061e57d18f440cBrian Salomon    // Inherited from SkCanvas
170144a5c518ae921f210bdd9647c061e57d18f440cBrian Salomon    ////////////////////////////////////////////////////////////////////////////////
171902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
1723b0a9fe5672e7339ec3e5e6d3986b15f57ae24e7robertphillips@google.com    static const int kVizImageHeight = 256;
1733b0a9fe5672e7339ec3e5e6d3986b15f57ae24e7robertphillips@google.com    static const int kVizImageWidth = 256;
1743b0a9fe5672e7339ec3e5e6d3986b15f57ae24e7robertphillips@google.com
17536352bf5e38f45a70ee4f4fc132a38048d38206dmtklein    bool isClipEmpty() const override { return false; }
17695302da19d8b0a3bcd9d9be0e79f486760787f09vjiaoblack
17736352bf5e38f45a70ee4f4fc132a38048d38206dmtklein    bool isClipRect() const override { return true; }
17895302da19d8b0a3bcd9d9be0e79f486760787f09vjiaoblack
17942e8c53b3ef58f887a623b410d9783b4d4ab4921Mike Reed    SkRect onGetLocalClipBounds() const override {
18042e8c53b3ef58f887a623b410d9783b4d4ab4921Mike Reed        return SkRect::MakeIWH(this->imageInfo().width(), this->imageInfo().height());
1818f90a892c5130d4d26b5588e1ff151d01a40688arobertphillips@google.com    }
18295302da19d8b0a3bcd9d9be0e79f486760787f09vjiaoblack
18342e8c53b3ef58f887a623b410d9783b4d4ab4921Mike Reed    SkIRect onGetDeviceClipBounds() const override {
18442e8c53b3ef58f887a623b410d9783b4d4ab4921Mike Reed        return SkIRect::MakeWH(this->imageInfo().width(), this->imageInfo().height());
1858f90a892c5130d4d26b5588e1ff151d01a40688arobertphillips@google.com    }
1868f90a892c5130d4d26b5588e1ff151d01a40688arobertphillips@google.com
187ab5827354e2c23624acc3fc1fe4a83788bc99e96commit-bot@chromium.orgprotected:
18836352bf5e38f45a70ee4f4fc132a38048d38206dmtklein    void willSave() override;
18995302da19d8b0a3bcd9d9be0e79f486760787f09vjiaoblack
19095302da19d8b0a3bcd9d9be0e79f486760787f09vjiaoblack    SaveLayerStrategy getSaveLayerStrategy(const SaveLayerRec &) override;
19195302da19d8b0a3bcd9d9be0e79f486760787f09vjiaoblack
19236352bf5e38f45a70ee4f4fc132a38048d38206dmtklein    void willRestore() override;
193e54a23fcfa42b2fc9d320650de72bcb2d9566b2dcommit-bot@chromium.org
19495302da19d8b0a3bcd9d9be0e79f486760787f09vjiaoblack    void didConcat(const SkMatrix &) override;
19544c48d062f7996b5b46917e1b312a32ad101f326commit-bot@chromium.org
19695302da19d8b0a3bcd9d9be0e79f486760787f09vjiaoblack    void didSetMatrix(const SkMatrix &) override;
19795302da19d8b0a3bcd9d9be0e79f486760787f09vjiaoblack
19895302da19d8b0a3bcd9d9be0e79f486760787f09vjiaoblack#ifdef SK_EXPERIMENTAL_SHADOWING
1990f61faa7b7041efcedd1363b11b44fa97ad97448Mike Klein    void didTranslateZ(SkScalar) override;
20095302da19d8b0a3bcd9d9be0e79f486760787f09vjiaoblack#else
20195302da19d8b0a3bcd9d9be0e79f486760787f09vjiaoblack    void didTranslateZ(SkScalar);
20295302da19d8b0a3bcd9d9be0e79f486760787f09vjiaoblack#endif
203e5de130788c8637d2f7df9ddb0241b78e04d5882vjiaoblack
20497660ccbd10d83a2bb1fa88c672d17132649efefreed    void onDrawAnnotation(const SkRect&, const char[], SkData*) override;
20536352bf5e38f45a70ee4f4fc132a38048d38206dmtklein    void onDrawDRRect(const SkRRect&, const SkRRect&, const SkPaint&) override;
2069bafc30c7900375d316d47e24412ddfd8bd0b1f2robertphillips    void onDrawText(const void* text, size_t byteLength, SkScalar x, SkScalar y,
20736352bf5e38f45a70ee4f4fc132a38048d38206dmtklein                    const SkPaint&) override;
2089bafc30c7900375d316d47e24412ddfd8bd0b1f2robertphillips    void onDrawPosText(const void* text, size_t byteLength, const SkPoint pos[],
20936352bf5e38f45a70ee4f4fc132a38048d38206dmtklein                       const SkPaint&) override;
2109bafc30c7900375d316d47e24412ddfd8bd0b1f2robertphillips    void onDrawPosTextH(const void* text, size_t byteLength, const SkScalar xpos[],
21136352bf5e38f45a70ee4f4fc132a38048d38206dmtklein                        SkScalar constY, const SkPaint&) override;
2129bafc30c7900375d316d47e24412ddfd8bd0b1f2robertphillips    void onDrawTextOnPath(const void* text, size_t byteLength, const SkPath& path,
21336352bf5e38f45a70ee4f4fc132a38048d38206dmtklein                          const SkMatrix* matrix, const SkPaint&) override;
21445561a0b15fe045ba272c328684c3f7ae290785areed    void onDrawTextRSXform(const void* text, size_t byteLength, const SkRSXform[], const SkRect*,
21545561a0b15fe045ba272c328684c3f7ae290785areed                           const SkPaint&) override;
2169bafc30c7900375d316d47e24412ddfd8bd0b1f2robertphillips    void onDrawTextBlob(const SkTextBlob* blob, SkScalar x, SkScalar y,
21736352bf5e38f45a70ee4f4fc132a38048d38206dmtklein                        const SkPaint& paint) override;
2189bafc30c7900375d316d47e24412ddfd8bd0b1f2robertphillips
2199bafc30c7900375d316d47e24412ddfd8bd0b1f2robertphillips    void onDrawPatch(const SkPoint cubics[12], const SkColor colors[4],
220faba3715b8ddfaa0ce4df79bc8006e9bc7694e5bMike Reed                     const SkPoint texCoords[4], SkBlendMode, const SkPaint& paint) override;
22136352bf5e38f45a70ee4f4fc132a38048d38206dmtklein    void onDrawPaint(const SkPaint&) override;
2229bafc30c7900375d316d47e24412ddfd8bd0b1f2robertphillips
22336352bf5e38f45a70ee4f4fc132a38048d38206dmtklein    void onDrawRect(const SkRect&, const SkPaint&) override;
22436352bf5e38f45a70ee4f4fc132a38048d38206dmtklein    void onDrawOval(const SkRect&, const SkPaint&) override;
225ac3aa245acc7b469aa2f0d0078e53401d78ac8b9bsalomon    void onDrawArc(const SkRect&, SkScalar, SkScalar, bool, const SkPaint&) override;
22636352bf5e38f45a70ee4f4fc132a38048d38206dmtklein    void onDrawRRect(const SkRRect&, const SkPaint&) override;
22736352bf5e38f45a70ee4f4fc132a38048d38206dmtklein    void onDrawPoints(PointMode, size_t count, const SkPoint pts[], const SkPaint&) override;
228fed9cfdc0216152d7fffe6d838ea7281466ffe74Mike Reed    void onDrawVerticesObject(const SkVertices*, SkBlendMode, const SkPaint&) override;
22936352bf5e38f45a70ee4f4fc132a38048d38206dmtklein    void onDrawPath(const SkPath&, const SkPaint&) override;
23036352bf5e38f45a70ee4f4fc132a38048d38206dmtklein    void onDrawBitmap(const SkBitmap&, SkScalar left, SkScalar top, const SkPaint*) override;
23141af966ab338e95eee81ab618ab28195075338f7reed    void onDrawBitmapRect(const SkBitmap&, const SkRect* src, const SkRect& dst, const SkPaint*,
232562fe4767cc73e08a4e039362bc0336aea66ecfbreed                          SrcRectConstraint) override;
23336352bf5e38f45a70ee4f4fc132a38048d38206dmtklein    void onDrawImage(const SkImage*, SkScalar left, SkScalar top, const SkPaint*) override;
234ac42aebb7b49ef3d916da1e5a75b4c7cd4cfb119Stan Iliev    void onDrawImageLattice(const SkImage* image, const Lattice& lattice,
235ac42aebb7b49ef3d916da1e5a75b4c7cd4cfb119Stan Iliev                            const SkRect& dst, const SkPaint* paint) override;
23641af966ab338e95eee81ab618ab28195075338f7reed    void onDrawImageRect(const SkImage*, const SkRect* src, const SkRect& dst,
237562fe4767cc73e08a4e039362bc0336aea66ecfbreed                         const SkPaint*, SrcRectConstraint) override;
23841af966ab338e95eee81ab618ab28195075338f7reed    void onDrawBitmapNine(const SkBitmap&, const SkIRect& center, const SkRect& dst,
23936352bf5e38f45a70ee4f4fc132a38048d38206dmtklein                          const SkPaint*) override;
240c1f7774e8d327e3c98b4094c9c01d26e27013f71Mike Reed    void onClipRect(const SkRect&, SkClipOp, ClipEdgeStyle) override;
241c1f7774e8d327e3c98b4094c9c01d26e27013f71Mike Reed    void onClipRRect(const SkRRect&, SkClipOp, ClipEdgeStyle) override;
242c1f7774e8d327e3c98b4094c9c01d26e27013f71Mike Reed    void onClipPath(const SkPath&, SkClipOp, ClipEdgeStyle) override;
243c1f7774e8d327e3c98b4094c9c01d26e27013f71Mike Reed    void onClipRegion(const SkRegion& region, SkClipOp) override;
24436352bf5e38f45a70ee4f4fc132a38048d38206dmtklein
24536352bf5e38f45a70ee4f4fc132a38048d38206dmtklein    void onDrawPicture(const SkPicture*, const SkMatrix*, const SkPaint*) override;
2469b14f26d0f3a974f3dd626c8354e1db1cfcd322frobertphillips
24795302da19d8b0a3bcd9d9be0e79f486760787f09vjiaoblack#ifdef SK_EXPERIMENTAL_SHADOWING
24895302da19d8b0a3bcd9d9be0e79f486760787f09vjiaoblack    void onDrawShadowedPicture(const SkPicture*,
24995302da19d8b0a3bcd9d9be0e79f486760787f09vjiaoblack                               const SkMatrix*,
250e6f5d5623160a69e1585f5121a3695092327dfe0vjiaoblack                               const SkPaint*,
251e6f5d5623160a69e1585f5121a3695092327dfe0vjiaoblack                               const SkShadowParams& params) override;
25295302da19d8b0a3bcd9d9be0e79f486760787f09vjiaoblack#else
25395302da19d8b0a3bcd9d9be0e79f486760787f09vjiaoblack    void onDrawShadowedPicture(const SkPicture*,
25495302da19d8b0a3bcd9d9be0e79f486760787f09vjiaoblack                               const SkMatrix*,
255e6f5d5623160a69e1585f5121a3695092327dfe0vjiaoblack                               const SkPaint*,
256e6f5d5623160a69e1585f5121a3695092327dfe0vjiaoblack                               const SkShadowParams& params);
25795302da19d8b0a3bcd9d9be0e79f486760787f09vjiaoblack#endif
25895302da19d8b0a3bcd9d9be0e79f486760787f09vjiaoblack
2591643b2c9bc5adb4324bb459bb7811f58bc7c2d62commit-bot@chromium.org    void markActiveCommands(int index);
260768ac85655017d4106444bf3ad044680a575ccaacommit-bot@chromium.org
261902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.comprivate:
26267baba4892649fdb6fb0827c7d54e5adb7538443robertphillips@google.com    SkTDArray<SkDrawCommand*> fCommandVector;
26357f74e0aa931e7784d47cba3ecc83020aa8e72b2commit-bot@chromium.org    SkPicture* fPicture;
2647e4cfbf144af7d530d552946cee2a21d30b9b50fchudy@google.com    bool fFilter;
265768ac85655017d4106444bf3ad044680a575ccaacommit-bot@chromium.org    bool fMegaVizMode;
266e8cc6e8071935339a06548b13a0668b56a7540f5bungeman@google.com    SkMatrix fUserMatrix;
267a9e937c7b712b024de108fa963f92d0e70e4a296chudy@google.com    SkMatrix fMatrix;
268a9e937c7b712b024de108fa963f92d0e70e4a296chudy@google.com    SkIRect fClip;
26932bbcf828d66ad244fa25b468bc3a229e531491frobertphillips@google.com
2702a67e123a3e559774a16a58cbe5106bc0fb86740commit-bot@chromium.org    SkString fClipStackData;
2712a67e123a3e559774a16a58cbe5106bc0fb86740commit-bot@chromium.org    bool fCalledAddStackData;
2722a67e123a3e559774a16a58cbe5106bc0fb86740commit-bot@chromium.org    SkPath fSaveDevPath;
2732a67e123a3e559774a16a58cbe5106bc0fb86740commit-bot@chromium.org
274f4741c1322944e194ca34a8f5cf8188fe2c0efe2robertphillips@google.com    bool fOverdrawViz;
27565cdb57ae8fd23ccec5f7f4f86b34e4aa85c45aefmalita    bool fOverrideFilterQuality;
27665cdb57ae8fd23ccec5f7f4f86b34e4aa85c45aefmalita    SkFilterQuality fFilterQuality;
2770a0520afccb9dcad9db2258c936456e69012fa34ethannicholas    SkColor fClipVizColor;
278144a5c518ae921f210bdd9647c061e57d18f440cBrian Salomon    bool fDrawGpuOpBounds;
279902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
280902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com    /**
2811643b2c9bc5adb4324bb459bb7811f58bc7c2d62commit-bot@chromium.org        The active saveLayer commands at a given point in the renderering.
2821643b2c9bc5adb4324bb459bb7811f58bc7c2d62commit-bot@chromium.org        Only used when "mega" visualization is enabled.
2831643b2c9bc5adb4324bb459bb7811f58bc7c2d62commit-bot@chromium.org    */
2841643b2c9bc5adb4324bb459bb7811f58bc7c2d62commit-bot@chromium.org    SkTDArray<SkDrawCommand*> fActiveLayers;
2851643b2c9bc5adb4324bb459bb7811f58bc7c2d62commit-bot@chromium.org
286ade9a3485e78d471f5f0902e9e50a2ec74c88e76skia.committer@gmail.com    /**
287902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com        Adds the command to the classes vector of commands.
288902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com        @param command  The draw command for execution
289902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com     */
290902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com    void addDrawCommand(SkDrawCommand* command);
291830b8793bb1646bb76817bdc228dd8e2a92bef7dchudy@google.com
292830b8793bb1646bb76817bdc228dd8e2a92bef7dchudy@google.com    /**
293830b8793bb1646bb76817bdc228dd8e2a92bef7dchudy@google.com        Applies any panning and zooming the user has specified before
294830b8793bb1646bb76817bdc228dd8e2a92bef7dchudy@google.com        drawing anything else into the canvas.
295830b8793bb1646bb76817bdc228dd8e2a92bef7dchudy@google.com     */
296830b8793bb1646bb76817bdc228dd8e2a92bef7dchudy@google.com    void applyUserTransform(SkCanvas* canvas);
2973b0a9fe5672e7339ec3e5e6d3986b15f57ae24e7robertphillips@google.com
2982a67e123a3e559774a16a58cbe5106bc0fb86740commit-bot@chromium.org    void resetClipStackData() { fClipStackData.reset(); fCalledAddStackData = false; }
2992a67e123a3e559774a16a58cbe5106bc0fb86740commit-bot@chromium.org
300c1f7774e8d327e3c98b4094c9c01d26e27013f71Mike Reed    void addClipStackData(const SkPath& devPath, const SkPath& operand, SkClipOp elementOp);
3012a67e123a3e559774a16a58cbe5106bc0fb86740commit-bot@chromium.org    void addPathData(const SkPath& path, const char* pathName);
3022a67e123a3e559774a16a58cbe5106bc0fb86740commit-bot@chromium.org    bool lastClipStackData(const SkPath& devPath);
3032a67e123a3e559774a16a58cbe5106bc0fb86740commit-bot@chromium.org    void outputConicPoints(const SkPoint* pts, SkScalar weight);
3042a67e123a3e559774a16a58cbe5106bc0fb86740commit-bot@chromium.org    void outputPoints(const SkPoint* pts, int count);
3052a67e123a3e559774a16a58cbe5106bc0fb86740commit-bot@chromium.org    void outputPointsCommon(const SkPoint* pts, int count);
3062a67e123a3e559774a16a58cbe5106bc0fb86740commit-bot@chromium.org    void outputScalar(SkScalar num);
3073b9e8be760ad0e576d5145e0aecf0dc73efcd640skia.committer@gmail.com
308ae47aeeda09408989223291c54d12b2a98fa2b12joshualitt    GrAuditTrail* getAuditTrail(SkCanvas*);
309ae47aeeda09408989223291c54d12b2a98fa2b12joshualitt
310144a5c518ae921f210bdd9647c061e57d18f440cBrian Salomon    void drawAndCollectOps(int n, SkCanvas*);
311ae47aeeda09408989223291c54d12b2a98fa2b12joshualitt    void cleanupAuditTrail(SkCanvas*);
31265cdb57ae8fd23ccec5f7f4f86b34e4aa85c45aefmalita
3133b0a9fe5672e7339ec3e5e6d3986b15f57ae24e7robertphillips@google.com    typedef SkCanvas INHERITED;
314902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com};
315902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
316902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com#endif
317