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
c20bf0c5
Unverified
Commit
c20bf0c5
authored
Nov 12, 2021
by
Aleksandr Veselov
Committed by
GitHub
Nov 12, 2021
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Implement `skottie::Logger` for native (#376)
parent
23a7d626
Changes
7
Hide whitespace changes
Inline
Side-by-side
Showing
7 changed files
with
156 additions
and
31 deletions
+156
-31
Native.kt
...o/src/commonMain/kotlin/org/jetbrains/skia/impl/Native.kt
+10
-0
Logger.kt
...rc/commonMain/kotlin/org/jetbrains/skia/skottie/Logger.kt
+19
-5
LoggerTest.kt
...ommonTest/kotlin/org/jetbrains/skia/skottie/LoggerTest.kt
+34
-0
Logger.cc
skiko/src/jvmMain/cpp/common/skottie/Logger.cc
+9
-9
Logger.jvm.kt
...c/jvmMain/kotlin/org/jetbrains/skia/skottie/Logger.jvm.kt
+9
-0
Logger.cc
skiko/src/nativeJsMain/cpp/skottie/Logger.cc
+57
-17
Logger.nativejs.kt
...Main/kotlin/org/jetbrains/skia/skottie/Logger.nativejs.kt
+18
-0
No files found.
skiko/src/commonMain/kotlin/org/jetbrains/skia/impl/Native.kt
View file @
c20bf0c5
...
@@ -150,6 +150,16 @@ inline fun withStringReferenceResult(block: () -> NativePointer): String {
...
@@ -150,6 +150,16 @@ inline fun withStringReferenceResult(block: () -> NativePointer): String {
return
string
.
toString
()
return
string
.
toString
()
}
}
@Suppress
(
"NON_PUBLIC_CALL_FROM_PUBLIC_INLINE"
)
inline
fun
withStringReferenceNullableResult
(
block
:
()
->
NativePointer
):
String
?
{
val
ptr
=
block
()
if
(
ptr
==
Native
.
NullPointer
)
return
null
val
string
=
ManagedString
(
ptr
,
false
)
return
string
.
toString
()
}
interface
ArrayInteropDecoder
<
T
>
{
interface
ArrayInteropDecoder
<
T
>
{
fun
getArrayElement
(
array
:
InteropPointer
,
index
:
Int
):
T
fun
getArrayElement
(
array
:
InteropPointer
,
index
:
Int
):
T
fun
getArraySize
(
array
:
InteropPointer
):
Int
fun
getArraySize
(
array
:
InteropPointer
):
Int
...
...
skiko/src/commonMain/kotlin/org/jetbrains/skia/skottie/Logger.kt
View file @
c20bf0c5
@file
:
Suppress
(
"NESTED_EXTERNAL_DECLARATION"
)
@file
:
Suppress
(
"NESTED_EXTERNAL_DECLARATION"
)
package
org.jetbrains.skia.skottie
package
org.jetbrains.skia.skottie
import
org.jetbrains.skia.ExternalSymbolName
import
org.jetbrains.skia.impl.InteropPointer
import
org.jetbrains.skia.impl.Library.Companion.staticLoad
import
org.jetbrains.skia.impl.Library.Companion.staticLoad
import
org.jetbrains.skia.impl.NativePointer
import
org.jetbrains.skia.impl.RefCnt
import
org.jetbrains.skia.impl.RefCnt
import
org.jetbrains.skia.impl.Stats
import
org.jetbrains.skia.impl.Stats
import
org.jetbrains.skia.ExternalSymbolName
import
org.jetbrains.skia.impl.NativePointer
/**
/**
*
*
...
@@ -19,17 +20,30 @@ abstract class Logger : RefCnt(_nMake()) {
...
@@ -19,17 +20,30 @@ abstract class Logger : RefCnt(_nMake()) {
}
}
}
}
abstract
fun
log
(
level
:
LogLevel
?,
message
:
String
?
,
json
:
String
?)
abstract
fun
log
(
level
:
LogLevel
,
message
:
String
,
json
:
String
?)
init
{
init
{
Stats
.
onNativeCall
()
Stats
.
onNativeCall
()
Stats
.
onNativeCall
()
Stats
.
onNativeCall
()
_n
Init
(
_ptr
)
do
Init
(
_ptr
)
}
}
}
}
internal
expect
fun
Logger
.
doInit
(
ptr
:
NativePointer
)
@ExternalSymbolName
(
"org_jetbrains_skia_skottie_Logger__1nMake"
)
@ExternalSymbolName
(
"org_jetbrains_skia_skottie_Logger__1nMake"
)
private
external
fun
_nMake
():
NativePointer
private
external
fun
_nMake
():
NativePointer
// Native/JS only
@ExternalSymbolName
(
"org_jetbrains_skia_skottie_Logger__1nInit"
)
@ExternalSymbolName
(
"org_jetbrains_skia_skottie_Logger__1nInit"
)
external
fun
_nInit
(
ptr
:
NativePointer
)
internal
external
fun
Logger_nInit
(
ptr
:
NativePointer
,
onLog
:
InteropPointer
)
@ExternalSymbolName
(
"org_jetbrains_skia_skottie_Logger__1nGetLogMessage"
)
internal
external
fun
Logger_nGetLogMessage
(
ptr
:
NativePointer
):
NativePointer
@ExternalSymbolName
(
"org_jetbrains_skia_skottie_Logger__1nGetLogJson"
)
internal
external
fun
Logger_nGetLogJson
(
ptr
:
NativePointer
):
NativePointer
@ExternalSymbolName
(
"org_jetbrains_skia_skottie_Logger__1nGetLogLevel"
)
internal
external
fun
Logger_nGetLogLevel
(
ptr
:
NativePointer
):
Int
skiko/src/commonTest/kotlin/org/jetbrains/skia/skottie/LoggerTest.kt
0 → 100644
View file @
c20bf0c5
package
org.jetbrains.skia.skottie
import
kotlin.test.Test
import
kotlin.test.assertEquals
import
kotlin.test.assertNull
class
LoggerTest
{
@Test
fun
canLog
()
{
var
actualLevel
:
LogLevel
?
=
null
var
actualMessage
:
String
?
=
null
var
actualJson
:
String
?
=
null
val
logger
=
object
:
Logger
()
{
override
fun
log
(
level
:
LogLevel
,
message
:
String
,
json
:
String
?)
{
actualLevel
=
level
actualMessage
=
message
actualJson
=
json
}
}
try
{
AnimationBuilder
().
setLogger
(
logger
).
buildFromString
(
"""{"nm": "Test","v": "1.42.0","ip": <ERROR HERE>,"op": 180,"fr": 60,"w": 32,"h": 32,"layers": []}"""
)
}
catch
(
e
:
IllegalArgumentException
)
{
// Must fail
}
assertEquals
(
"Failed to parse JSON input.\n"
,
actualMessage
)
assertEquals
(
LogLevel
.
ERROR
,
actualLevel
)
assertNull
(
actualJson
)
}
}
\ No newline at end of file
skiko/src/jvmMain/cpp/common/skottie/Logger.cc
View file @
c20bf0c5
...
@@ -4,18 +4,18 @@
...
@@ -4,18 +4,18 @@
using
namespace
skottie
;
using
namespace
skottie
;
class
Ski
jaLoggerImpl
:
public
Logger
{
class
Ski
koLogger
:
public
Logger
{
public
:
public
:
Ski
jaLoggerImpl
()
{
Ski
koLogger
()
{
}
}
~
Ski
jaLoggerImpl
()
{
~
Ski
koLogger
()
{
fEnv
->
Delete
Weak
GlobalRef
(
fObject
);
fEnv
->
DeleteGlobalRef
(
fObject
);
}
}
void
init
(
JNIEnv
*
e
,
jobject
o
)
{
void
init
(
JNIEnv
*
e
,
jobject
o
)
{
fEnv
=
e
;
fEnv
=
e
;
fObject
=
fEnv
->
New
Weak
GlobalRef
(
o
);
fObject
=
fEnv
->
NewGlobalRef
(
o
);
}
}
public
:
public
:
...
@@ -39,12 +39,12 @@ private:
...
@@ -39,12 +39,12 @@ private:
extern
"C"
JNIEXPORT
jlong
JNICALL
Java_org_jetbrains_skia_skottie_LoggerKt__1nMake
extern
"C"
JNIEXPORT
jlong
JNICALL
Java_org_jetbrains_skia_skottie_LoggerKt__1nMake
(
JNIEnv
*
env
,
jclass
jclass
)
{
(
JNIEnv
*
env
,
jclass
jclass
)
{
Ski
jaLoggerImpl
*
instance
=
new
SkijaLoggerImpl
();
Ski
koLogger
*
instance
=
new
SkikoLogger
();
return
reinterpret_cast
<
jlong
>
(
instance
);
return
reinterpret_cast
<
jlong
>
(
instance
);
}
}
extern
"C"
JNIEXPORT
void
JNICALL
Java_org_jetbrains_skia_skottie_LoggerKt__1nInit
extern
"C"
JNIEXPORT
void
JNICALL
Java_org_jetbrains_skia_skottie_Logger
_1jvm
Kt__1nInit
(
JNIEnv
*
env
,
jobject
jthis
,
jlong
ptr
)
{
(
JNIEnv
*
env
,
j
class
jclass
,
j
object
jthis
,
jlong
ptr
)
{
Ski
jaLoggerImpl
*
instance
=
reinterpret_cast
<
SkijaLoggerImpl
*>
(
static_cast
<
uintptr_t
>
(
ptr
));
Ski
koLogger
*
instance
=
reinterpret_cast
<
SkikoLogger
*>
(
static_cast
<
uintptr_t
>
(
ptr
));
instance
->
init
(
env
,
jthis
);
instance
->
init
(
env
,
jthis
);
}
}
skiko/src/jvmMain/kotlin/org/jetbrains/skia/skottie/Logger.jvm.kt
0 → 100644
View file @
c20bf0c5
package
org.jetbrains.skia.skottie
import
org.jetbrains.skia.impl.NativePointer
internal
actual
fun
Logger
.
doInit
(
ptr
:
NativePointer
)
{
_nInit
(
this
,
ptr
)
}
private
external
fun
_nInit
(
thisPtr
:
Logger
,
ptr
:
NativePointer
)
\ No newline at end of file
skiko/src/nativeJsMain/cpp/skottie/Logger.cc
View file @
c20bf0c5
...
@@ -5,32 +5,72 @@
...
@@ -5,32 +5,72 @@
using
namespace
skottie
;
using
namespace
skottie
;
#include "common.h"
#include "common.h"
class
SkikoLogger
:
public
Logger
{
public
:
SkikoLogger
()
:
_log
(
nullptr
)
{}
void
init
(
KInteropPointer
onLog
)
{
_log
=
KVoidCallback
(
onLog
);
}
SkString
*
logMessage
()
{
return
&
_logMessage
;
}
SkString
*
logJson
()
{
return
_hasLogJson
?
&
_logJson
:
nullptr
;
}
Level
logLevel
()
const
{
return
_logLevel
;
}
void
log
(
Level
level
,
const
char
message
[],
const
char
*
json
=
nullptr
)
override
{
_logLevel
=
level
;
_logMessage
=
message
;
_hasLogJson
=
json
!=
nullptr
;
_logJson
=
json
;
_log
();
_logLevel
=
Level
::
kError
;
_logMessage
=
nullptr
;
_logJson
=
nullptr
;
_hasLogJson
=
false
;
}
private
:
SkString
_logMessage
;
SkString
_logJson
;
KVoidCallback
_log
;
Level
_logLevel
;
bool
_hasLogJson
;
};
SKIKO_EXPORT
KNativePointer
org_jetbrains_skia_skottie_Logger__1nMake
SKIKO_EXPORT
KNativePointer
org_jetbrains_skia_skottie_Logger__1nMake
()
{
()
{
TODO
(
"implement org_jetbrains_skia_skottie_Logger__1nMake"
);
SkikoLogger
*
instance
=
sk_sp
<
SkikoLogger
>
(
new
SkikoLogger
()).
release
();
}
#if 0
SKIKO_EXPORT KNativePointer org_jetbrains_skia_skottie_Logger__1nMake
() {
SkijaLoggerImpl* instance = new SkijaLoggerImpl();
return
reinterpret_cast
<
KNativePointer
>
(
instance
);
return
reinterpret_cast
<
KNativePointer
>
(
instance
);
}
}
#endif
SKIKO_EXPORT
void
org_jetbrains_skia_skottie_Logger__1nInit
SKIKO_EXPORT
void
org_jetbrains_skia_skottie_Logger__1nInit
(
KNativePointer
ptr
,
KInteropPointer
onLog
)
{
SkikoLogger
*
instance
=
reinterpret_cast
<
SkikoLogger
*>
((
ptr
));
instance
->
init
(
onLog
);
}
SKIKO_EXPORT
KInteropPointer
org_jetbrains_skia_skottie_Logger__1nGetLogMessage
(
KNativePointer
ptr
)
{
(
KNativePointer
ptr
)
{
TODO
(
"implement org_jetbrains_skia_skottie_Logger__1nInit"
);
SkikoLogger
*
instance
=
reinterpret_cast
<
SkikoLogger
*>
((
ptr
));
return
reinterpret_cast
<
KInteropPointer
>
(
instance
->
logMessage
());
}
}
#if 0
SKIKO_EXPORT
KInteropPointer
org_jetbrains_skia_skottie_Logger__1nGetLogJson
SKIKO_EXPORT void org_jetbrains_skia_skottie_Logger__1nInit
(
KNativePointer
ptr
)
{
(
KNativePointer
ptr
)
{
Ski
jaLoggerImpl* instance = reinterpret_cast<SkijaLoggerImpl
*>((ptr));
Ski
koLogger
*
instance
=
reinterpret_cast
<
SkikoLogger
*>
((
ptr
));
instance->init(env, jthis
);
return
reinterpret_cast
<
KInteropPointer
>
(
instance
->
logJson
()
);
}
}
#endif
SKIKO_EXPORT
KInt
org_jetbrains_skia_skottie_Logger__1nGetLogLevel
(
KNativePointer
ptr
)
{
SkikoLogger
*
instance
=
reinterpret_cast
<
SkikoLogger
*>
((
ptr
));
return
static_cast
<
KInt
>
(
instance
->
logLevel
());
}
skiko/src/nativeJsMain/kotlin/org/jetbrains/skia/skottie/Logger.nativejs.kt
0 → 100644
View file @
c20bf0c5
package
org.jetbrains.skia.skottie
import
org.jetbrains.skia.impl.NativePointer
import
org.jetbrains.skia.impl.interopScope
import
org.jetbrains.skia.impl.withStringReferenceNullableResult
import
org.jetbrains.skia.impl.withStringReferenceResult
internal
actual
fun
Logger
.
doInit
(
ptr
:
NativePointer
)
{
interopScope
{
val
onLog
=
virtual
{
val
level
=
LogLevel
.
values
()[
Logger_nGetLogLevel
(
ptr
)]
val
message
=
withStringReferenceResult
{
Logger_nGetLogMessage
(
ptr
)
}
val
json
=
withStringReferenceNullableResult
{
Logger_nGetLogJson
(
ptr
)
}
log
(
level
,
message
,
json
)
}
Logger_nInit
(
ptr
,
onLog
)
}
}
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