@@ -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+
576585void 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
637651BENCHMARK_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
645675BENCHMARK_CAPTURE (BM_DrawRRect,
0 commit comments