Skip to content

Commit

Permalink
feat: upgrade skia to chrome/118
Browse files Browse the repository at this point in the history
  • Loading branch information
Brooooooklyn committed Sep 18, 2023
1 parent 969d8eb commit e4ad24d
Show file tree
Hide file tree
Showing 21 changed files with 60 additions and 45 deletions.
2 changes: 1 addition & 1 deletion .cargo/config.toml
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
[target.x86_64-pc-windows-msvc]
rustflags = ["-C", "link-args=/NODEFAULTLIB:libcmt.lib"]
rustflags = ["-C", "link-args=/NODEFAULTLIB:libcmt.lib", "-C", "target-feature=+crt-static"]

[target.aarch64-apple-darwin]
rustflags = ["-C", "target-cpu=apple-a14"]
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/CI.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -146,7 +146,7 @@ jobs:
- uses: goto-bus-stop/setup-zig@v2
if: ${{ matrix.settings.target == 'armv7-unknown-linux-gnueabihf' }}
with:
version: 0.10.1
version: 0.11.0

- name: Set env
if: matrix.settings.host == 'windows-latest'
Expand Down
6 changes: 6 additions & 0 deletions .github/workflows/skia.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,11 @@ jobs:
with:
submodules: true

- name: List llvm dir
if: matrix.os == 'windows-latest'
run: ls -R "C:\Program Files\LLVM"
shell: bash

- name: Setup node
uses: actions/setup-node@v3
with:
Expand All @@ -46,6 +51,7 @@ jobs:
if: matrix.os == 'windows-latest'
run: |
choco install llvm ninja -y
choco upgrade llvm
pip install certifi
- name: Login to GitHub Container Registry
Expand Down
19 changes: 5 additions & 14 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,31 +1,22 @@
## [0.1.44](https://github.com/Brooooooklyn/canvas/compare/v0.1.43...v0.1.44) (2023-08-22)


### Bug Fixes

* file extensions in `loadFontsFromDir()` are no longer case-sensitive ([9342e33](https://github.com/Brooooooklyn/canvas/commit/9342e3386f575f3864c1bfa0036caa0956f1a914))


- file extensions in `loadFontsFromDir()` are no longer case-sensitive ([9342e33](https://github.com/Brooooooklyn/canvas/commit/9342e3386f575f3864c1bfa0036caa0956f1a914))

## [0.1.43](https://github.com/Brooooooklyn/canvas/compare/v0.1.42...v0.1.43) (2023-08-11)



## [0.1.42](https://github.com/Brooooooklyn/canvas/compare/v0.1.41...v0.1.42) (2023-08-08)


### Bug Fixes

* add `ctx.canvas` property on svg context ([#697](https://github.com/Brooooooklyn/canvas/issues/697)) ([968e501](https://github.com/Brooooooklyn/canvas/commit/968e501e5d09d5b11fb02829b6ba402ffc3575d1))
* **deps:** update rust crate infer to 0.15 ([376b19e](https://github.com/Brooooooklyn/canvas/commit/376b19ebc53640a89e1dad73b8281922675cf834))
* url is string type ([#671](https://github.com/Brooooooklyn/canvas/issues/671)) ([31a8ff9](https://github.com/Brooooooklyn/canvas/commit/31a8ff9a5295697b965ba4e48a19a30dc0f0b1d6))

- add `ctx.canvas` property on svg context ([#697](https://github.com/Brooooooklyn/canvas/issues/697)) ([968e501](https://github.com/Brooooooklyn/canvas/commit/968e501e5d09d5b11fb02829b6ba402ffc3575d1))
- **deps:** update rust crate infer to 0.15 ([376b19e](https://github.com/Brooooooklyn/canvas/commit/376b19ebc53640a89e1dad73b8281922675cf834))
- url is string type ([#671](https://github.com/Brooooooklyn/canvas/issues/671)) ([31a8ff9](https://github.com/Brooooooklyn/canvas/commit/31a8ff9a5295697b965ba4e48a19a30dc0f0b1d6))

### Features

* upgrade skia to m116 ([#702](https://github.com/Brooooooklyn/canvas/issues/702)) ([926c472](https://github.com/Brooooooklyn/canvas/commit/926c47249b77894eb96fd002755ad73e50e602d6))


- upgrade skia to m116 ([#702](https://github.com/Brooooooklyn/canvas/issues/702)) ([926c472](https://github.com/Brooooooklyn/canvas/commit/926c47249b77894eb96fd002755ad73e50e602d6))

## [0.1.41](https://github.com/Brooooooklyn/canvas/compare/v0.1.40...v0.1.41) (2023-05-22)

Expand Down
2 changes: 1 addition & 1 deletion README-zh.md
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
# `skr canvas`

![CI](https://github.com/Brooooooklyn/canvas/workflows/CI/badge.svg)
![Skia Version](https://img.shields.io/badge/Skia-chrome%2Fm116-hotpink)
![Skia Version](https://img.shields.io/badge/Skia-chrome%2Fm118-hotpink)
[![install size](https://packagephobia.com/badge?p=@napi-rs/canvas)](https://packagephobia.com/result?p=@napi-rs/canvas)
[![Downloads](https://img.shields.io/npm/dm/@napi-rs/canvas.svg?sanitize=true)](https://npmcharts.com/compare/@napi-rs/canvas?minimal=true)

Expand Down
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
# `skr canvas`

![CI](https://github.com/Brooooooklyn/canvas/workflows/CI/badge.svg)
![Skia Version](https://img.shields.io/badge/Skia-chrome%2Fm116-hotpink)
![Skia Version](https://img.shields.io/badge/Skia-chrome%2Fm118-hotpink)
[![install size](https://packagephobia.com/badge?p=@napi-rs/canvas)](https://packagephobia.com/result?p=@napi-rs/canvas)
[![Downloads](https://img.shields.io/npm/dm/@napi-rs/canvas.svg?sanitize=true)](https://npmcharts.com/compare/@napi-rs/canvas?minimal=true)

Expand Down
2 changes: 1 addition & 1 deletion npm/android-arm64/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -34,4 +34,4 @@
"access": "public"
},
"repository": "https://github.com/Brooooooklyn/canvas.git"
}
}
2 changes: 1 addition & 1 deletion npm/darwin-arm64/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -34,4 +34,4 @@
"access": "public"
},
"repository": "https://github.com/Brooooooklyn/canvas.git"
}
}
2 changes: 1 addition & 1 deletion npm/darwin-x64/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -34,4 +34,4 @@
"access": "public"
},
"repository": "https://github.com/Brooooooklyn/canvas.git"
}
}
2 changes: 1 addition & 1 deletion npm/linux-arm-gnueabihf/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -34,4 +34,4 @@
"access": "public"
},
"repository": "https://github.com/Brooooooklyn/canvas.git"
}
}
2 changes: 1 addition & 1 deletion npm/linux-arm64-gnu/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -41,4 +41,4 @@
"access": "public"
},
"repository": "https://github.com/Brooooooklyn/canvas.git"
}
}
2 changes: 1 addition & 1 deletion npm/linux-arm64-musl/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -41,4 +41,4 @@
"access": "public"
},
"repository": "https://github.com/Brooooooklyn/canvas.git"
}
}
2 changes: 1 addition & 1 deletion npm/linux-x64-gnu/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -41,4 +41,4 @@
"access": "public"
},
"repository": "https://github.com/Brooooooklyn/canvas.git"
}
}
2 changes: 1 addition & 1 deletion npm/linux-x64-musl/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -41,4 +41,4 @@
"access": "public"
},
"repository": "https://github.com/Brooooooklyn/canvas.git"
}
}
2 changes: 1 addition & 1 deletion npm/win32-x64-msvc/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -35,4 +35,4 @@
"access": "public"
},
"repository": "https://github.com/Brooooooklyn/canvas.git"
}
}
36 changes: 29 additions & 7 deletions scripts/build-skia.js
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
const { execSync } = require('child_process')
const { readFileSync, writeFileSync } = require('fs')
const path = require('path')
const { platform, arch } = require('os')
const { execSync } = require('node:child_process')
const { readFileSync, writeFileSync, existsSync, readdirSync } = require('node:fs')
const path = require('node:path')
const { platform, arch } = require('node:os')

const PLATFORM_NAME = platform()
const HOST_ARCH = arch()
Expand Down Expand Up @@ -101,7 +101,11 @@ switch (PLATFORM_NAME) {
'\\"-DSK_CODEC_DECODES_JPEG\\",' +
'\\"-DSK_HAS_HEIF_LIBRARY\\",' +
'\\"-DSK_SHAPER_HARFBUZZ_AVAILABLE\\"'
ExtraSkiaBuildFlag = 'clang_win=\\"C:\\\\Program Files\\\\LLVM\\"'
const clangVersion = findClangWinVersion()
if (clangVersion) {
console.info(`Found clang version: ${clangVersion}`)
ExtraSkiaBuildFlag = `clang_win_version=\\"${clangVersion}"`
}
GN_ARGS.push(`skia_enable_fontmgr_win=false`)
GN_ARGS.push(`skia_fontmgr_factory=\\":fontmgr_custom_directory_factory\\"`)
break
Expand Down Expand Up @@ -161,8 +165,7 @@ switch (TARGET_TRIPLE) {
ExtraCflags = `"--target=aarch64-unknown-linux-musl", "-B/aarch64-linux-musl-cross/aarch64-linux-musl/bin", "-I/aarch64-linux-musl-cross/aarch64-linux-musl/include", "-I/aarch64-linux-musl-cross/aarch64-linux-musl/include/c++/${gccVersion}", "-I/aarch64-linux-musl-cross/aarch64-linux-musl/include/c++/${gccVersion}/aarch64-linux-musl", "-march=armv8-a"`
ExtraCflagsCC += `, "--target=aarch64-unknown-linux-musl", "-B/aarch64-linux-musl-cross/aarch64-linux-musl/bin", "-I/aarch64-linux-musl-cross/aarch64-linux-musl/include", "-I/aarch64-linux-musl-cross/aarch64-linux-musl/include/c++/${gccVersion}", "-I/aarch64-linux-musl-cross/aarch64-linux-musl/include/c++/${gccVersion}/aarch64-linux-musl", "-march=armv8-a"`
ExtraLdFlags = `"--target=aarch64-unknown-linux-musl", "-B/aarch64-linux-musl-cross/usr/aarch64-linux-musl/bin", "-L/aarch64-linux-musl-cross/usr/aarch64-linux-musl/lib", "-L/aarch64-linux-musl-cross/usr/lib/gcc/aarch64-linux-musl/${gccVersion}"`
ExtraAsmFlags =
'"--target=aarch64-unknown-linux-musl", "-march=armv8-a"'
ExtraAsmFlags = '"--target=aarch64-unknown-linux-musl", "-march=armv8-a"'
GN_ARGS.push(
`extra_ldflags=[${ExtraLdFlags}]`,
`ar="aarch64-linux-musl-ar"`,
Expand Down Expand Up @@ -268,3 +271,22 @@ console.time('Build Skia')
exec(`ninja -C ${OUTPUT_PATH}`)

console.timeEnd('Build Skia')


function findClangWinVersion() {
const { LLVM_HOME } = process.env
const commonRoot = ['C:\\Program Files\\LLVM', 'C:\\LLVM']
if (LLVM_HOME) {
commonRoot.unshift(LLVM_HOME)
}
for (const root of commonRoot) {
const libClangPath = path.join(root, 'lib', 'clang')
console.info(`Checking ${libClangPath}`)
if (existsSync(libClangPath)) {
const versions = readdirSync(libClangPath).sort((a, b) => parseInt(a)).filter((v) => !isNaN(v))
if (versions.length) {
return versions[versions.length - 1]
}
}
}
}
2 changes: 1 addition & 1 deletion skia
Submodule skia updated 3519 files
4 changes: 2 additions & 2 deletions skia-c/skia_c.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1364,14 +1364,14 @@ extern "C"
}
}

skiac_image_filter *skiac_image_filter_make_blur(float sigma_x, float sigma_y, int tile_mode, skiac_image_filter *c_image_filter)
skiac_image_filter *skiac_image_filter_make_blur(float sigma_x, float sigma_y, skiac_image_filter *c_image_filter)
{
auto chained_filter = sk_sp(IMAGE_FILTER_CAST);
if (c_image_filter)
{
chained_filter->ref();
}
auto filter = SkImageFilters::Blur(sigma_x, sigma_y, (SkTileMode)tile_mode, chained_filter).release();
auto filter = SkImageFilters::Blur(sigma_x, sigma_y, chained_filter).release();
if (filter)
{
return reinterpret_cast<skiac_image_filter *>(filter);
Expand Down
2 changes: 1 addition & 1 deletion skia-c/skia_c.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -454,7 +454,7 @@ extern "C"
// ImageFilter
skiac_image_filter *skiac_image_filter_make_drop_shadow_only(float dx, float dy, float sigma_x, float sigma_y, uint32_t color, skiac_image_filter *c_image_filter);
skiac_image_filter *skiac_image_filter_make_drop_shadow(float dx, float dy, float sigma_x, float sigma_y, uint32_t color, skiac_image_filter *c_image_filter);
skiac_image_filter *skiac_image_filter_make_blur(float sigma_x, float sigma_y, int tile_mode, skiac_image_filter *c_image_filter);
skiac_image_filter *skiac_image_filter_make_blur(float sigma_x, float sigma_y, skiac_image_filter *c_image_filter);
skiac_image_filter *skiac_image_filter_color_filter(float m00, float m01, float m02, float m10, float m11, float m12, float m20, float m21, float m22, float opacity, skiac_image_filter *c_image_filter);
skiac_image_filter *skiac_image_filter_from_argb(const uint8_t table_a[256], const uint8_t table_r[256], const uint8_t table_g[256], const uint8_t table_b[256], skiac_image_filter *c_image_filter);
void skiac_image_filter_destroy(skiac_image_filter *c_image_filter);
Expand Down
6 changes: 2 additions & 4 deletions src/filter.rs
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ use nom::{
};
use thiserror::Error;

use crate::sk::{degrees_to_radians, ImageFilter, TileMode};
use crate::sk::{degrees_to_radians, ImageFilter};

#[derive(Error, Debug)]
pub enum ParseFilterError<'a> {
Expand Down Expand Up @@ -264,9 +264,7 @@ pub(crate) fn css_filters_to_image_filter(filters: Vec<CssFilter>) -> Option<Ima
filters
.into_iter()
.try_fold(ImageFilter(ptr::null_mut()), |image_filter, f| match f {
CssFilter::Blur(blur) => {
ImageFilter::make_blur(blur, blur, TileMode::Clamp, Some(&image_filter))
}
CssFilter::Blur(blur) => ImageFilter::make_blur(blur, blur, Some(&image_filter)),
CssFilter::Brightness(brightness) => {
let brightness = brightness.max(0.0);
ImageFilter::make_image_filter(
Expand Down
4 changes: 1 addition & 3 deletions src/sk.rs
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ use crate::error::SkError;
use crate::font::{FontStretch, FontStyle};
use crate::image::ImageData;

#[allow(non_camel_case_types)]
pub mod ffi {
use std::ffi::c_void;
use std::os::raw::c_char;
Expand Down Expand Up @@ -750,7 +751,6 @@ pub mod ffi {
pub fn skiac_image_filter_make_blur(
sigma_x: f32,
sigma_y: f32,
tile_mode: i32,
chained_filter: *mut skiac_image_filter,
) -> *mut skiac_image_filter;

Expand Down Expand Up @@ -3277,14 +3277,12 @@ impl ImageFilter {
pub fn make_blur(
sigma_x: f32,
sigma_y: f32,
tile_mode: TileMode,
chained_filter: Option<&ImageFilter>,
) -> Option<Self> {
let raw_ptr = unsafe {
ffi::skiac_image_filter_make_blur(
sigma_x,
sigma_y,
tile_mode as i32,
chained_filter.map(|c| c.0).unwrap_or(ptr::null_mut()),
)
};
Expand Down

1 comment on commit e4ad24d

@github-actions
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Benchmark

Benchmark suite Current: e4ad24d Previous: 969d8eb Ratio
Draw house#skia-canvas 24.4 ops/sec (±0.47%) 24 ops/sec (±0.06%) 0.98
Draw house#node-canvas 30.4 ops/sec (±0.26%) 29 ops/sec (±0.29%) 0.95
Draw house#@napi-rs/skia 23.8 ops/sec (±1%) 23 ops/sec (±0.24%) 0.97
Draw gradient#skia-canvas 23 ops/sec (±0.43%) 23 ops/sec (±0.05%) 1
Draw gradient#node-canvas 29 ops/sec (±0.29%) 27 ops/sec (±0.31%) 0.93
Draw gradient#@napi-rs/skia 22 ops/sec (±1.04%) 22 ops/sec (±0.31%) 1

This comment was automatically generated by workflow using github-action-benchmark.

Please sign in to comment.