Skip to content
This repository was archived by the owner on Feb 25, 2025. It is now read-only.

Commit 7752af3

Browse files
author
George Wright
committed
DrawPoints fixes/tweaks
1 parent 5587119 commit 7752af3

File tree

3 files changed

+74
-16
lines changed

3 files changed

+74
-16
lines changed

flow/display_list_benchmarks.cc

Lines changed: 46 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -552,27 +552,36 @@ std::vector<SkPoint> GetTestPoints(size_t count, SkISize canvasSize) {
552552
std::vector<SkPoint> points;
553553

554554
// Some arbitrary offsets to use when building the list of points
555-
std::vector<SkScalar> deltaXs = { 10.0f, 6.3f, 15.0f, 3.5f, 22.6f, 4.7f };
556-
std::vector<SkScalar> deltaYs = { 9.3f, -5.4f, 8.5f, -12.0f, 19.2f, -19.6f };
555+
std::vector<SkScalar> deltaX = {10.0f, 6.3f, 15.0f, 3.5f, 22.6f, 4.7f};
556+
std::vector<SkScalar> deltaY = {9.3f, -5.4f, 8.5f, -12.0f, 19.2f, -19.6f};
557557

558558
SkPoint current = SkPoint::Make(0.0f, 0.0f);
559-
SkScalar deltaX, deltaY;
560559
for (size_t i = 0; i < count; i++) {
561560
points.push_back(current);
562-
deltaX = deltaXs[i % deltaXs.size()];
563-
deltaY = deltaYs[i % deltaYs.size()];
564-
if (current.x() + deltaX > canvasSize.width()) {
565-
current.offset(-canvasSize.width() + deltaX, 25.0f + deltaY);
566-
} else if (current.y() + deltaY > canvasSize.height()) {
567-
current = SkPoint::Make(deltaX, deltaY);
568-
} else {
569-
current.offset(deltaX, deltaY);
561+
current.offset(deltaX[i % deltaX.size()], deltaY[i % deltaY.size()]);
562+
if (current.x() > canvasSize.width()) {
563+
current.offset(-canvasSize.width(), 25.0f);
564+
}
565+
if (current.y() > canvasSize.height()) {
566+
current.offset(0.0f, -canvasSize.height());
570567
}
571568
}
572569

573570
return points;
574571
}
575572

573+
std::string PointModeToString(SkCanvas::PointMode mode) {
574+
switch (mode) {
575+
case SkCanvas::kLines_PointMode:
576+
return "Points";
577+
case SkCanvas::kPolygon_PointMode:
578+
return "Polygon";
579+
case SkCanvas::kPoints_PointMode:
580+
default:
581+
return "Points";
582+
}
583+
}
584+
576585
void BM_DrawPoints(benchmark::State& state,
577586
std::unique_ptr<CanvasProvider> canvas_provider,
578587
SkCanvas::PointMode mode) {
@@ -582,17 +591,22 @@ void BM_DrawPoints(benchmark::State& state,
582591
auto canvas = canvas_provider->GetSurface()->getCanvas();
583592
builder.setStrokeWidth(5.0f);
584593

585-
std::vector<SkPoint> points = GetTestPoints(100000, SkISize::Make(1024, 1024));
586-
builder.drawPoints(SkCanvas::kPoints_PointMode, points.size(), points.data());
594+
size_t pointCount = state.range(0);
595+
state.SetComplexityN(pointCount);
596+
state.counters["PointCount"] = pointCount;
597+
std::vector<SkPoint> points =
598+
GetTestPoints(pointCount, SkISize::Make(1024, 1024));
599+
builder.drawPoints(mode, points.size(), points.data());
587600

588601
auto displaylist = builder.Build();
589602

590603
for (auto _ : state) {
591604
displaylist->RenderTo(canvas);
592605
canvas_provider->GetSurface()->flushAndSubmit(true);
593606
}
594-
607+
595608
auto filename = canvas_provider->BackendName() + "-DrawPoints-" +
609+
PointModeToString(mode) + "-" + std::to_string(pointCount) +
596610
".png";
597611
canvas_provider->Snapshot(filename);
598612
}
@@ -635,11 +649,27 @@ BENCHMARK_CAPTURE(BM_DrawArc,
635649
->Unit(benchmark::kMillisecond);
636650

637651
BENCHMARK_CAPTURE(BM_DrawPoints,
638-
Software,
652+
Points/Software,
639653
std::make_unique<SoftwareCanvasProvider>(),
640654
SkCanvas::kPoints_PointMode)
641655
->RangeMultiplier(2)
642-
->Range(128, 2048)
656+
->Range(1024, 32768)
657+
->Unit(benchmark::kMillisecond);
658+
659+
BENCHMARK_CAPTURE(BM_DrawPoints,
660+
Lines/Software,
661+
std::make_unique<SoftwareCanvasProvider>(),
662+
SkCanvas::kLines_PointMode)
663+
->RangeMultiplier(2)
664+
->Range(1024, 32768)
665+
->Unit(benchmark::kMillisecond);
666+
667+
BENCHMARK_CAPTURE(BM_DrawPoints,
668+
Polygon/Software,
669+
std::make_unique<SoftwareCanvasProvider>(),
670+
SkCanvas::kPolygon_PointMode)
671+
->RangeMultiplier(2)
672+
->Range(1024, 32768)
643673
->Unit(benchmark::kMillisecond);
644674

645675
BENCHMARK_CAPTURE(BM_DrawRRect,

flow/display_list_benchmarks.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
#include "flutter/fml/mapping.h"
1010
#include "flutter/testing/testing.h"
1111

12+
#include "third_party/skia/include/core/SkCanvas.h"
1213
#include "third_party/skia/include/core/SkPath.h"
1314
#include "third_party/skia/include/core/SkSurface.h"
1415
#include "third_party/skia/include/core/SkVertices.h"
@@ -61,6 +62,9 @@ void BM_DrawRRect(benchmark::State& state,
6162
void BM_DrawPath(benchmark::State& state,
6263
std::unique_ptr<CanvasProvider> canvas_provider,
6364
SkPath::Verb type);
65+
void BM_DrawPoints(benchmark::State& state,
66+
std::unique_ptr<CanvasProvider> canvas_provider,
67+
SkCanvas::PointMode mode);
6468
void BM_DrawVertices(benchmark::State& state,
6569
std::unique_ptr<CanvasProvider> canvas_provider,
6670
SkVertices::VertexMode mode);

flow/display_list_benchmarks_gl.cc

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,30 @@ BENCHMARK_CAPTURE(BM_DrawCircle, OpenGL, std::make_unique<OpenGLCanvasProvider>(
6666
->UseRealTime()
6767
->Unit(benchmark::kMillisecond);
6868

69+
BENCHMARK_CAPTURE(BM_DrawPoints,
70+
Points/OpenGL,
71+
std::make_unique<OpenGLCanvasProvider>(),
72+
SkCanvas::kPoints_PointMode)
73+
->RangeMultiplier(2)
74+
->Range(1024, 32768)
75+
->Unit(benchmark::kMillisecond);
76+
77+
BENCHMARK_CAPTURE(BM_DrawPoints,
78+
Lines/OpenGL,
79+
std::make_unique<OpenGLCanvasProvider>(),
80+
SkCanvas::kLines_PointMode)
81+
->RangeMultiplier(2)
82+
->Range(1024, 32768)
83+
->Unit(benchmark::kMillisecond);
84+
85+
BENCHMARK_CAPTURE(BM_DrawPoints,
86+
Polygon/OpenGL,
87+
std::make_unique<OpenGLCanvasProvider>(),
88+
SkCanvas::kPolygon_PointMode)
89+
->RangeMultiplier(2)
90+
->Range(1024, 32768)
91+
->Unit(benchmark::kMillisecond);
92+
6993
BENCHMARK_CAPTURE(BM_DrawRRect,
7094
Symmetric/OpenGL,
7195
std::make_unique<OpenGLCanvasProvider>(),

0 commit comments

Comments
 (0)