Flutter Engine
The Flutter Engine
Loading...
Searching...
No Matches
third_party
skia
gm
pathmeasure.cpp
Go to the documentation of this file.
1
/*
2
* Copyright 2018 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 "
include/core/SkCanvas.h
"
9
#include "
include/core/SkPaint.h
"
10
#include "
include/core/SkPathBuilder.h
"
11
#include "
include/core/SkPathEffect.h
"
12
#include "
include/core/SkTypes.h
"
13
#include "
include/effects/SkDashPathEffect.h
"
14
15
// Repro case for skia:7674. Requires lots of RAM to run, and currently triggers UB:
16
// //include/private/base/SkTDArray.h:382:26:
17
// runtime error: signed integer overflow: 2147483644 + 4 cannot be represented in type 'int'
18
19
[[maybe_unused]]
static
void
path_measure_explosion
(
SkCanvas
* canvas) {
20
SkPaint
p;
21
p.setAntiAlias(
false
);
22
float
intervals[] = { 0, 10e9f };
23
p.setStyle(
SkPaint::kStroke_Style
);
24
p.setPathEffect(
SkDashPathEffect::Make
(intervals, std::size(intervals), 0));
25
26
int
quadratic_at[] = {
27
13, 68, 258, 1053, 1323, 2608, 10018, 15668, 59838, 557493, 696873, 871098, 4153813,
28
15845608, 48357008, 118059138, 288230353, 360287948, 562949933, 703687423, 1099511613, 0
29
};
30
int
next_quadratic_at = 0;
31
32
SkPathBuilder
path;
33
path.moveTo(0, 0);
34
35
int
i = 1;
36
for
(
int
points
= 1;
points
< 2147483647; ) {
37
if
(
points
== quadratic_at[next_quadratic_at]) {
38
path.quadTo(i, 0, i, 0);
39
next_quadratic_at++;
40
points
+= 2;
41
}
else
{
42
path.lineTo(i, 0);
43
points
+= 1;
44
}
45
46
i++;
47
48
if
(i == 1000000) {
49
path.moveTo(0, 0);
50
points
+= 1;
51
i = 1;
52
}
53
}
54
canvas->
drawPath
(path.detach(), p);
55
}
56
57
#if 0
58
#include "
gm/gm.h
"
59
DEF_SIMPLE_GM
(PathMeasure_explosion, canvas, 500,500) {
60
path_measure_explosion
(canvas);
61
}
62
#endif
points
static const int points[]
Definition
HairlinePathBench.cpp:26
SkCanvas.h
SkDashPathEffect.h
SkPaint.h
SkPathBuilder.h
SkPathEffect.h
SkTypes.h
SkCanvas
Definition
SkCanvas.h:106
SkCanvas::drawPath
void drawPath(const SkPath &path, const SkPaint &paint)
Definition
SkCanvas.cpp:2071
SkDashPathEffect::Make
static sk_sp< SkPathEffect > Make(const SkScalar intervals[], int count, SkScalar phase)
Definition
SkDashPathEffect.cpp:409
SkPaint
Definition
SkPaint.h:44
SkPaint::kStroke_Style
@ kStroke_Style
set to stroke geometry
Definition
SkPaint.h:194
SkPathBuilder
Definition
SkPathBuilder.h:25
path_measure_explosion
static void path_measure_explosion(SkCanvas *canvas)
Definition
pathmeasure.cpp:19
gm.h
DEF_SIMPLE_GM
#define DEF_SIMPLE_GM(NAME, CANVAS, W, H)
Definition
gm.h:50
Generated on Fri Apr 26 2024 06:16:07 for Flutter Engine by
1.9.8