mirror of
https://github.com/mdgriffith/elm-optimize-level-2.git
synced 2024-11-25 22:50:42 +03:00
63 lines
2.6 KiB
Markdown
63 lines
2.6 KiB
Markdown
# Running Built-in Benchmarks
|
|
|
|
The built-in benchmarks use selenium webdriver, which requires a headless browser for Chrome, Firefox, and Safari.
|
|
|
|
The default benchmarks just run in chrome, so
|
|
|
|
As mentioned here: https://www.selenium.dev/selenium/docs/api/javascript/module/selenium-webdriver/chrome.html
|
|
|
|
You'll need to install the latest ChromeDriver release and ensure it's on your PATH: https://chromedriver.chromium.org/downloads
|
|
|
|
For me(on a Mac) this means:
|
|
|
|
1. Downloading chromedriver
|
|
- The version needs to match the `chromedriver` version already specified in `package.json`. Right now it's 91.
|
|
2. In finder, right clicking it and opening it in terminal. This is to convince Apple that you trust this thing.
|
|
3. Close that terminal
|
|
4. then `cp Downloads/chromedriver /usr/local/bin/chromedriver`
|
|
|
|
You should be good to run `npm run run-benchmarks`!
|
|
|
|
|
|
|
|
# Running your Benchmarks
|
|
(instructions still under construction. Hopefullly they work!)
|
|
|
|
If you want to use `level-2`'s benchmark runner, which can give you information about V8 internals such as optimization status, we can do that!
|
|
|
|
First, I think you'll need to install chromedriver like mentioned in the above section.
|
|
|
|
Then:
|
|
|
|
1. Clone `lvl-2` as a git submodule to your project. This will allow you to pull changes as this part is still under development.
|
|
|
|
2. In the `lvl-2` directory:
|
|
2.1 `npm install`
|
|
|
|
2.2 To test things out, try running `npm run lvl-2 -- --benchmark testcases/html`.
|
|
|
|
- Two chrome browsers should pop up and run a benchmark, and then in the terminal you should see some results.
|
|
|
|
3. You'll need to run `npm run lvl-2 -- --benchmark-init ../my-directory-with-my-benchmarks`
|
|
|
|
- This copies some files into that directory that are needed to run the benchmarks. You can see the files at testcases/html/V8. You can copy them manually from there if you choose.
|
|
|
|
4. You benchmarks need to be located at `Suite.suite`. Import `import V8.Benchmark.Runner.Json exposing (..)` and use the `benchmark` and `describe functions there instead of the normal ones.
|
|
|
|
5. Then run `npm run lvl-2 -- --benchmark ../my-directory-with-my-benchmarks`. You need to point it at the *folder* with the `Suite.elm` file you may have just created.
|
|
|
|
6. Profit?
|
|
|
|
7. Once you have that working, you can use `V8.Debug.memory "my tag" someRandomValue` to inspect its' memory representation.
|
|
|
|
- `Smi` means SMall Integer and is great for performance.
|
|
- `fast properties` is generally the next step up.
|
|
- anything mentioning dictionary elements is slow. I'm not sure if this shows up in elm, but might when using a type with a lot of variants that have a bunch of different shapes.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|