| OLD | NEW |
| 1 // Copyright (c) 2013 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2013 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "base/containers/hash_tables.h" | 5 #include "base/containers/hash_tables.h" |
| 6 #include "base/logging.h" | 6 #include "base/logging.h" |
| 7 #include "base/time/time.h" | 7 #include "base/time/time.h" |
| 8 #include "skia/ext/benchmarking_canvas.h" | 8 #include "skia/ext/benchmarking_canvas.h" |
| 9 #include "third_party/skia/include/core/SkSurface.h" | 9 #include "third_party/skia/include/core/SkSurface.h" |
| 10 #include "third_party/skia/include/utils/SkProxyCanvas.h" | 10 #include "third_party/skia/include/utils/SkNWayCanvas.h" |
| 11 | 11 |
| 12 namespace skia { | 12 namespace skia { |
| 13 | 13 |
| 14 class AutoStamper { | 14 class AutoStamper { |
| 15 public: | 15 public: |
| 16 AutoStamper(TimingCanvas* timing_canvas); | 16 AutoStamper(TimingCanvas* timing_canvas); |
| 17 ~AutoStamper(); | 17 ~AutoStamper(); |
| 18 | 18 |
| 19 private: | 19 private: |
| 20 TimingCanvas* timing_canvas_; | 20 TimingCanvas* timing_canvas_; |
| 21 base::TimeTicks start_ticks_; | 21 base::TimeTicks start_ticks_; |
| 22 }; | 22 }; |
| 23 | 23 |
| 24 class TimingCanvas : public SkProxyCanvas { | 24 class TimingCanvas : public SkNWayCanvas { |
| 25 public: | 25 public: |
| 26 TimingCanvas(int width, int height, const BenchmarkingCanvas* track_canvas) | 26 TimingCanvas(int width, int height, const BenchmarkingCanvas* track_canvas) |
| 27 : tracking_canvas_(track_canvas) { | 27 : SkNWayCanvas(width, height) |
| 28 , tracking_canvas_(track_canvas) { |
| 28 surface_ = skia::AdoptRef(SkSurface::NewRasterN32Premul(width, height)); | 29 surface_ = skia::AdoptRef(SkSurface::NewRasterN32Premul(width, height)); |
| 29 | 30 |
| 30 setProxy(surface_->getCanvas()); | 31 addCanvas(surface_->getCanvas()); |
| 31 } | 32 } |
| 32 | 33 |
| 33 ~TimingCanvas() override {} | 34 ~TimingCanvas() override {} |
| 34 | 35 |
| 35 double GetTime(size_t index) { | 36 double GetTime(size_t index) { |
| 36 TimingsMap::const_iterator timing_info = timings_map_.find(index); | 37 TimingsMap::const_iterator timing_info = timings_map_.find(index); |
| 37 return timing_info != timings_map_.end() | 38 return timing_info != timings_map_.end() |
| 38 ? timing_info->second.InMillisecondsF() | 39 ? timing_info->second.InMillisecondsF() |
| 39 : 0.0; | 40 : 0.0; |
| 40 } | 41 } |
| 41 | 42 |
| 42 // SkCanvas overrides. | 43 // SkCanvas overrides. |
| 43 void willSave() override { | 44 void willSave() override { |
| 44 AutoStamper stamper(this); | 45 AutoStamper stamper(this); |
| 45 SkProxyCanvas::willSave(); | 46 SkNWayCanvas::willSave(); |
| 46 } | 47 } |
| 47 | 48 |
| 48 SaveLayerStrategy willSaveLayer(const SkRect* bounds, | 49 SaveLayerStrategy willSaveLayer(const SkRect* bounds, |
| 49 const SkPaint* paint, | 50 const SkPaint* paint, |
| 50 SaveFlags flags) override { | 51 SaveFlags flags) override { |
| 51 AutoStamper stamper(this); | 52 AutoStamper stamper(this); |
| 52 return SkProxyCanvas::willSaveLayer(bounds, paint, flags); | 53 return SkNWayCanvas::willSaveLayer(bounds, paint, flags); |
| 53 } | 54 } |
| 54 | 55 |
| 55 void willRestore() override { | 56 void willRestore() override { |
| 56 AutoStamper stamper(this); | 57 AutoStamper stamper(this); |
| 57 SkProxyCanvas::willRestore(); | 58 SkNWayCanvas::willRestore(); |
| 58 } | 59 } |
| 59 | 60 |
| 60 void onDrawPaint(const SkPaint& paint) override { | 61 void onDrawPaint(const SkPaint& paint) override { |
| 61 AutoStamper stamper(this); | 62 AutoStamper stamper(this); |
| 62 SkProxyCanvas::onDrawPaint(paint); | 63 SkNWayCanvas::onDrawPaint(paint); |
| 63 } | 64 } |
| 64 | 65 |
| 65 void onDrawPoints(PointMode mode, | 66 void onDrawPoints(PointMode mode, |
| 66 size_t count, | 67 size_t count, |
| 67 const SkPoint pts[], | 68 const SkPoint pts[], |
| 68 const SkPaint& paint) override { | 69 const SkPaint& paint) override { |
| 69 AutoStamper stamper(this); | 70 AutoStamper stamper(this); |
| 70 SkProxyCanvas::onDrawPoints(mode, count, pts, paint); | 71 SkNWayCanvas::onDrawPoints(mode, count, pts, paint); |
| 71 } | 72 } |
| 72 | 73 |
| 73 void onDrawOval(const SkRect& rect, const SkPaint& paint) override { | 74 void onDrawOval(const SkRect& rect, const SkPaint& paint) override { |
| 74 AutoStamper stamper(this); | 75 AutoStamper stamper(this); |
| 75 SkProxyCanvas::onDrawOval(rect, paint); | 76 SkNWayCanvas::onDrawOval(rect, paint); |
| 76 } | 77 } |
| 77 | 78 |
| 78 void onDrawRect(const SkRect& rect, const SkPaint& paint) override { | 79 void onDrawRect(const SkRect& rect, const SkPaint& paint) override { |
| 79 AutoStamper stamper(this); | 80 AutoStamper stamper(this); |
| 80 SkProxyCanvas::onDrawRect(rect, paint); | 81 SkNWayCanvas::onDrawRect(rect, paint); |
| 81 } | 82 } |
| 82 | 83 |
| 83 void onDrawRRect(const SkRRect& rrect, const SkPaint& paint) override { | 84 void onDrawRRect(const SkRRect& rrect, const SkPaint& paint) override { |
| 84 AutoStamper stamper(this); | 85 AutoStamper stamper(this); |
| 85 SkProxyCanvas::onDrawRRect(rrect, paint); | 86 SkNWayCanvas::onDrawRRect(rrect, paint); |
| 86 } | 87 } |
| 87 | 88 |
| 88 void onDrawPath(const SkPath& path, const SkPaint& paint) override { | 89 void onDrawPath(const SkPath& path, const SkPaint& paint) override { |
| 89 AutoStamper stamper(this); | 90 AutoStamper stamper(this); |
| 90 SkProxyCanvas::onDrawPath(path, paint); | 91 SkNWayCanvas::onDrawPath(path, paint); |
| 91 } | 92 } |
| 92 | 93 |
| 93 void onDrawBitmap(const SkBitmap& bitmap, | 94 void onDrawBitmap(const SkBitmap& bitmap, |
| 94 SkScalar left, | 95 SkScalar left, |
| 95 SkScalar top, | 96 SkScalar top, |
| 96 const SkPaint* paint) override { | 97 const SkPaint* paint) override { |
| 97 AutoStamper stamper(this); | 98 AutoStamper stamper(this); |
| 98 SkProxyCanvas::onDrawBitmap(bitmap, left, top, paint); | 99 SkNWayCanvas::onDrawBitmap(bitmap, left, top, paint); |
| 99 } | 100 } |
| 100 | 101 |
| 101 void onDrawBitmapRect(const SkBitmap& bitmap, | 102 void onDrawBitmapRect(const SkBitmap& bitmap, |
| 102 const SkRect* src, | 103 const SkRect* src, |
| 103 const SkRect& dst, | 104 const SkRect& dst, |
| 104 const SkPaint* paint, | 105 const SkPaint* paint, |
| 105 DrawBitmapRectFlags flags) override { | 106 DrawBitmapRectFlags flags) override { |
| 106 AutoStamper stamper(this); | 107 AutoStamper stamper(this); |
| 107 SkProxyCanvas::onDrawBitmapRect(bitmap, src, dst, paint, flags); | 108 SkNWayCanvas::onDrawBitmapRect(bitmap, src, dst, paint, flags); |
| 108 } | 109 } |
| 109 | 110 |
| 110 void onDrawSprite(const SkBitmap& bitmap, | 111 void onDrawSprite(const SkBitmap& bitmap, |
| 111 int left, | 112 int left, |
| 112 int top, | 113 int top, |
| 113 const SkPaint* paint) override { | 114 const SkPaint* paint) override { |
| 114 AutoStamper stamper(this); | 115 AutoStamper stamper(this); |
| 115 SkProxyCanvas::onDrawSprite(bitmap, left, top, paint); | 116 SkNWayCanvas::onDrawSprite(bitmap, left, top, paint); |
| 116 } | 117 } |
| 117 | 118 |
| 118 void onDrawVertices(VertexMode vmode, | 119 void onDrawVertices(VertexMode vmode, |
| 119 int vertexCount, | 120 int vertexCount, |
| 120 const SkPoint vertices[], | 121 const SkPoint vertices[], |
| 121 const SkPoint texs[], | 122 const SkPoint texs[], |
| 122 const SkColor colors[], | 123 const SkColor colors[], |
| 123 SkXfermode* xmode, | 124 SkXfermode* xmode, |
| 124 const uint16_t indices[], | 125 const uint16_t indices[], |
| 125 int indexCount, | 126 int indexCount, |
| 126 const SkPaint& paint) override { | 127 const SkPaint& paint) override { |
| 127 AutoStamper stamper(this); | 128 AutoStamper stamper(this); |
| 128 SkProxyCanvas::onDrawVertices(vmode, vertexCount, vertices, texs, colors, | 129 SkNWayCanvas::onDrawVertices(vmode, vertexCount, vertices, texs, colors, |
| 129 xmode, indices, indexCount, paint); | 130 xmode, indices, indexCount, paint); |
| 130 } | 131 } |
| 131 | 132 |
| 132 protected: | 133 protected: |
| 133 void onDrawText(const void* text, | 134 void onDrawText(const void* text, |
| 134 size_t byteLength, | 135 size_t byteLength, |
| 135 SkScalar x, | 136 SkScalar x, |
| 136 SkScalar y, | 137 SkScalar y, |
| 137 const SkPaint& paint) override { | 138 const SkPaint& paint) override { |
| 138 AutoStamper stamper(this); | 139 AutoStamper stamper(this); |
| 139 SkProxyCanvas::onDrawText(text, byteLength, x, y, paint); | 140 SkNWayCanvas::onDrawText(text, byteLength, x, y, paint); |
| 140 } | 141 } |
| 141 | 142 |
| 142 void onDrawPosText(const void* text, | 143 void onDrawPosText(const void* text, |
| 143 size_t byteLength, | 144 size_t byteLength, |
| 144 const SkPoint pos[], | 145 const SkPoint pos[], |
| 145 const SkPaint& paint) override { | 146 const SkPaint& paint) override { |
| 146 AutoStamper stamper(this); | 147 AutoStamper stamper(this); |
| 147 SkProxyCanvas::onDrawPosText(text, byteLength, pos, paint); | 148 SkNWayCanvas::onDrawPosText(text, byteLength, pos, paint); |
| 148 } | 149 } |
| 149 | 150 |
| 150 void onDrawPosTextH(const void* text, | 151 void onDrawPosTextH(const void* text, |
| 151 size_t byteLength, | 152 size_t byteLength, |
| 152 const SkScalar xpos[], | 153 const SkScalar xpos[], |
| 153 SkScalar constY, | 154 SkScalar constY, |
| 154 const SkPaint& paint) override { | 155 const SkPaint& paint) override { |
| 155 AutoStamper stamper(this); | 156 AutoStamper stamper(this); |
| 156 SkProxyCanvas::onDrawPosTextH(text, byteLength, xpos, constY, paint); | 157 SkNWayCanvas::onDrawPosTextH(text, byteLength, xpos, constY, paint); |
| 157 } | 158 } |
| 158 | 159 |
| 159 void onDrawTextOnPath(const void* text, | 160 void onDrawTextOnPath(const void* text, |
| 160 size_t byteLength, | 161 size_t byteLength, |
| 161 const SkPath& path, | 162 const SkPath& path, |
| 162 const SkMatrix* matrix, | 163 const SkMatrix* matrix, |
| 163 const SkPaint& paint) override { | 164 const SkPaint& paint) override { |
| 164 AutoStamper stamper(this); | 165 AutoStamper stamper(this); |
| 165 SkProxyCanvas::onDrawTextOnPath(text, byteLength, path, matrix, paint); | 166 SkNWayCanvas::onDrawTextOnPath(text, byteLength, path, matrix, paint); |
| 166 } | 167 } |
| 167 | 168 |
| 168 void onClipRect(const SkRect& rect, | 169 void onClipRect(const SkRect& rect, |
| 169 SkRegion::Op op, | 170 SkRegion::Op op, |
| 170 ClipEdgeStyle edge_style) override { | 171 ClipEdgeStyle edge_style) override { |
| 171 AutoStamper stamper(this); | 172 AutoStamper stamper(this); |
| 172 SkProxyCanvas::onClipRect(rect, op, edge_style); | 173 SkNWayCanvas::onClipRect(rect, op, edge_style); |
| 173 } | 174 } |
| 174 | 175 |
| 175 void onClipRRect(const SkRRect& rrect, | 176 void onClipRRect(const SkRRect& rrect, |
| 176 SkRegion::Op op, | 177 SkRegion::Op op, |
| 177 ClipEdgeStyle edge_style) override { | 178 ClipEdgeStyle edge_style) override { |
| 178 AutoStamper stamper(this); | 179 AutoStamper stamper(this); |
| 179 SkProxyCanvas::onClipRRect(rrect, op, edge_style); | 180 SkNWayCanvas::onClipRRect(rrect, op, edge_style); |
| 180 } | 181 } |
| 181 | 182 |
| 182 void onClipPath(const SkPath& path, | 183 void onClipPath(const SkPath& path, |
| 183 SkRegion::Op op, | 184 SkRegion::Op op, |
| 184 ClipEdgeStyle edge_style) override { | 185 ClipEdgeStyle edge_style) override { |
| 185 AutoStamper stamper(this); | 186 AutoStamper stamper(this); |
| 186 SkProxyCanvas::onClipPath(path, op, edge_style); | 187 SkNWayCanvas::onClipPath(path, op, edge_style); |
| 187 } | 188 } |
| 188 | 189 |
| 189 void onClipRegion(const SkRegion& region, SkRegion::Op op) override { | 190 void onClipRegion(const SkRegion& region, SkRegion::Op op) override { |
| 190 AutoStamper stamper(this); | 191 AutoStamper stamper(this); |
| 191 SkProxyCanvas::onClipRegion(region, op); | 192 SkNWayCanvas::onClipRegion(region, op); |
| 192 } | 193 } |
| 193 | 194 |
| 194 void onDrawPicture(const SkPicture* picture, | 195 void onDrawPicture(const SkPicture* picture, |
| 195 const SkMatrix* matrix, | 196 const SkMatrix* matrix, |
| 196 const SkPaint* paint) override { | 197 const SkPaint* paint) override { |
| 197 AutoStamper stamper(this); | 198 AutoStamper stamper(this); |
| 198 SkProxyCanvas::onDrawPicture(picture, matrix, paint); | 199 SkNWayCanvas::onDrawPicture(picture, matrix, paint); |
| 199 } | 200 } |
| 200 | 201 |
| 201 private: | 202 private: |
| 202 typedef base::hash_map<size_t, base::TimeDelta> TimingsMap; | 203 typedef base::hash_map<size_t, base::TimeDelta> TimingsMap; |
| 203 TimingsMap timings_map_; | 204 TimingsMap timings_map_; |
| 204 | 205 |
| 205 skia::RefPtr<SkSurface> surface_; | 206 skia::RefPtr<SkSurface> surface_; |
| 206 | 207 |
| 207 friend class AutoStamper; | 208 friend class AutoStamper; |
| 208 const BenchmarkingCanvas* tracking_canvas_; | 209 const BenchmarkingCanvas* tracking_canvas_; |
| (...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 241 DCHECK_LT(index, static_cast<size_t>(debug_canvas_->getSize())); | 242 DCHECK_LT(index, static_cast<size_t>(debug_canvas_->getSize())); |
| 242 return debug_canvas_->getDrawCommandAt(index); | 243 return debug_canvas_->getDrawCommandAt(index); |
| 243 } | 244 } |
| 244 | 245 |
| 245 double BenchmarkingCanvas::GetTime(size_t index) { | 246 double BenchmarkingCanvas::GetTime(size_t index) { |
| 246 DCHECK_LT(index, static_cast<size_t>(debug_canvas_->getSize())); | 247 DCHECK_LT(index, static_cast<size_t>(debug_canvas_->getSize())); |
| 247 return timing_canvas_->GetTime(index); | 248 return timing_canvas_->GetTime(index); |
| 248 } | 249 } |
| 249 | 250 |
| 250 } // namespace skia | 251 } // namespace skia |
| OLD | NEW |