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
dc43f792
Unverified
Commit
dc43f792
authored
Oct 06, 2021
by
Nikolay Igotti
Committed by
GitHub
Oct 06, 2021
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Commonize tests (#242)
parent
340cb069
Changes
13
Show whitespace changes
Inline
Side-by-side
Showing
13 changed files
with
118 additions
and
62 deletions
+118
-62
blank.yml
.github/workflows/blank.yml
+1
-1
build.gradle.kts
samples/SkiaNativeSample/build.gradle.kts
+1
-1
build.gradle.kts
skiko/build.gradle.kts
+35
-5
common.h
skiko/src/commonMain/cpp/common.h
+8
-0
Data.cc
skiko/src/commonMain/cpp/generated/Data.cc
+6
-2
SVGSVG.cc
skiko/src/commonMain/cpp/generated/svg/SVGSVG.cc
+12
-18
Data.kt
skiko/src/commonMain/kotlin/org/jetbrains/skia/Data.kt
+2
-2
SVGSVG.kt
skiko/src/commonMain/kotlin/org/jetbrains/skia/svg/SVGSVG.kt
+11
-8
SkiaTest.kt
skiko/src/commonTest/kotlin/org/jetbrains/skiko/SkiaTest.kt
+21
-17
Data.cc
skiko/src/jvmMain/cpp/common/Data.cc
+1
-1
interop.hh
skiko/src/jvmMain/cpp/common/interop.hh
+10
-1
SVGSVG.cc
skiko/src/jvmMain/cpp/common/svg/SVGSVG.cc
+10
-6
TestUtils.native.kt
...Test/kotlin/org/jetbrains/skiko/tests/TestUtils.native.kt
+0
-0
No files found.
.github/workflows/blank.yml
View file @
dc43f792
...
...
@@ -31,7 +31,7 @@ jobs:
cd $GITHUB_WORKSPACE/skiko
./gradlew jvmTest
./gradlew publishToMavenLocal
./gradlew -Pskiko.native.enabled=true macosX64Test
./gradlew -Pskiko.native.enabled=true macosX64Test
iosX64Test
./gradlew -Pskiko.native.enabled=true publishToMavenLocal
linux
:
runs-on
:
ubuntu-20.04
...
...
samples/SkiaNativeSample/build.gradle.kts
View file @
dc43f792
...
...
@@ -53,7 +53,7 @@ kotlin {
binaries
{
executable
{
entryPoint
=
"org.jetbrains.skiko.sample.main"
freeCompilerArgs
+=
listOf
(
"-linker-option
s
"
,
"-framework"
,
"-linker-option"
,
"Metal"
)
freeCompilerArgs
+=
listOf
(
"-linker-option"
,
"-framework"
,
"-linker-option"
,
"Metal"
)
}
}
}
...
...
skiko/build.gradle.kts
View file @
dc43f792
...
...
@@ -310,12 +310,21 @@ kotlin {
compilation
.
target
.
compilations
.
all
{
kotlinOptions
{
freeCompilerArgs
=
allLibraries
.
map
{
listOf
(
"-include-binary"
,
it
)
}.
flatten
()
val
linkerFlags
=
when
(
osArch
.
first
)
{
OS
.
MacOS
->
listOf
(
"-linker-option"
,
"-framework"
,
"-linker-option"
,
"Metal"
)
OS
.
IOS
->
listOf
(
"-linker-option"
,
"-framework"
,
"-linker-option"
,
"Metal"
,
"-linker-option"
,
"-framework"
,
"-linker-option"
,
"CoreGraphics"
,
"-linker-option"
,
"-framework"
,
"-linker-option"
,
"CoreText"
)
else
->
emptyList
()
}
freeCompilerArgs
=
allLibraries
.
map
{
listOf
(
"-include-binary"
,
it
)
}.
flatten
()
+
linkerFlags
}
}
val
crossCompileTask
=
registerNativeBridgesTask
(
osArch
.
first
,
osArch
.
second
)
allNativeTargets
[
osArch
]
!!
.
linkTask
=
project
.
tasks
.
register
<
Exec
>(
"linkNativeBridges$targetString"
)
{
val
info
=
allNativeTargets
[
osArch
]
!!
info
.
linkTask
=
project
.
tasks
.
register
<
Exec
>(
"linkNativeBridges$targetString"
)
{
dependsOn
(
crossCompileTask
)
val
objectFilesDir
=
crossCompileTask
.
map
{
it
.
outDir
.
get
()
}
val
objectFiles
=
project
.
fileTree
(
objectFilesDir
)
{
...
...
@@ -384,34 +393,55 @@ kotlin {
implementation
(
"org.jetbrains.kotlinx:kotlinx-coroutines-core:1.5.2"
)
}
}
val
nativeTest
by
creating
{
dependsOn
(
commonTest
)
}
if
(
hostOs
==
OS
.
MacOS
)
{
val
macosMain
by
creating
{
dependsOn
(
nativeMain
)
}
val
macosTest
by
creating
{
dependsOn
(
nativeTest
)
}
val
iosMain
by
creating
{
dependsOn
(
nativeMain
)
}
val
macosArchMain
=
when
(
targetArch
)
{
val
iosTest
by
creating
{
dependsOn
(
nativeTest
)
}
val
macosArch
=
when
(
targetArch
)
{
Arch
.
X64
->
{
val
macosX64Main
by
getting
{
dependsOn
(
macosMain
)
}
macosX64Main
val
macosX64Test
by
getting
{
dependsOn
(
macosTest
)
}
macosX64Main
to
macosX64Test
}
Arch
.
Arm64
->
{
val
macosArm64Main
by
getting
{
dependsOn
(
macosMain
)
}
macosArm64Main
val
macosArm64Test
by
getting
{
dependsOn
(
macosTest
)
}
macosArm64Main
to
macosArm64Test
}
else
->
throw
GradleException
(
"Unsupported arch $targetArch for macOS"
)
}
val
iosX64Main
by
getting
{
dependsOn
(
iosMain
)
}
val
iosX64Test
by
getting
{
dependsOn
(
iosTest
)
}
val
iosArm64Main
by
getting
{
dependsOn
(
iosMain
)
}
val
iosArm64Test
by
getting
{
dependsOn
(
iosTest
)
}
}
}
}
...
...
skiko/src/commonMain/cpp/common.h
View file @
dc43f792
...
...
@@ -85,5 +85,13 @@ void TODO(const char*);
#define SKIKO_EXPORT extern "C"
#endif
static
inline
KInt
rawBits
(
KFloat
f
)
{
union
{
KFloat
f
;
KInt
i
;
}
u
;
u
.
f
=
f
;
return
u
.
i
;
}
#endif
/* SKIKO_COMMON_H */
skiko/src/commonMain/cpp/generated/Data.cc
View file @
dc43f792
...
...
@@ -48,8 +48,12 @@ SKIKO_EXPORT KBoolean org_jetbrains_skia_Data__1nEquals
}
SKIKO_EXPORT
KNativePointer
org_jetbrains_skia_Data__1nMakeFromBytes
(
KByte
*
bytesArray
,
KNativePointer
offset
,
KNativePointer
length
)
{
TODO
(
"implement org_jetbrains_skia_Data__1nMakeFromBytes"
);
(
KByte
*
bytesArray
,
KInt
offset
,
KInt
length
)
{
KByte
*
bytes
=
reinterpret_cast
<
KByte
*>
(
malloc
(
length
));
if
(
!
bytes
)
return
0
;
memcpy
(
bytes
,
bytesArray
+
offset
,
length
);
SkData
*
instance
=
SkData
::
MakeFromMalloc
(
bytes
,
length
).
release
();
return
instance
;
}
SKIKO_EXPORT
KNativePointer
org_jetbrains_skia_Data__1nMakeFromFileName
...
...
skiko/src/commonMain/cpp/generated/svg/SVGSVG.cc
View file @
dc43f792
...
...
@@ -12,24 +12,18 @@ SKIKO_EXPORT KInt org_jetbrains_skia_svg_SVGSVG__1nGetTag
}
SKIKO_EXPORT
KInteropPointer
org_jetbrains_skia_svg_SVGSVG__1nGetX
(
KNativePointer
ptr
)
{
TODO
(
"implement org_jetbrains_skia_svg_SVGSVG__1nGetX"
);
}
#if 0
SKIKO_EXPORT KInteropPointer org_jetbrains_skia_svg_SVGSVG__1nGetX
(KNativePointer ptr) {
SkSVGSVG* instance = reinterpret_cast<SkSVGSVG*>((ptr));
return skija::svg::SVGLength::toJava(env, instance->getX());
}
#endif
SKIKO_EXPORT
KInteropPointer
org_jetbrains_skia_svg_SVGSVG__1nGetY
(
KNativePointer
ptr
)
{
TODO
(
"implement org_jetbrains_skia_svg_SVGSVG__1nGetY"
);
SKIKO_EXPORT
void
org_jetbrains_skia_svg_SVGSVG__1nGetX
(
KNativePointer
ptr
,
KInt
*
result
)
{
SkSVGSVG
*
instance
=
reinterpret_cast
<
SkSVGSVG
*>
(
ptr
);
auto
x
=
instance
->
getX
();
result
[
0
]
=
rawBits
(
x
.
value
());
result
[
1
]
=
static_cast
<
KInt
>
(
x
.
unit
());
}
SKIKO_EXPORT
void
org_jetbrains_skia_svg_SVGSVG__1nGetY
(
KNativePointer
ptr
,
KInt
*
result
)
{
SkSVGSVG
*
instance
=
reinterpret_cast
<
SkSVGSVG
*>
(
ptr
);
auto
y
=
instance
->
getY
();
result
[
0
]
=
rawBits
(
y
.
value
());
result
[
1
]
=
static_cast
<
KInt
>
(
y
.
unit
());
}
#if 0
...
...
skiko/src/commonMain/kotlin/org/jetbrains/skia/Data.kt
View file @
dc43f792
...
...
@@ -8,7 +8,7 @@ import org.jetbrains.skia.impl.Library.Companion.staticLoad
*/
class
Data
internal
constructor
(
ptr
:
NativePointer
)
:
Managed
(
ptr
,
_FinalizerHolder
.
PTR
)
{
companion
object
{
fun
makeFromBytes
(
bytes
:
ByteArray
,
offset
:
Long
=
0L
,
length
:
Long
=
bytes
.
size
.
toLong
()
):
Data
{
fun
makeFromBytes
(
bytes
:
ByteArray
,
offset
:
Int
=
0
,
length
:
Int
=
bytes
.
size
):
Data
{
Stats
.
onNativeCall
()
return
Data
(
interopScope
{
...
...
@@ -126,7 +126,7 @@ private external fun _nEquals(ptr: NativePointer, otherPtr: NativePointer): Bool
private
external
fun
_nToByteBuffer
(
ptr
:
NativePointer
):
ByteBuffer
@ExternalSymbolName
(
"org_jetbrains_skia_Data__1nMakeFromBytes"
)
private
external
fun
_nMakeFromBytes
(
bytes
:
InteropPointer
,
offset
:
Long
,
length
:
Long
):
NativePointer
private
external
fun
_nMakeFromBytes
(
bytes
:
InteropPointer
,
offset
:
Int
,
length
:
Int
):
NativePointer
@ExternalSymbolName
(
"org_jetbrains_skia_Data__1nMakeFromFileName"
)
private
external
fun
_nMakeFromFileName
(
path
:
String
?):
NativePointer
...
...
skiko/src/commonMain/kotlin/org/jetbrains/skia/svg/SVGSVG.kt
View file @
dc43f792
...
...
@@ -2,10 +2,8 @@ package org.jetbrains.skia.svg
import
org.jetbrains.skia.impl.Library.Companion.staticLoad
import
org.jetbrains.skia.*
import
org.jetbrains.skia.impl.Stats
import
org.jetbrains.skia.impl.reachabilityBarrier
import
org.jetbrains.skia.ExternalSymbolName
import
org.jetbrains.skia.impl.
NativePointer
import
org.jetbrains.skia.impl.
*
class
SVGSVG
internal
constructor
(
ptr
:
NativePointer
)
:
SVGContainer
(
ptr
)
{
companion
object
{
...
...
@@ -17,7 +15,10 @@ class SVGSVG internal constructor(ptr: NativePointer) : SVGContainer(ptr) {
var
x
:
SVGLength
get
()
=
try
{
Stats
.
onNativeCall
()
SVGSVG_nGetX
(
_ptr
)
val
result
=
withResult
(
IntArray
(
2
))
{
SVGSVG_nGetX
(
_ptr
,
it
)
}
SVGLength
(
Float
.
fromBits
(
result
[
0
]),
result
[
1
])
}
finally
{
reachabilityBarrier
(
this
)
}
...
...
@@ -31,7 +32,10 @@ class SVGSVG internal constructor(ptr: NativePointer) : SVGContainer(ptr) {
var
y
:
SVGLength
get
()
=
try
{
Stats
.
onNativeCall
()
SVGSVG_nGetY
(
_ptr
)
val
result
=
withResult
(
IntArray
(
2
))
{
SVGSVG_nGetY
(
_ptr
,
it
)
}
SVGLength
(
Float
.
fromBits
(
result
[
0
]),
result
[
1
])
}
finally
{
reachabilityBarrier
(
this
)
}
...
...
@@ -116,12 +120,11 @@ class SVGSVG internal constructor(ptr: NativePointer) : SVGContainer(ptr) {
}
}
@ExternalSymbolName
(
"org_jetbrains_skia_svg_SVGSVG__1nGetX"
)
private
external
fun
SVGSVG_nGetX
(
ptr
:
NativePointer
):
SVGLength
private
external
fun
SVGSVG_nGetX
(
ptr
:
NativePointer
,
result
:
InteropPointer
)
@ExternalSymbolName
(
"org_jetbrains_skia_svg_SVGSVG__1nGetY"
)
private
external
fun
SVGSVG_nGetY
(
ptr
:
NativePointer
):
SVGLength
private
external
fun
SVGSVG_nGetY
(
ptr
:
NativePointer
,
result
:
InteropPointer
)
@ExternalSymbolName
(
"org_jetbrains_skia_svg_SVGSVG__1nGetWidth"
)
private
external
fun
SVGSVG_nGetWidth
(
ptr
:
NativePointer
):
SVGLength
...
...
skiko/src/
jvm
Test/kotlin/org/jetbrains/skiko/SkiaTest.kt
→
skiko/src/
common
Test/kotlin/org/jetbrains/skiko/SkiaTest.kt
View file @
dc43f792
package
org.jetbrains.skiko
import
org.jetbrains.skia.*
import
org.jetbrains.skia.impl.Native
import
org.jetbrains.skia.svg.SVGDOM
import
org.jetbrains.skia.svg.SVGLengthContext
import
org.jetbrains.skia.svg.SVGLengthUnit
import
org.jetbrains.skia.svg.SVGTag
import
org.juni
t.Test
import
kotlin.tes
t.Test
class
SkiaTest
{
@Test
fun
`
color
conversion
`
()
{
fun
`color
_
conversion`
()
{
val
cs
=
ColorSpace
.
sRGB
val
color
=
cs
.
convert
(
ColorSpace
.
sRGBLinear
,
Color4f
(
1f
,
0f
,
0f
,
1f
))
assert
(
color
.
r
!=
0f
)
require
(
color
.
r
!=
0f
)
}
@Test
fun
`
color
table
`
()
{
fun
`color
_
table`
()
{
val
array
=
ByteArray
(
256
)
val
table
=
ColorFilter
.
makeTableARGB
(
array
,
array
,
array
,
array
)
assert
(
table
.
_ptr
!=
0L
)
require
(
table
.
_ptr
!=
Native
.
NullPointer
)
}
@Test
fun
`
svg
smoke
`
()
{
fun
`svg
_
smoke`
()
{
val
svgText
=
"""
<svg version="1.1"
width="300" height="200"
...
...
@@ -39,19 +40,22 @@ class SkiaTest {
"""
.
trimIndent
()
val
data
=
Data
.
makeFromBytes
(
svgText
.
encodeToByteArray
())
val
dom
=
SVGDOM
(
data
)
assert
(!
dom
.
isClosed
)
require
(!
dom
.
isClosed
)
dom
.
setContainerSize
(
Point
(
100f
,
100f
))
dom
.
setContainerSize
(
101f
,
101f
)
assert
(
dom
.
root
!=
null
)
require
(
dom
.
root
!=
null
)
val
e
=
dom
.
root
!!
assert
(
e
.
x
.
unit
==
SVGLengthUnit
.
NUMBER
)
assert
(
e
.
y
.
unit
==
SVGLengthUnit
.
NUMBER
)
assert
(
e
.
width
.
unit
==
SVGLengthUnit
.
NUMBER
)
assert
(
e
.
height
.
unit
==
SVGLengthUnit
.
NUMBER
)
assert
(
e
.
viewBox
==
null
)
assert
(
e
.
tag
==
SVGTag
.
SVG
)
require
(
e
.
x
.
unit
==
SVGLengthUnit
.
NUMBER
)
require
(
e
.
y
.
unit
==
SVGLengthUnit
.
NUMBER
)
if
(
false
)
{
// TODO: disabled until all methods implemented in JS/Native.
require
(
e
.
width
.
unit
==
SVGLengthUnit
.
NUMBER
)
require
(
e
.
height
.
unit
==
SVGLengthUnit
.
NUMBER
)
require
(
e
.
viewBox
==
null
)
require
(
e
.
tag
==
SVGTag
.
SVG
)
// e.viewBox = Rect(0f, 1f, 100f, 200f)
// assert(e.viewBox!!.top == 1f)
assert
(
e
.
getIntrinsicSize
(
SVGLengthContext
(
100f
,
100f
)).
x
==
300f
)
require
(
e
.
getIntrinsicSize
(
SVGLengthContext
(
100f
,
100f
)).
x
==
300f
)
}
}
}
\ No newline at end of file
skiko/src/jvmMain/cpp/common/Data.cc
View file @
dc43f792
...
...
@@ -40,7 +40,7 @@ extern "C" JNIEXPORT jboolean JNICALL Java_org_jetbrains_skia_DataKt__1nEquals
}
extern
"C"
JNIEXPORT
jlong
JNICALL
Java_org_jetbrains_skia_DataKt__1nMakeFromBytes
(
JNIEnv
*
env
,
jclass
jclass
,
jbyteArray
bytesArray
,
j
long
offset
,
jlong
length
)
{
(
JNIEnv
*
env
,
jclass
jclass
,
jbyteArray
bytesArray
,
j
int
offset
,
jint
length
)
{
jbyte
*
bytes
=
reinterpret_cast
<
jbyte
*>
(
malloc
(
length
));
if
(
!
bytes
)
return
0
;
env
->
GetByteArrayRegion
(
bytesArray
,
(
jsize
)
offset
,
(
jsize
)
length
,
bytes
);
...
...
skiko/src/jvmMain/cpp/common/interop.hh
View file @
dc43f792
...
...
@@ -367,3 +367,12 @@ void deleteJBytes(void* addr, void*);
#define SKIKO_JNI_VERSION JNI_VERSION_1_8
#define AS_JNI_ENV_PTR(env) ((void**)(env))
#endif
static
inline
jint
rawBits
(
jfloat
f
)
{
union
{
jfloat
f
;
jint
i
;
}
u
;
u
.
f
=
f
;
return
u
.
i
;
}
\ No newline at end of file
skiko/src/jvmMain/cpp/common/svg/SVGSVG.cc
View file @
dc43f792
...
...
@@ -4,16 +4,20 @@
#include "SkSVGSVG.h"
#include "SkSVGRenderContext.h"
extern
"C"
JNIEXPORT
jobject
JNICALL
Java_org_jetbrains_skia_svg_SVGSVGKt_SVGSVG_1nGetX
(
JNIEnv
*
env
,
jclass
jclass
,
jlong
ptr
)
{
extern
"C"
JNIEXPORT
void
JNICALL
Java_org_jetbrains_skia_svg_SVGSVGKt_SVGSVG_1nGetX
(
JNIEnv
*
env
,
jclass
jclass
,
jlong
ptr
,
jintArray
jresult
)
{
SkSVGSVG
*
instance
=
reinterpret_cast
<
SkSVGSVG
*>
(
static_cast
<
uintptr_t
>
(
ptr
));
return
skija
::
svg
::
SVGLength
::
toJava
(
env
,
instance
->
getX
());
auto
x
=
instance
->
getX
();
jint
result
[
2
]
=
{
rawBits
(
x
.
value
()),
(
jint
)
x
.
unit
()
};
env
->
SetIntArrayRegion
(
jresult
,
0
,
2
,
result
);
}
extern
"C"
JNIEXPORT
jobject
JNICALL
Java_org_jetbrains_skia_svg_SVGSVGKt_SVGSVG_1nGetY
(
JNIEnv
*
env
,
jclass
jclass
,
jlong
ptr
)
{
extern
"C"
JNIEXPORT
void
JNICALL
Java_org_jetbrains_skia_svg_SVGSVGKt_SVGSVG_1nGetY
(
JNIEnv
*
env
,
jclass
jclass
,
jlong
ptr
,
jintArray
jresult
)
{
SkSVGSVG
*
instance
=
reinterpret_cast
<
SkSVGSVG
*>
(
static_cast
<
uintptr_t
>
(
ptr
));
return
skija
::
svg
::
SVGLength
::
toJava
(
env
,
instance
->
getY
());
auto
y
=
instance
->
getY
();
jint
result
[
2
]
=
{
rawBits
(
y
.
value
()),
(
jint
)
y
.
unit
()
};
env
->
SetIntArrayRegion
(
jresult
,
0
,
2
,
result
);
}
extern
"C"
JNIEXPORT
jobject
JNICALL
Java_org_jetbrains_skia_svg_SVGSVGKt_SVGSVG_1nGetWidth
...
...
skiko/src/
macosX64Test/kotlin/TestUtils.macosx64
.kt
→
skiko/src/
nativeTest/kotlin/org/jetbrains/skiko/tests/TestUtils.native
.kt
View file @
dc43f792
File moved
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