1*c8dee2aaSAndroid Build Coastguard Worker--- 2*c8dee2aaSAndroid Build Coastguard Workertitle: 'Writing Skia Tests' 3*c8dee2aaSAndroid Build Coastguard WorkerlinkTitle: 'Writing Skia Tests' 4*c8dee2aaSAndroid Build Coastguard Worker--- 5*c8dee2aaSAndroid Build Coastguard Worker 6*c8dee2aaSAndroid Build Coastguard WorkerWe assume you have already synced Skia's dependencies and set up Skia's build 7*c8dee2aaSAndroid Build Coastguard Workersystem. 8*c8dee2aaSAndroid Build Coastguard Worker 9*c8dee2aaSAndroid Build Coastguard Worker<!--?prettify lang=sh?--> 10*c8dee2aaSAndroid Build Coastguard Worker 11*c8dee2aaSAndroid Build Coastguard Worker python3 tools/git-sync-deps 12*c8dee2aaSAndroid Build Coastguard Worker bin/gn gen out/Debug 13*c8dee2aaSAndroid Build Coastguard Worker bin/gn gen out/Release --args='is_debug=false' 14*c8dee2aaSAndroid Build Coastguard Worker 15*c8dee2aaSAndroid Build Coastguard Worker## Writing a Unit Test 16*c8dee2aaSAndroid Build Coastguard Worker 17*c8dee2aaSAndroid Build Coastguard Worker1. Add a file `tests/NewUnitTest.cpp`: 18*c8dee2aaSAndroid Build Coastguard Worker 19*c8dee2aaSAndroid Build Coastguard Worker <!--?prettify lang=cc?--> 20*c8dee2aaSAndroid Build Coastguard Worker 21*c8dee2aaSAndroid Build Coastguard Worker /* 22*c8dee2aaSAndroid Build Coastguard Worker * Copyright ........ 23*c8dee2aaSAndroid Build Coastguard Worker * 24*c8dee2aaSAndroid Build Coastguard Worker * Use of this source code is governed by a BSD-style license 25*c8dee2aaSAndroid Build Coastguard Worker * that can be found in the LICENSE file. 26*c8dee2aaSAndroid Build Coastguard Worker */ 27*c8dee2aaSAndroid Build Coastguard Worker #include "Test.h" 28*c8dee2aaSAndroid Build Coastguard Worker DEF_TEST(NewUnitTest, reporter) { 29*c8dee2aaSAndroid Build Coastguard Worker if (1 + 1 != 2) { 30*c8dee2aaSAndroid Build Coastguard Worker ERRORF(reporter, "%d + %d != %d", 1, 1, 2); 31*c8dee2aaSAndroid Build Coastguard Worker } 32*c8dee2aaSAndroid Build Coastguard Worker bool lifeIsGood = true; 33*c8dee2aaSAndroid Build Coastguard Worker REPORTER_ASSERT(reporter, lifeIsGood); 34*c8dee2aaSAndroid Build Coastguard Worker } 35*c8dee2aaSAndroid Build Coastguard Worker 36*c8dee2aaSAndroid Build Coastguard Worker2. Add `NewUnitTest.cpp` to `gn/tests.gni`. 37*c8dee2aaSAndroid Build Coastguard Worker 38*c8dee2aaSAndroid Build Coastguard Worker3. Recompile and run test: 39*c8dee2aaSAndroid Build Coastguard Worker 40*c8dee2aaSAndroid Build Coastguard Worker <!--?prettify lang=sh?--> 41*c8dee2aaSAndroid Build Coastguard Worker 42*c8dee2aaSAndroid Build Coastguard Worker ninja -C out/Debug dm 43*c8dee2aaSAndroid Build Coastguard Worker out/Debug/dm --match NewUnitTest 44*c8dee2aaSAndroid Build Coastguard Worker 45*c8dee2aaSAndroid Build Coastguard Worker## Writing a Rendering Test 46*c8dee2aaSAndroid Build Coastguard Worker 47*c8dee2aaSAndroid Build Coastguard Worker1. Add a file `gm/newgmtest.cpp`: 48*c8dee2aaSAndroid Build Coastguard Worker 49*c8dee2aaSAndroid Build Coastguard Worker <!--?prettify lang=cc?--> 50*c8dee2aaSAndroid Build Coastguard Worker 51*c8dee2aaSAndroid Build Coastguard Worker /* 52*c8dee2aaSAndroid Build Coastguard Worker * Copyright ........ 53*c8dee2aaSAndroid Build Coastguard Worker * 54*c8dee2aaSAndroid Build Coastguard Worker * Use of this source code is governed by a BSD-style license 55*c8dee2aaSAndroid Build Coastguard Worker * that can be found in the LICENSE file. 56*c8dee2aaSAndroid Build Coastguard Worker */ 57*c8dee2aaSAndroid Build Coastguard Worker #include "gm.h" 58*c8dee2aaSAndroid Build Coastguard Worker DEF_SIMPLE_GM(newgmtest, canvas, 128, 128) { 59*c8dee2aaSAndroid Build Coastguard Worker canvas->clear(SK_ColorWHITE); 60*c8dee2aaSAndroid Build Coastguard Worker SkPaint p; 61*c8dee2aaSAndroid Build Coastguard Worker p.setStrokeWidth(2); 62*c8dee2aaSAndroid Build Coastguard Worker canvas->drawLine(16, 16, 112, 112, p); 63*c8dee2aaSAndroid Build Coastguard Worker } 64*c8dee2aaSAndroid Build Coastguard Worker 65*c8dee2aaSAndroid Build Coastguard Worker2. Add `newgmtest.cpp` to `gn/gm.gni`. 66*c8dee2aaSAndroid Build Coastguard Worker 67*c8dee2aaSAndroid Build Coastguard Worker3. Recompile and run test: 68*c8dee2aaSAndroid Build Coastguard Worker 69*c8dee2aaSAndroid Build Coastguard Worker <!--?prettify lang=sh?--> 70*c8dee2aaSAndroid Build Coastguard Worker 71*c8dee2aaSAndroid Build Coastguard Worker ninja -C out/Debug dm 72*c8dee2aaSAndroid Build Coastguard Worker out/Debug/dm --match newgmtest 73*c8dee2aaSAndroid Build Coastguard Worker 74*c8dee2aaSAndroid Build Coastguard Worker4. Run the GM inside Viewer: 75*c8dee2aaSAndroid Build Coastguard Worker 76*c8dee2aaSAndroid Build Coastguard Worker <!--?prettify lang=sh?--> 77*c8dee2aaSAndroid Build Coastguard Worker 78*c8dee2aaSAndroid Build Coastguard Worker ninja -C out/Debug viewer 79*c8dee2aaSAndroid Build Coastguard Worker out/Debug/viewer --slide GM_newgmtest 80*c8dee2aaSAndroid Build Coastguard Worker 81*c8dee2aaSAndroid Build Coastguard Worker## Writing a Benchmark Test 82*c8dee2aaSAndroid Build Coastguard Worker 83*c8dee2aaSAndroid Build Coastguard Worker1. Add a file `bench/FooBench.cpp`: 84*c8dee2aaSAndroid Build Coastguard Worker 85*c8dee2aaSAndroid Build Coastguard Worker <!--?prettify lang=cc?--> 86*c8dee2aaSAndroid Build Coastguard Worker 87*c8dee2aaSAndroid Build Coastguard Worker /* 88*c8dee2aaSAndroid Build Coastguard Worker * Copyright ........ 89*c8dee2aaSAndroid Build Coastguard Worker * 90*c8dee2aaSAndroid Build Coastguard Worker * Use of this source code is governed by a BSD-style license 91*c8dee2aaSAndroid Build Coastguard Worker * that can be found in the LICENSE file. 92*c8dee2aaSAndroid Build Coastguard Worker */ 93*c8dee2aaSAndroid Build Coastguard Worker #include "Benchmark.h" 94*c8dee2aaSAndroid Build Coastguard Worker #include "SkCanvas.h" 95*c8dee2aaSAndroid Build Coastguard Worker namespace { 96*c8dee2aaSAndroid Build Coastguard Worker class FooBench : public Benchmark { 97*c8dee2aaSAndroid Build Coastguard Worker public: 98*c8dee2aaSAndroid Build Coastguard Worker FooBench() {} 99*c8dee2aaSAndroid Build Coastguard Worker virtual ~FooBench() {} 100*c8dee2aaSAndroid Build Coastguard Worker protected: 101*c8dee2aaSAndroid Build Coastguard Worker const char* onGetName() override { return "Foo"; } 102*c8dee2aaSAndroid Build Coastguard Worker SkIPoint onGetSize() override { return SkIPoint{100, 100}; } 103*c8dee2aaSAndroid Build Coastguard Worker void onDraw(int loops, SkCanvas* canvas) override { 104*c8dee2aaSAndroid Build Coastguard Worker while (loops-- > 0) { 105*c8dee2aaSAndroid Build Coastguard Worker canvas->drawLine(0.0f, 0.0f, 100.0f, 100.0f, SkPaint()); 106*c8dee2aaSAndroid Build Coastguard Worker } 107*c8dee2aaSAndroid Build Coastguard Worker } 108*c8dee2aaSAndroid Build Coastguard Worker }; 109*c8dee2aaSAndroid Build Coastguard Worker } // namespace 110*c8dee2aaSAndroid Build Coastguard Worker DEF_BENCH(return new FooBench;) 111*c8dee2aaSAndroid Build Coastguard Worker 112*c8dee2aaSAndroid Build Coastguard Worker2. Add `FooBench.cpp` to `gn/bench.gni`. 113*c8dee2aaSAndroid Build Coastguard Worker 114*c8dee2aaSAndroid Build Coastguard Worker3. Recompile and run nanobench: 115*c8dee2aaSAndroid Build Coastguard Worker 116*c8dee2aaSAndroid Build Coastguard Worker <!--?prettify lang=sh?--> 117*c8dee2aaSAndroid Build Coastguard Worker 118*c8dee2aaSAndroid Build Coastguard Worker ninja -C out/Release nanobench 119*c8dee2aaSAndroid Build Coastguard Worker out/Release/nanobench --match Foo 120