Compare commits
3 Commits
revert-510
...
v0.37.0
Author | SHA1 | Date | |
---|---|---|---|
9a537da183 | |||
df81b76b8b | |||
ac3f7ab712 |
44
.github/workflows/cargo-bench.yml
vendored
44
.github/workflows/cargo-bench.yml
vendored
@ -1,44 +0,0 @@
|
|||||||
on:
|
|
||||||
push:
|
|
||||||
branches:
|
|
||||||
- main
|
|
||||||
paths:
|
|
||||||
- '**.rs'
|
|
||||||
- '**/Cargo.toml'
|
|
||||||
- '**/Cargo.lock'
|
|
||||||
- '**/rust-toolchain.toml'
|
|
||||||
- .github/workflows/cargo-bench.yml
|
|
||||||
pull_request:
|
|
||||||
paths:
|
|
||||||
- '**.rs'
|
|
||||||
- '**/Cargo.toml'
|
|
||||||
- '**/Cargo.lock'
|
|
||||||
- '**/rust-toolchain.toml'
|
|
||||||
- .github/workflows/cargo-bench.yml
|
|
||||||
workflow_dispatch:
|
|
||||||
permissions: read-all
|
|
||||||
concurrency:
|
|
||||||
group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }}
|
|
||||||
cancel-in-progress: true
|
|
||||||
name: cargo bench
|
|
||||||
jobs:
|
|
||||||
cargo-bench:
|
|
||||||
name: Benchmark with iai
|
|
||||||
runs-on: ubuntu-latest-8-cores
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@v4
|
|
||||||
- uses: dtolnay/rust-toolchain@stable
|
|
||||||
- name: Install dependencies
|
|
||||||
run: |
|
|
||||||
cargo install cargo-criterion
|
|
||||||
sudo apt update
|
|
||||||
sudo apt install -y valgrind
|
|
||||||
- name: Rust Cache
|
|
||||||
uses: Swatinem/rust-cache@v2.6.1
|
|
||||||
- name: Benchmark kcl library
|
|
||||||
shell: bash
|
|
||||||
run: |-
|
|
||||||
cd src/wasm-lib/kcl; cargo bench --all-features -- iai
|
|
||||||
env:
|
|
||||||
KITTYCAD_API_TOKEN: ${{secrets.KITTYCAD_API_TOKEN}}
|
|
||||||
|
|
@ -103,7 +103,7 @@ export class HomePageFixture {
|
|||||||
.toEqual(expectedState)
|
.toEqual(expectedState)
|
||||||
}
|
}
|
||||||
|
|
||||||
createAndGoToProject = async (projectTitle: string) => {
|
createAndGoToProject = async (projectTitle = 'project-$nnn') => {
|
||||||
await expect(this.projectSection).not.toHaveText('Loading your Projects...')
|
await expect(this.projectSection).not.toHaveText('Loading your Projects...')
|
||||||
await this.projectButtonNew.click()
|
await this.projectButtonNew.click()
|
||||||
await this.projectTextName.click()
|
await this.projectTextName.click()
|
||||||
|
@ -1088,6 +1088,25 @@ test.describe(`Project management commands`, () => {
|
|||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
|
||||||
|
test(`Create a few projects using the default project name`, async ({
|
||||||
|
homePage,
|
||||||
|
toolbar,
|
||||||
|
}) => {
|
||||||
|
for (let i = 0; i < 12; i++) {
|
||||||
|
await test.step(`Create project ${i}`, async () => {
|
||||||
|
await homePage.expectState({
|
||||||
|
projectCards: Array.from({ length: i }, (_, i) => ({
|
||||||
|
title: `project-${i.toString().padStart(3, '0')}`,
|
||||||
|
fileCount: 1,
|
||||||
|
})).toReversed(),
|
||||||
|
sortBy: 'last-modified-desc',
|
||||||
|
})
|
||||||
|
await homePage.createAndGoToProject()
|
||||||
|
await toolbar.logoLink.click()
|
||||||
|
})
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
test(
|
test(
|
||||||
'File in the file pane should open with a single click',
|
'File in the file pane should open with a single click',
|
||||||
{ tag: '@electron' },
|
{ tag: '@electron' },
|
||||||
|
Binary file not shown.
Before Width: | Height: | Size: 50 KiB After Width: | Height: | Size: 44 KiB |
@ -210,6 +210,7 @@ export function Toolbar({
|
|||||||
<ToolbarItemTooltip
|
<ToolbarItemTooltip
|
||||||
itemConfig={maybeIconConfig[0]}
|
itemConfig={maybeIconConfig[0]}
|
||||||
configCallbackProps={configCallbackProps}
|
configCallbackProps={configCallbackProps}
|
||||||
|
className="ui-open:!hidden"
|
||||||
/>
|
/>
|
||||||
</ActionButtonDropdown>
|
</ActionButtonDropdown>
|
||||||
)
|
)
|
||||||
@ -277,9 +278,11 @@ export function Toolbar({
|
|||||||
const ToolbarItemTooltip = memo(function ToolbarItemContents({
|
const ToolbarItemTooltip = memo(function ToolbarItemContents({
|
||||||
itemConfig,
|
itemConfig,
|
||||||
configCallbackProps,
|
configCallbackProps,
|
||||||
|
className,
|
||||||
}: {
|
}: {
|
||||||
itemConfig: ToolbarItemResolved
|
itemConfig: ToolbarItemResolved
|
||||||
configCallbackProps: ToolbarItemCallbackProps
|
configCallbackProps: ToolbarItemCallbackProps
|
||||||
|
className?: string
|
||||||
}) {
|
}) {
|
||||||
const { state } = useModelingContext()
|
const { state } = useModelingContext()
|
||||||
|
|
||||||
@ -305,8 +308,9 @@ const ToolbarItemTooltip = memo(function ToolbarItemContents({
|
|||||||
? ({ '-webkit-app-region': 'no-drag' } as React.CSSProperties)
|
? ({ '-webkit-app-region': 'no-drag' } as React.CSSProperties)
|
||||||
: {}
|
: {}
|
||||||
}
|
}
|
||||||
|
hoverOnly
|
||||||
position="bottom"
|
position="bottom"
|
||||||
wrapperClassName="!p-4 !pointer-events-auto"
|
wrapperClassName={'!p-4 !pointer-events-auto ' + className}
|
||||||
contentClassName="!text-left text-wrap !text-xs !p-0 !pb-2 flex gap-2 !max-w-none !w-72 flex-col items-stretch"
|
contentClassName="!text-left text-wrap !text-xs !p-0 !pb-2 flex gap-2 !max-w-none !w-72 flex-col items-stretch"
|
||||||
>
|
>
|
||||||
<div className="rounded-top flex items-center gap-2 pt-3 pb-2 px-2 bg-chalkboard-20/50 dark:bg-chalkboard-80/50">
|
<div className="rounded-top flex items-center gap-2 pt-3 pb-2 px-2 bg-chalkboard-20/50 dark:bg-chalkboard-80/50">
|
||||||
|
@ -201,7 +201,7 @@ const ProjectsContextDesktop = ({
|
|||||||
|
|
||||||
return {
|
return {
|
||||||
message: `Successfully created "${uniqueName}"`,
|
message: `Successfully created "${uniqueName}"`,
|
||||||
name,
|
name: uniqueName,
|
||||||
}
|
}
|
||||||
}),
|
}),
|
||||||
renameProject: fromPromise(async ({ input }) => {
|
renameProject: fromPromise(async ({ input }) => {
|
||||||
|
7
src/wasm-lib/Cargo.lock
generated
7
src/wasm-lib/Cargo.lock
generated
@ -1382,12 +1382,6 @@ dependencies = [
|
|||||||
"tracing",
|
"tracing",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "iai"
|
|
||||||
version = "0.1.1"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "71a816c97c42258aa5834d07590b718b4c9a598944cd39a52dc25b351185d678"
|
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "iana-time-zone"
|
name = "iana-time-zone"
|
||||||
version = "0.1.61"
|
version = "0.1.61"
|
||||||
@ -1739,7 +1733,6 @@ dependencies = [
|
|||||||
"gltf-json",
|
"gltf-json",
|
||||||
"handlebars",
|
"handlebars",
|
||||||
"http 1.2.0",
|
"http 1.2.0",
|
||||||
"iai",
|
|
||||||
"image",
|
"image",
|
||||||
"indexmap 2.7.0",
|
"indexmap 2.7.0",
|
||||||
"insta",
|
"insta",
|
||||||
|
@ -113,7 +113,6 @@ base64 = "0.22.1"
|
|||||||
criterion = { version = "0.5.1", features = ["async_tokio"] }
|
criterion = { version = "0.5.1", features = ["async_tokio"] }
|
||||||
expectorate = "1.1.0"
|
expectorate = "1.1.0"
|
||||||
handlebars = "6.3.0"
|
handlebars = "6.3.0"
|
||||||
iai = "0.1"
|
|
||||||
image = { version = "0.25.5", default-features = false, features = ["png"] }
|
image = { version = "0.25.5", default-features = false, features = ["png"] }
|
||||||
insta = { version = "1.41.1", features = ["json", "filters", "redactions"] }
|
insta = { version = "1.41.1", features = ["json", "filters", "redactions"] }
|
||||||
itertools = "0.13.0"
|
itertools = "0.13.0"
|
||||||
@ -129,10 +128,6 @@ workspace = true
|
|||||||
name = "compiler_benchmark_criterion"
|
name = "compiler_benchmark_criterion"
|
||||||
harness = false
|
harness = false
|
||||||
|
|
||||||
[[bench]]
|
|
||||||
name = "compiler_benchmark_iai"
|
|
||||||
harness = false
|
|
||||||
|
|
||||||
[[bench]]
|
[[bench]]
|
||||||
name = "digest_benchmark"
|
name = "digest_benchmark"
|
||||||
harness = false
|
harness = false
|
||||||
@ -142,15 +137,7 @@ name = "lsp_semantic_tokens_benchmark_criterion"
|
|||||||
harness = false
|
harness = false
|
||||||
required-features = ["lsp-test-util"]
|
required-features = ["lsp-test-util"]
|
||||||
|
|
||||||
[[bench]]
|
|
||||||
name = "lsp_semantic_tokens_benchmark_iai"
|
|
||||||
harness = false
|
|
||||||
required-features = ["lsp-test-util"]
|
|
||||||
|
|
||||||
[[bench]]
|
[[bench]]
|
||||||
name = "executor_benchmark_criterion"
|
name = "executor_benchmark_criterion"
|
||||||
harness = false
|
harness = false
|
||||||
|
|
||||||
[[bench]]
|
|
||||||
name = "executor_benchmark_iai"
|
|
||||||
harness = false
|
|
||||||
|
@ -1,35 +0,0 @@
|
|||||||
use iai::black_box;
|
|
||||||
|
|
||||||
pub fn parse(program: &str) {
|
|
||||||
black_box(kcl_lib::Program::parse(program).unwrap());
|
|
||||||
}
|
|
||||||
|
|
||||||
fn parse_kitt() {
|
|
||||||
parse(KITT_PROGRAM)
|
|
||||||
}
|
|
||||||
fn parse_pipes() {
|
|
||||||
parse(PIPES_PROGRAM)
|
|
||||||
}
|
|
||||||
fn parse_cube() {
|
|
||||||
parse(CUBE_PROGRAM)
|
|
||||||
}
|
|
||||||
fn parse_math() {
|
|
||||||
parse(MATH_PROGRAM)
|
|
||||||
}
|
|
||||||
fn parse_lsystem() {
|
|
||||||
parse(LSYSTEM_PROGRAM)
|
|
||||||
}
|
|
||||||
|
|
||||||
iai::main! {
|
|
||||||
parse_kitt,
|
|
||||||
parse_pipes,
|
|
||||||
parse_cube,
|
|
||||||
parse_math,
|
|
||||||
parse_lsystem,
|
|
||||||
}
|
|
||||||
|
|
||||||
const KITT_PROGRAM: &str = include_str!("../../tests/executor/inputs/kittycad_svg.kcl");
|
|
||||||
const PIPES_PROGRAM: &str = include_str!("../../tests/executor/inputs/pipes_on_pipes.kcl");
|
|
||||||
const CUBE_PROGRAM: &str = include_str!("../../tests/executor/inputs/cube.kcl");
|
|
||||||
const MATH_PROGRAM: &str = include_str!("../../tests/executor/inputs/math.kcl");
|
|
||||||
const LSYSTEM_PROGRAM: &str = include_str!("../../tests/executor/inputs/lsystem.kcl");
|
|
@ -1,27 +0,0 @@
|
|||||||
use iai::black_box;
|
|
||||||
|
|
||||||
async fn execute_server_rack_heavy() {
|
|
||||||
let code = SERVER_RACK_HEAVY_PROGRAM;
|
|
||||||
black_box(
|
|
||||||
kcl_lib::test_server::execute_and_snapshot(code, kcl_lib::UnitLength::Mm, None)
|
|
||||||
.await
|
|
||||||
.unwrap(),
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
async fn execute_server_rack_lite() {
|
|
||||||
let code = SERVER_RACK_LITE_PROGRAM;
|
|
||||||
black_box(
|
|
||||||
kcl_lib::test_server::execute_and_snapshot(code, kcl_lib::UnitLength::Mm, None)
|
|
||||||
.await
|
|
||||||
.unwrap(),
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
iai::main! {
|
|
||||||
execute_server_rack_lite,
|
|
||||||
execute_server_rack_heavy,
|
|
||||||
}
|
|
||||||
|
|
||||||
const SERVER_RACK_HEAVY_PROGRAM: &str = include_str!("../../tests/executor/inputs/server-rack-heavy.kcl");
|
|
||||||
const SERVER_RACK_LITE_PROGRAM: &str = include_str!("../../tests/executor/inputs/server-rack-lite.kcl");
|
|
@ -1,45 +0,0 @@
|
|||||||
use iai::black_box;
|
|
||||||
use kcl_lib::kcl_lsp_server;
|
|
||||||
use tower_lsp::LanguageServer;
|
|
||||||
|
|
||||||
async fn kcl_lsp_semantic_tokens(code: &str) {
|
|
||||||
let server = kcl_lsp_server(false).await.unwrap();
|
|
||||||
|
|
||||||
// Send open file.
|
|
||||||
server
|
|
||||||
.did_open(tower_lsp::lsp_types::DidOpenTextDocumentParams {
|
|
||||||
text_document: tower_lsp::lsp_types::TextDocumentItem {
|
|
||||||
uri: "file:///test.kcl".try_into().unwrap(),
|
|
||||||
language_id: "kcl".to_string(),
|
|
||||||
version: 1,
|
|
||||||
text: code.to_string(),
|
|
||||||
},
|
|
||||||
})
|
|
||||||
.await;
|
|
||||||
|
|
||||||
// Send semantic tokens request.
|
|
||||||
black_box(
|
|
||||||
server
|
|
||||||
.semantic_tokens_full(tower_lsp::lsp_types::SemanticTokensParams {
|
|
||||||
text_document: tower_lsp::lsp_types::TextDocumentIdentifier {
|
|
||||||
uri: "file:///test.kcl".try_into().unwrap(),
|
|
||||||
},
|
|
||||||
partial_result_params: Default::default(),
|
|
||||||
work_done_progress_params: Default::default(),
|
|
||||||
})
|
|
||||||
.await
|
|
||||||
.unwrap()
|
|
||||||
.unwrap(),
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
async fn semantic_tokens_global_tags() {
|
|
||||||
let code = GLOBAL_TAGS_FILE;
|
|
||||||
kcl_lsp_semantic_tokens(code).await;
|
|
||||||
}
|
|
||||||
|
|
||||||
iai::main! {
|
|
||||||
semantic_tokens_global_tags,
|
|
||||||
}
|
|
||||||
|
|
||||||
const GLOBAL_TAGS_FILE: &str = include_str!("../../tests/executor/inputs/global-tags.kcl");
|
|
Binary file not shown.
Before Width: | Height: | Size: 44 KiB After Width: | Height: | Size: 43 KiB |
Reference in New Issue
Block a user