130 lines
3.0 KiB
Markdown
130 lines
3.0 KiB
Markdown
|
---
|
||
|
title: 'Writing Skia Tests'
|
||
|
linkTitle: 'Writing Skia Tests'
|
||
|
---
|
||
|
|
||
|
- [Unit Tests](#test)
|
||
|
- [Rendering Tests](#gm)
|
||
|
- [Benchmark Tests](#bench)
|
||
|
|
||
|
We assume you have already synced Skia's dependencies and set up Skia's build
|
||
|
system.
|
||
|
|
||
|
<!--?prettify lang=sh?-->
|
||
|
|
||
|
python2 tools/git-sync-deps
|
||
|
bin/gn gen out/Debug
|
||
|
bin/gn gen out/Release --args='is_debug=false'
|
||
|
|
||
|
<span id="test"></span>
|
||
|
|
||
|
## Writing a Unit Test
|
||
|
|
||
|
1. Add a file `tests/NewUnitTest.cpp`:
|
||
|
|
||
|
<!--?prettify lang=cc?-->
|
||
|
|
||
|
/*
|
||
|
* Copyright ........
|
||
|
*
|
||
|
* Use of this source code is governed by a BSD-style license
|
||
|
* that can be found in the LICENSE file.
|
||
|
*/
|
||
|
#include "Test.h"
|
||
|
DEF_TEST(NewUnitTest, reporter) {
|
||
|
if (1 + 1 != 2) {
|
||
|
ERRORF(reporter, "%d + %d != %d", 1, 1, 2);
|
||
|
}
|
||
|
bool lifeIsGood = true;
|
||
|
REPORTER_ASSERT(reporter, lifeIsGood);
|
||
|
}
|
||
|
|
||
|
2. Add `NewUnitTest.cpp` to `gn/tests.gni`.
|
||
|
|
||
|
3. Recompile and run test:
|
||
|
|
||
|
<!--?prettify lang=sh?-->
|
||
|
|
||
|
ninja -C out/Debug dm
|
||
|
out/Debug/dm --match NewUnitTest
|
||
|
|
||
|
<span id="gm"></span>
|
||
|
|
||
|
## Writing a Rendering Test
|
||
|
|
||
|
1. Add a file `gm/newgmtest.cpp`:
|
||
|
|
||
|
<!--?prettify lang=cc?-->
|
||
|
|
||
|
/*
|
||
|
* Copyright ........
|
||
|
*
|
||
|
* Use of this source code is governed by a BSD-style license
|
||
|
* that can be found in the LICENSE file.
|
||
|
*/
|
||
|
#include "gm.h"
|
||
|
DEF_SIMPLE_GM(newgmtest, canvas, 128, 128) {
|
||
|
canvas->clear(SK_ColorWHITE);
|
||
|
SkPaint p;
|
||
|
p.setStrokeWidth(2);
|
||
|
canvas->drawLine(16, 16, 112, 112, p);
|
||
|
}
|
||
|
|
||
|
2. Add `newgmtest.cpp` to `gn/gm.gni`.
|
||
|
|
||
|
3. Recompile and run test:
|
||
|
|
||
|
<!--?prettify lang=sh?-->
|
||
|
|
||
|
ninja -C out/Debug dm
|
||
|
out/Debug/dm --match newgmtest
|
||
|
|
||
|
4. Run the GM inside Viewer:
|
||
|
|
||
|
<!--?prettify lang=sh?-->
|
||
|
|
||
|
ninja -C out/Debug viewer
|
||
|
out/Debug/viewer --slide GM_newgmtest
|
||
|
|
||
|
<span id="bench"></span>
|
||
|
|
||
|
## Writing a Benchmark Test
|
||
|
|
||
|
1. Add a file `bench/FooBench.cpp`:
|
||
|
|
||
|
<!--?prettify lang=cc?-->
|
||
|
|
||
|
/*
|
||
|
* Copyright ........
|
||
|
*
|
||
|
* Use of this source code is governed by a BSD-style license
|
||
|
* that can be found in the LICENSE file.
|
||
|
*/
|
||
|
#include "Benchmark.h"
|
||
|
#include "SkCanvas.h"
|
||
|
namespace {
|
||
|
class FooBench : public Benchmark {
|
||
|
public:
|
||
|
FooBench() {}
|
||
|
virtual ~FooBench() {}
|
||
|
protected:
|
||
|
const char* onGetName() override { return "Foo"; }
|
||
|
SkIPoint onGetSize() override { return SkIPoint{100, 100}; }
|
||
|
void onDraw(int loops, SkCanvas* canvas) override {
|
||
|
while (loops-- > 0) {
|
||
|
canvas->drawLine(0.0f, 0.0f, 100.0f, 100.0f, SkPaint());
|
||
|
}
|
||
|
}
|
||
|
};
|
||
|
} // namespace
|
||
|
DEF_BENCH(return new FooBench;)
|
||
|
|
||
|
2. Add `FooBench.cpp` to `gn/bench.gni`.
|
||
|
|
||
|
3. Recompile and run nanobench:
|
||
|
|
||
|
<!--?prettify lang=sh?-->
|
||
|
|
||
|
ninja -C out/Release nanobench
|
||
|
out/Release/nanobench --match Foo
|