1 /* 2 * Copyright (C) 2020 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17 #pragma once 18 19 #include <SkCanvasVirtualEnforcer.h> 20 #include <SkNoDrawCanvas.h> 21 22 namespace android { 23 namespace uirenderer { 24 namespace test { 25 26 class CallCountingCanvas final : public SkCanvasVirtualEnforcer<SkNoDrawCanvas> { 27 private: 28 int START_MARKER; 29 public: CallCountingCanvas()30 CallCountingCanvas() : SkCanvasVirtualEnforcer<SkNoDrawCanvas>(1, 1) {} 31 sumTotalDrawCalls()32 int sumTotalDrawCalls() { 33 // Dirty hack assumes we're nothing but ints between START_MARKET and END_MARKER 34 int* cur = &START_MARKER + 1; 35 int* end = &END_MARKER; 36 int sum = 0; 37 while (cur != end) { 38 sum += *cur; 39 cur++; 40 } 41 return sum; 42 } 43 44 int drawPaintCount = 0; onDrawPaint(const SkPaint & paint)45 void onDrawPaint(const SkPaint& paint) override { 46 drawPaintCount++; 47 } 48 49 int drawBehindCount = 0; onDrawBehind(const SkPaint &)50 void onDrawBehind(const SkPaint&) override { 51 drawBehindCount++; 52 } 53 54 int drawRectCount = 0; onDrawRect(const SkRect & rect,const SkPaint & paint)55 void onDrawRect(const SkRect& rect, const SkPaint& paint) override { 56 drawRectCount++; 57 } 58 59 int drawRRectCount = 0; onDrawRRect(const SkRRect & rrect,const SkPaint & paint)60 void onDrawRRect(const SkRRect& rrect, const SkPaint& paint) override { 61 drawRRectCount++; 62 } 63 64 int drawDRRectCount = 0; onDrawDRRect(const SkRRect & outer,const SkRRect & inner,const SkPaint & paint)65 void onDrawDRRect(const SkRRect& outer, const SkRRect& inner, 66 const SkPaint& paint) override { 67 drawDRRectCount++; 68 } 69 70 int drawOvalCount = 0; onDrawOval(const SkRect & rect,const SkPaint & paint)71 void onDrawOval(const SkRect& rect, const SkPaint& paint) override { 72 drawOvalCount++; 73 } 74 75 int drawArcCount = 0; onDrawArc(const SkRect & rect,SkScalar startAngle,SkScalar sweepAngle,bool useCenter,const SkPaint & paint)76 void onDrawArc(const SkRect& rect, SkScalar startAngle, SkScalar sweepAngle, bool useCenter, 77 const SkPaint& paint) override { 78 drawArcCount++; 79 } 80 81 int drawPathCount = 0; onDrawPath(const SkPath & path,const SkPaint & paint)82 void onDrawPath(const SkPath& path, const SkPaint& paint) override { 83 drawPathCount++; 84 } 85 86 int drawRegionCount = 0; onDrawRegion(const SkRegion & region,const SkPaint & paint)87 void onDrawRegion(const SkRegion& region, const SkPaint& paint) override { 88 drawRegionCount++; 89 } 90 91 int drawTextBlobCount = 0; onDrawTextBlob(const SkTextBlob * blob,SkScalar x,SkScalar y,const SkPaint & paint)92 void onDrawTextBlob(const SkTextBlob* blob, SkScalar x, SkScalar y, 93 const SkPaint& paint) override { 94 drawTextBlobCount++; 95 } 96 97 int drawPatchCount = 0; onDrawPatch(const SkPoint cubics[12],const SkColor colors[4],const SkPoint texCoords[4],SkBlendMode mode,const SkPaint & paint)98 void onDrawPatch(const SkPoint cubics[12], const SkColor colors[4], 99 const SkPoint texCoords[4], SkBlendMode mode, 100 const SkPaint& paint) override { 101 drawPatchCount++; 102 } 103 104 int drawPoints = 0; onDrawPoints(SkCanvas::PointMode mode,size_t count,const SkPoint pts[],const SkPaint & paint)105 void onDrawPoints(SkCanvas::PointMode mode, size_t count, const SkPoint pts[], 106 const SkPaint& paint) override { 107 drawPoints++; 108 } 109 110 int drawImageCount = 0; onDrawImage2(const SkImage * image,SkScalar dx,SkScalar dy,const SkSamplingOptions &,const SkPaint * paint)111 void onDrawImage2(const SkImage* image, SkScalar dx, SkScalar dy, const SkSamplingOptions&, 112 const SkPaint* paint) override { 113 drawImageCount++; 114 } 115 116 int drawImageRectCount = 0; onDrawImageRect2(const SkImage *,const SkRect &,const SkRect &,const SkSamplingOptions &,const SkPaint *,SkCanvas::SrcRectConstraint)117 void onDrawImageRect2(const SkImage*, const SkRect&, const SkRect&, const SkSamplingOptions&, 118 const SkPaint*, SkCanvas::SrcRectConstraint) override { 119 drawImageRectCount++; 120 } 121 122 int drawImageLatticeCount = 0; onDrawImageLattice2(const SkImage * image,const SkCanvas::Lattice & lattice,const SkRect & dst,SkFilterMode,const SkPaint * paint)123 void onDrawImageLattice2(const SkImage* image, const SkCanvas::Lattice& lattice, 124 const SkRect& dst, SkFilterMode, const SkPaint* paint) override { 125 drawImageLatticeCount++; 126 } 127 128 int drawAtlasCount = 0; 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)129 void onDrawAtlas2(const SkImage* atlas, const SkRSXform xform[], const SkRect rect[], 130 const SkColor colors[], int count, SkBlendMode mode, const SkSamplingOptions&, 131 const SkRect* cull, const SkPaint* paint) override { 132 drawAtlasCount++; 133 } 134 135 int drawAnnotationCount = 0; onDrawAnnotation(const SkRect & rect,const char key[],SkData * value)136 void onDrawAnnotation(const SkRect& rect, const char key[], SkData* value) override { 137 drawAnnotationCount++; 138 } 139 140 int drawShadowRecCount = 0; onDrawShadowRec(const SkPath &,const SkDrawShadowRec &)141 void onDrawShadowRec(const SkPath&, const SkDrawShadowRec&) override { 142 drawShadowRecCount++; 143 } 144 145 int drawDrawableCount = 0; onDrawDrawable(SkDrawable * drawable,const SkMatrix * matrix)146 void onDrawDrawable(SkDrawable* drawable, const SkMatrix* matrix) override { 147 drawDrawableCount++; 148 } 149 150 int drawPictureCount = 0; onDrawPicture(const SkPicture * picture,const SkMatrix * matrix,const SkPaint * paint)151 void onDrawPicture(const SkPicture* picture, const SkMatrix* matrix, 152 const SkPaint* paint) override { 153 drawPictureCount++; 154 } 155 156 int drawVerticesCount = 0; onDrawVerticesObject(const SkVertices * vertices,SkBlendMode mode,const SkPaint & paint)157 void onDrawVerticesObject (const SkVertices *vertices, SkBlendMode mode, 158 const SkPaint &paint) override { 159 drawVerticesCount++; 160 } 161 162 private: 163 int END_MARKER; 164 }; 165 166 } /* namespace test */ 167 } /* namespace uirenderer */ 168 } /* namespace android */ 169