Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
S
skiko
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
liuqiang
skiko
Commits
4c99e1d3
Commit
4c99e1d3
authored
Mar 31, 2021
by
Igor Demin
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
SkiaWindowPerfomanceTest. Fix compilation issue
parent
6e79a5c8
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
73 additions
and
73 deletions
+73
-73
SkiaWindowPerformanceTest.kt
...t/kotlin/org/jetbrains/skiko/SkiaWindowPerformanceTest.kt
+73
-73
No files found.
samples/SkijaInjectSample/src/test/kotlin/org/jetbrains/skiko/SkiaWindowPerformanceTest.kt
View file @
4c99e1d3
...
@@ -44,94 +44,94 @@ native crash in SkiaWindowTest "render single window"
...
@@ -44,94 +44,94 @@ native crash in SkiaWindowTest "render single window"
// .popStyle()
// .popStyle()
// .build()
// .build()
@Test
private
class
TestWindow
(
fun
`
FPS
is
near
display
refresh
rate
(
multiple
windows
)
`
()
=
swingTest
{
width
:
Int
,
class
TestWindow
(
height
:
Int
,
width
:
Int
,
private
val
frameCount
:
Int
,
height
:
Int
,
private
val
deviatedTerminalCount
:
Int
private
val
frameCount
:
Int
,
)
:
SkiaWindow
()
{
private
val
deviatedTerminalCount
:
Int
private
val
expectedDeviatePercent1
=
0.05
)
:
SkiaWindow
()
{
private
val
expectedDeviatePercent2
=
0.15
private
val
expectedDeviatePercent1
=
0.05
private
val
expectedDeviatePercent3
=
0.30
private
val
expectedDeviatePercent2
=
0.15
private
val
expectedDeviatePercentTerminal
=
0.50
private
val
expectedDeviatePercent3
=
0.30
private
val
expectedDeviatePercentTerminal
=
0.50
private
val
expectedFrameNanos
=
1
E9
/
graphicsConfiguration
.
device
.
displayMode
.
refreshRate
private
val
frameTimes
=
mutableListOf
<
Long
>()
private
val
expectedFrameNanos
=
1
E9
/
graphicsConfiguration
.
device
.
displayMode
.
refreshRate
private
var
canCollect
=
false
private
val
frameTimes
=
mutableListOf
<
Long
>()
private
var
canCollect
=
false
val
frameTimeDeltas
get
()
=
frameTimes
.
zipWithNext
{
a
,
b
->
b
-
a
}
val
frameTimeDeltas
get
()
=
frameTimes
.
zipWithNext
{
a
,
b
->
b
-
a
}
val
isCollected
get
()
=
frameTimes
.
size
>=
frameCount
val
isCollected
get
()
=
frameTimes
.
size
>=
frameCount
private
fun
deviated
(
deviatePercent
:
Double
)
=
frameTimeDeltas
.
filter
{
abs
(
log2
(
it
/
expectedFrameNanos
))
>
log2
(
1
+
deviatePercent
)
private
fun
deviated
(
deviatePercent
:
Double
)
=
frameTimeDeltas
.
filter
{
}
abs
(
log2
(
it
/
expectedFrameNanos
))
>
log2
(
1
+
deviatePercent
)
}
init
{
init
{
setSize
(
width
,
height
)
setSize
(
width
,
height
)
defaultCloseOperation
=
WindowConstants
.
DISPOSE_ON_CLOSE
defaultCloseOperation
=
WindowConstants
.
DISPOSE_ON_CLOSE
layer
.
renderer
=
object
:
SkiaRenderer
{
layer
.
renderer
=
object
:
SkiaRenderer
{
override
fun
onRender
(
canvas
:
Canvas
,
width
:
Int
,
height
:
Int
,
nanoTime
:
Long
)
{
override
fun
onRender
(
canvas
:
Canvas
,
width
:
Int
,
height
:
Int
,
nanoTime
:
Long
)
{
if
(
canCollect
&&
frameTimes
.
size
<
frameCount
)
{
if
(
canCollect
&&
frameTimes
.
size
<
frameCount
)
{
frameTimes
.
add
(
System
.
nanoTime
())
// we check the real time, not the time provided by the argument
frameTimes
.
add
(
System
.
nanoTime
())
// we check the real time, not the time provided by the argument
}
layer
.
needRedraw
()
}
}
layer
.
needRedraw
()
}
}
isUndecorated
=
true
isVisible
=
true
}
}
isUndecorated
=
true
isVisible
=
true
}
fun
startCollect
()
{
fun
startCollect
()
{
canCollect
=
true
canCollect
=
true
}
}
fun
printInfo
()
{
fun
printInfo
()
{
println
(
"[Window frame times ($frameCount frames)]"
)
println
(
"[Window frame times ($frameCount frames)]"
)
val
millis
=
frameTimeDeltas
.
map
{
it
/
1
E6
}
val
millis
=
frameTimeDeltas
.
map
{
it
/
1
E6
}
println
(
"Deltas "
+
millis
.
map
{
String
.
format
(
"%.1f"
,
it
)
})
println
(
"Deltas "
+
millis
.
map
{
String
.
format
(
"%.1f"
,
it
)
})
println
(
"Average %.2f"
.
format
(
millis
.
average
()))
println
(
"Average %.2f"
.
format
(
millis
.
average
()))
println
(
"Standard deviation %.2f"
.
format
(
millis
.
stddev
()))
println
(
"Standard deviation %.2f"
.
format
(
millis
.
stddev
()))
fun
deviateMessage
(
percent
:
Double
,
deviated
:
List
<
Long
>):
String
{
fun
deviateMessage
(
percent
:
Double
,
deviated
:
List
<
Long
>):
String
{
val
deviatedStr
=
deviated
.
map
{
String
.
format
(
"%.1f"
,
it
/
1
E6
)
}
val
deviatedStr
=
deviated
.
map
{
String
.
format
(
"%.1f"
,
it
/
1
E6
)
}
val
percentTStr
=
(
percent
*
100
).
roundToInt
()
val
percentTStr
=
(
percent
*
100
).
roundToInt
()
return
"$deviatedStr deviate by $percentTStr%"
return
"$deviatedStr deviate by $percentTStr%"
}
}
val
deviated1
=
deviated
(
expectedDeviatePercent1
)
val
deviated1
=
deviated
(
expectedDeviatePercent1
)
val
deviated2
=
deviated
(
expectedDeviatePercent2
)
val
deviated2
=
deviated
(
expectedDeviatePercent2
)
val
deviated3
=
deviated
(
expectedDeviatePercent3
)
val
deviated3
=
deviated
(
expectedDeviatePercent3
)
val
deviatedTerminal
=
deviated
(
expectedDeviatePercentTerminal
)
val
deviatedTerminal
=
deviated
(
expectedDeviatePercentTerminal
)
println
(
deviateMessage
(
expectedDeviatePercent1
,
deviated1
-
deviated2
-
deviated3
-
deviatedTerminal
))
println
(
deviateMessage
(
expectedDeviatePercent1
,
deviated1
-
deviated2
-
deviated3
-
deviatedTerminal
))
println
(
deviateMessage
(
expectedDeviatePercent2
,
deviated2
-
deviated3
-
deviatedTerminal
))
println
(
deviateMessage
(
expectedDeviatePercent2
,
deviated2
-
deviated3
-
deviatedTerminal
))
println
(
deviateMessage
(
expectedDeviatePercent3
,
deviated3
-
deviatedTerminal
))
println
(
deviateMessage
(
expectedDeviatePercent3
,
deviated3
-
deviatedTerminal
))
if
(
deviatedTerminal
.
size
>
deviatedTerminalCount
)
{
if
(
deviatedTerminal
.
size
>
deviatedTerminalCount
)
{
throw
AssertionError
(
deviateMessage
(
expectedDeviatePercentTerminal
,
deviatedTerminal
))
throw
AssertionError
(
deviateMessage
(
expectedDeviatePercentTerminal
,
deviatedTerminal
))
}
else
{
}
else
{
println
(
deviateMessage
(
expectedDeviatePercentTerminal
,
deviatedTerminal
))
println
(
deviateMessage
(
expectedDeviatePercentTerminal
,
deviatedTerminal
))
}
println
()
}
}
private
fun
List
<
Double
>.
stddev
():
Double
{
println
()
val
average
=
average
()
fun
f
(
x
:
Double
)
=
(
x
-
average
)
*
(
x
-
average
)
return
sqrt
(
map
(
::
f
).
average
())
}
}
}
suspend
fun
awaitFrameCollection
(
windows
:
List
<
TestWindow
>)
{
private
fun
List
<
Double
>.
stddev
():
Double
{
while
(!
windows
.
all
(
TestWindow
::
isCollected
))
{
val
average
=
average
()
delay
(
100
)
fun
f
(
x
:
Double
)
=
(
x
-
average
)
*
(
x
-
average
)
}
return
sqrt
(
map
(
::
f
).
average
())
}
}
}
private
suspend
fun
awaitFrameCollection
(
windows
:
List
<
TestWindow
>)
{
while
(!
windows
.
all
(
TestWindow
::
isCollected
))
{
delay
(
100
)
}
}
@Test
fun
`
FPS
is
near
display
refresh
rate
(
multiple
windows
)
`
()
=
swingTest
{
val
windows
=
(
1
..
3
).
map
{
index
->
val
windows
=
(
1
..
3
).
map
{
index
->
TestWindow
(
width
=
40
,
height
=
20
,
frameCount
=
300
,
deviatedTerminalCount
=
10
).
apply
{
TestWindow
(
width
=
40
,
height
=
20
,
frameCount
=
300
,
deviatedTerminalCount
=
10
).
apply
{
location
=
Point
((
index
+
1
)
*
200
,
200
)
location
=
Point
((
index
+
1
)
*
200
,
200
)
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment