File: CallCountingCanvas.h

package info (click to toggle)
android-platform-frameworks-base 1%3A14~beta1-3
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 326,092 kB
  • sloc: java: 2,032,373; xml: 343,016; cpp: 304,181; python: 3,683; ansic: 2,090; sh: 1,871; makefile: 117; sed: 19
file content (168 lines) | stat: -rw-r--r-- 5,214 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
/*
 * Copyright (C) 2020 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

#pragma once

#include <SkCanvasVirtualEnforcer.h>
#include <SkNoDrawCanvas.h>

namespace android {
namespace uirenderer {
namespace test {

class CallCountingCanvas final : public SkCanvasVirtualEnforcer<SkNoDrawCanvas> {
private:
    int START_MARKER;
public:
    CallCountingCanvas() : SkCanvasVirtualEnforcer<SkNoDrawCanvas>(1, 1) {}

    int sumTotalDrawCalls() {
        // Dirty hack assumes we're nothing but ints between START_MARKET and END_MARKER
        int* cur = &START_MARKER + 1;
        int* end = &END_MARKER;
        int sum = 0;
        while (cur != end) {
            sum += *cur;
            cur++;
        }
        return sum;
    }

    int drawPaintCount = 0;
    void onDrawPaint(const SkPaint& paint) override {
        drawPaintCount++;
    }

    int drawBehindCount = 0;
    void onDrawBehind(const SkPaint&) override {
        drawBehindCount++;
    }

    int drawRectCount = 0;
    void onDrawRect(const SkRect& rect, const SkPaint& paint) override {
        drawRectCount++;
    }

    int drawRRectCount = 0;
    void onDrawRRect(const SkRRect& rrect, const SkPaint& paint) override {
        drawRRectCount++;
    }

    int drawDRRectCount = 0;
    void onDrawDRRect(const SkRRect& outer, const SkRRect& inner,
                      const SkPaint& paint) override {
        drawDRRectCount++;
    }

    int drawOvalCount = 0;
    void onDrawOval(const SkRect& rect, const SkPaint& paint) override {
        drawOvalCount++;
    }

    int drawArcCount = 0;
    void onDrawArc(const SkRect& rect, SkScalar startAngle, SkScalar sweepAngle, bool useCenter,
                   const SkPaint& paint) override {
        drawArcCount++;
    }

    int drawPathCount = 0;
    void onDrawPath(const SkPath& path, const SkPaint& paint) override {
        drawPathCount++;
    }

    int drawRegionCount = 0;
    void onDrawRegion(const SkRegion& region, const SkPaint& paint) override {
        drawRegionCount++;
    }

    int drawTextBlobCount = 0;
    void onDrawTextBlob(const SkTextBlob* blob, SkScalar x, SkScalar y,
                        const SkPaint& paint) override {
        drawTextBlobCount++;
    }

    int drawPatchCount = 0;
    void onDrawPatch(const SkPoint cubics[12], const SkColor colors[4],
                     const SkPoint texCoords[4], SkBlendMode mode,
                     const SkPaint& paint) override {
        drawPatchCount++;
    }

    int drawPoints = 0;
    void onDrawPoints(SkCanvas::PointMode mode, size_t count, const SkPoint pts[],
                      const SkPaint& paint) override {
        drawPoints++;
    }

    int drawImageCount = 0;
    void onDrawImage2(const SkImage* image, SkScalar dx, SkScalar dy, const SkSamplingOptions&,
                     const SkPaint* paint) override {
        drawImageCount++;
    }

    int drawImageRectCount = 0;
    void onDrawImageRect2(const SkImage*, const SkRect&, const SkRect&, const SkSamplingOptions&,
                          const SkPaint*, SkCanvas::SrcRectConstraint) override {
        drawImageRectCount++;
    }

    int drawImageLatticeCount = 0;
    void onDrawImageLattice2(const SkImage* image, const SkCanvas::Lattice& lattice,
                             const SkRect& dst, SkFilterMode, const SkPaint* paint) override {
        drawImageLatticeCount++;
    }

    int drawAtlasCount = 0;
    void onDrawAtlas2(const SkImage* atlas, const SkRSXform xform[], const SkRect rect[],
                      const SkColor colors[], int count, SkBlendMode mode, const SkSamplingOptions&,
                      const SkRect* cull, const SkPaint* paint) override {
        drawAtlasCount++;
    }

    int drawAnnotationCount = 0;
    void onDrawAnnotation(const SkRect& rect, const char key[], SkData* value) override {
        drawAnnotationCount++;
    }

    int drawShadowRecCount = 0;
    void onDrawShadowRec(const SkPath&, const SkDrawShadowRec&) override {
        drawShadowRecCount++;
    }

    int drawDrawableCount = 0;
    void onDrawDrawable(SkDrawable* drawable, const SkMatrix* matrix) override {
        drawDrawableCount++;
    }

    int drawPictureCount = 0;
    void onDrawPicture(const SkPicture* picture, const SkMatrix* matrix,
                       const SkPaint* paint) override {
        drawPictureCount++;
    }

    int drawVerticesCount = 0;
    void onDrawVerticesObject (const SkVertices *vertices, SkBlendMode mode,
                        const SkPaint &paint) override {
        drawVerticesCount++;
    }

private:
    int END_MARKER;
};

} /* namespace test */
} /* namespace uirenderer */
} /* namespace android */