• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

kivy / kivy / 25338915925
59%

Build:
DEFAULT BRANCH: master
Ran 04 May 2026 07:38PM UTC
Jobs 2
Files 323
Run time 1min
Badge
Embed ▾
README BADGES
x

If you need to use a raster PNG badge, change the '.svg' to '.png' in the link

Markdown

Textile

RDoc

HTML

Rst

04 May 2026 07:28PM UTC coverage: 57.706% (+0.08%) from 57.631%
25338915925

push

github

web-flow
Add internal ThorVG Cython wrapper (kivy.lib.thorvg) (#9297)

* Add internal ThorVG Cython wrapper (kivy.lib.thorvg)

Introduce kivy/lib/thorvg/ as an internal Cython binding to ThorVG v1.0.4,
in preparation for replacing the external `thorvg-python` dependency used
by the unmerged SVG / SVG-image / Lottie feature branches. ThorVG is
linked statically on all desktop platforms; no separate kivy-deps wheel
is shipped.

Wrapper surface (minimal - only what the three providers need):

* Paint / Picture with ownership-aware __dealloc__ and set_opacity / id
* SwCanvas with zero-copy Python buffer protocol for GPU upload
  (Texture.blit_buffer consumes this directly - see bench below)
* Accessor for SVG element-id traversal using ThorVG 1.0.4's native
  accessible-mode API (removes the XML-fallback the feature branches
  previously carried)
* LottieAnimation with frame / segment / marker / slot / quality controls
* Engine initialised exactly once on module import (SW, threads=0)

Build wiring (setup.py):

* c_options['use_thorvg'], auto-enabled if headers+lib are discoverable
* determine_thorvg_flags() with KIVY_THORVG_{INCLUDE,LIB}_DIR env-var
  overrides and KIVY_DEPS_ROOT/dist fallback
* TVG_STATIC defined, C++ runtime linked on darwin / unix; compiled as
  C++ (language='c++')

Tests + benchmarks (skip-if-unavailable, no SDL3/GStreamer needed):

* kivy/tests/test_thorvg_wrapper.py - 23 unit tests covering engine
  version, canvas / picture / accessor / animation lifecycle, buffer
  allocation, ownership transfer on Canvas.add, and callback exception
  safety
* kivy/tests/bench_thorvg_wrapper.py - 6 micro-benchmarks; crucially a
  matched pair (memoryview vs bytes) that makes the ~45x zero-copy win
  of the buffer protocol visible and regression-guards against providers
  falling back to bytes(canvas) on the hot path

Lightweight CI gate (.github/workflows/test_thorvg_wrapper.yml) + helpers
(.ci/thorvg_wrapper_*.py): builds ThorVG v1.0.4 statically with
M... (continued)

3049 of 6223 branches covered (49.0%)

176 of 239 new or added lines in 3 files covered. (73.64%)

719 existing lines in 41 files now uncovered.

26075 of 45186 relevant lines covered (57.71%)

1.14 hits per line

Uncovered Changes

Lines Coverage ∆ File
62
0.0
kivy/tests/bench_thorvg_wrapper.py
1
99.43
kivy/tests/test_thorvg_wrapper.py

Coverage Regressions

Lines Coverage ∆ File
117
60.76
-5.84% kivy/uix/textinput.py
108
2.07
-43.8% kivy/core/video/video_ffpyplayer.py
71
4.81
-66.35% kivy/core/audio_output/audio_ffpyplayer.py
71
53.71
-14.23% kivy/lang/builder.py
31
65.48
-6.15% kivy/core/text/__init__.py
29
60.11
-5.53% kivy/lang/parser.py
26
36.36
-56.82% kivy/tests/test_audio.py
23
53.85
-35.38% kivy/input/postproc/tripletap.py
22
74.32
-4.25% kivy/core/image/__init__.py
19
56.45
-30.65% kivy/input/postproc/doubletap.py
19
70.64
-4.53% kivy/uix/widget.py
16
4.55
-36.36% kivy/core/image/img_ffpyplayer.py
16
34.43
-26.23% kivy/tests/test_coverage.py
15
52.55
-4.78% kivy/tests/async_common.py
15
80.3
-7.39% kivy/uix/label.py
14
67.02
-1.64% kivy/core/window/__init__.py
13
72.58
-4.19% kivy/base.py
9
78.71
-4.46% kivy/input/motionevent.py
9
87.16
-8.26% kivy/uix/behaviors/togglebutton.py
8
38.68
-7.55% kivy/cache.py
7
41.54
-10.77% kivy/factory.py
7
37.73
-3.18% kivy/logger.py
7
58.52
-3.98% kivy/utils.py
6
55.15
-3.09% kivy/uix/behaviors/focus.py
5
30.42
-1.09% kivy/clock.py
5
46.55
-8.62% kivy/resources.py
4
74.13
-0.92% kivy/animation.py
4
72.26
-1.46% kivy/uix/scatter.py
3
80.58
-2.91% kivy/core/audio_output/__init__.py
3
48.76
-0.5% kivy/core/window/window_sdl3.py
3
32.03
-1.96% kivy/metrics.py
2
19.02
-0.61% kivy/config.py
2
78.38
-5.41% kivy/core/image/img_sdl3.py
2
53.02
1.34% kivy/core/__init__.py
2
73.11
-0.84% kivy/uix/treeview.py
1
74.04
3.85% kivy/core/video/__init__.py
1
65.73
0.77% kivy/modules/inspector.py
1
0.0
0.0% kivy/setupconfig.py
1
49.26
-0.3% kivy/tests/common.py
1
98.8
-0.6% kivy/tests/test_benchmark.py
1
84.29
-0.71% kivy/vector.py
Jobs
ID Job ID Ran Files Coverage
1 25338915925.1 04 May 2026 07:38PM UTC 323
56.12
GitHub Action Run
2 25338915925.2 04 May 2026 07:52PM UTC 323
57.57
GitHub Action Run
Source Files on build 25338915925
  • Tree
  • List 323
  • Changed 3
  • Source Changed 1
  • Coverage Changed 3
Coverage ∆ File Lines Relevant Covered Missed Hits/Line Branch Hits Branch Misses
  • Back to Repo
  • Github Actions Build #25338915925
  • 5ca6e4f7 on github
  • Prev Build on master (#24103802626)
  • Next Build on master (#25338985556)
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc