OLD | NEW |
---|---|
(Empty) | |
1 /* | |
2 * Copyright 2014 Google Inc. | |
3 * | |
4 * Use of this source code is governed by a BSD-style license that can be | |
5 * found in the LICENSE file. | |
6 */ | |
7 | |
8 #include "gm.h" | |
9 #include "SkCanvas.h" | |
10 #include "SkPath.h" | |
11 #include "SkPictureRecorder.h" | |
12 | |
13 /** A call pattern that should be optimized to a single draw call. */ | |
14 static void draw_save_layer_draw_restore(SkCanvas* canvas, int layerAlpha, int d rawAlpha) { | |
15 SkPaint layerPaint; | |
16 layerPaint.setColor(SkColorSetARGB(layerAlpha, 0x0, 0x00, 0x0)); | |
17 canvas->saveLayer(NULL, &layerPaint); | |
18 SkPaint drawPaint; | |
19 drawPaint.setColor(SkColorSetARGB(drawAlpha, 100, 255, 70)); | |
20 SkRect target(SkRect::MakeWH(SK_Scalar1, SK_Scalar1)); | |
21 canvas->drawRect(target, drawPaint); | |
22 canvas->restore(); | |
23 } | |
24 | |
25 /** | |
26 Tests record optimizations. Draws shapes using a call patterns that get | |
27 optimized in SkRecord. Used to ensure that the optimization does not change t he | |
28 pixels (too drasticly). | |
29 */ | |
30 | |
31 class RecordOptsGM : public skiagm::GM { | |
32 public: | |
33 RecordOptsGM() { | |
34 } | |
35 | |
36 protected: | |
37 virtual SkString onShortName() SK_OVERRIDE { | |
38 return SkString("recordopts"); | |
39 } | |
40 | |
41 virtual SkISize onISize() SK_OVERRIDE { | |
42 return SkISize::Make(256, 256); | |
43 } | |
44 | |
45 virtual void onOnceBeforeDraw() SK_OVERRIDE { | |
46 SkPictureRecorder recorder; | |
47 SkCanvas* pictureCanvas = recorder.beginRecording(256, 256); | |
48 for (int layerAlpha = 0; layerAlpha < 256; ++layerAlpha) { | |
49 pictureCanvas->save(); | |
50 for (int drawAlpha = 0; drawAlpha < 256; ++drawAlpha) { | |
51 draw_save_layer_draw_restore(pictureCanvas, layerAlpha, drawAlph a); | |
52 pictureCanvas->translate(SK_Scalar1, 0); | |
53 } | |
54 pictureCanvas->restore(); | |
55 pictureCanvas->translate(0, SK_Scalar1); | |
56 } | |
57 fPicture.reset(recorder.endRecordingAsPicture()); | |
58 } | |
59 | |
60 virtual void onDraw(SkCanvas* canvas) SK_OVERRIDE { | |
61 canvas->clear(SK_ColorTRANSPARENT); | |
62 fPicture->playback(canvas); | |
mtklein
2015/01/13 18:48:20
Seems like we might also want a reference image th
mtklein
2015/01/13 18:50:58
Or even better, we can draw a diff between the non
Kimmo Kinnunen
2015/01/14 13:07:51
Done.
Kimmo Kinnunen
2015/01/14 13:07:51
Done.
| |
63 } | |
64 | |
65 private: | |
66 typedef skiagm::GM INHERITED; | |
67 SkAutoTUnref<SkPicture> fPicture; | |
68 }; | |
69 | |
70 DEF_GM( return SkNEW(RecordOptsGM); ) | |
71 | |
OLD | NEW |