blob: 948a16fd38d314bdc64a529c52fbe919a424780e [file] [log] [blame]
import './index';
import { FiddleSk } from './fiddle-sk';
import './fiddle-sk';
import '../../../infra-sk/modules/theme-chooser-sk';
import { ThemeChooserSk } from '../../../infra-sk/modules/theme-chooser-sk/theme-chooser-sk';
import '../../../infra-sk/modules/theme-chooser-sk/theme-chooser-sk';
const fiddle = document.querySelector<FiddleSk>('fiddle-sk')!;
// We need to wait for images or video elements to load before taking
// screenshots for Gold, but puppeteer can't listen for events, so we stuff a
// 'pre' element in #mode_complete after switching to each mode. We also need to
// remove that 'pre' element as we start switching to each mode.
//
// This also makes it easy to confirm that the buttons work when viewing the
// demo page.
const beforeMode = () => {
document.querySelector('#mode_complete')!.innerHTML = '';
fiddle.runResults = {
compile_errors: [],
runtime_error: '',
fiddleHash: '',
text: '',
};
};
const modeComplete = () => {
document.querySelector('#mode_complete')!.innerHTML = '<pre>Done.</pre>';
};
document.querySelector('#mode_start')!.addEventListener('click', () => {
beforeMode();
fiddle.config = {
display_options: true,
embedded: false,
cpu_embedded: true,
gpu_embedded: true,
options_open: true,
basic_mode: false,
domain: 'https://fiddle.skia.org',
bug_link: true,
sources: [1, 2, 3, 4, 5, 6],
loop: true,
play: true,
};
fiddle.options = {
textOnly: false,
srgb: false,
f16: false,
width: 128,
height: 128,
animated: false,
duration: 5,
offscreen: true,
offscreen_width: 256,
offscreen_height: 256,
offscreen_sample_count: 1,
offscreen_texturable: false,
offscreen_mipmap: false,
source: 1,
source_mipmap: true,
};
fiddle.runResults = {
compile_errors: [],
runtime_error: '',
fiddleHash: '',
text: `void draw(SkCanvas* canvas) {
SkPaint p;
p.setColor(SK_ColorRED);
p.setAntiAlias(true);
p.setStyle(SkPaint::kStroke_Style);
p.setStrokeWidth(10);
canvas->drawLine(20, 20, 100, 100, p);
}`,
};
modeComplete();
});
document
.querySelector('#mode_after_run_errors')!.addEventListener('click', () => {
beforeMode();
fiddle.config = {
display_options: true,
embedded: false,
cpu_embedded: true,
gpu_embedded: true,
options_open: false,
basic_mode: false,
domain: 'https://fiddle.skia.org',
bug_link: false,
sources: [1, 2, 3],
loop: true,
play: true,
};
fiddle.runResults = {
compile_errors: [
{
text: 'FAILED: obj/tools/fiddle/fiddle.draw.o ',
line: 0,
col: 0,
},
{
text:
'clang++ -MD -MF obj/tools/fiddle/fiddle.draw.o.d -DNDEBUG -DSK_GL -DSK_SUPPORT_PDF -DSK_CODEC_DECODES_JPEG -DSK_ENCODE_JPEG -DSK_ENABLE_ANDROID_UTILS -DSK_USE_LIBGIFCODEC -DSK_HAS_HEIF_LIBRARY -DSK_CODEC_DECODES_PNG -DSK_ENCODE_PNG -DSK_CODEC_DECODES_RAW -DSK_ENABLE_SKSL_INTERPRETER -DSKVM_JIT_WHEN_POSSIBLE -DSK_CODEC_DECODES_WEBP -DSK_ENCODE_WEBP -DSK_XML -DSK_GAMMA_APPLY_TO_A8 -DSK_ALLOW_STATIC_GLOBAL_INITIALIZERS=1 -DGR_TEST_UTILS=1 -DSK_R32_SHIFT=16 -DSK_ENABLE_SKOTTIE -DSK_SHAPER_HARFBUZZ_AVAILABLE -DSK_UNICODE_AVAILABLE -I../.. -I../../third_party/externals/libgifcodec -I../../include/third_party/vulkan -I../.. -Igen -I../../modules/skottie/include -I../../modules/skshaper/include -Wno-attributes -fstrict-aliasing -fPIC -fvisibility=hidden -O3 -fdata-sections -ffunction-sections -g -Wall -Wextra -Winit-self -Wpointer-arith -Wsign-compare -Wvla -Wno-deprecated-declarations -Wno-maybe-uninitialized -Wno-psabi -fcolor-diagnostics -Weverything -Wno-unknown-warning-option -Wno-nonportable-include-path -Wno-nonportable-system-include-path -Wno-cast-align -Wno-cast-qual -Wno-conversion -Wno-disabled-macro-expansion -Wno-documentation -Wno-documentation-unknown-command -Wno-double-promotion -Wno-exit-time-destructors -Wno-float-equal -Wno-format-nonliteral -Wno-global-constructors -Wno-missing-prototypes -Wno-missing-variable-declarations -Wno-pedantic -Wno-reserved-id-macro -Wno-shadow -Wno-shift-sign-overflow -Wno-signed-enum-bitfield -Wno-switch-enum -Wno-undef -Wno-unreachable-code -Wno-unreachable-code-break -Wno-unreachable-code-return -Wno-unused-macros -Wno-unused-member-function -Wno-unused-template -Wno-zero-as-null-pointer-constant -Wno-thread-safety-negative -Wno-non-c-typedef-for-linkage -Wsign-conversion -Wno-covered-switch-default -Wno-deprecated -Wno-missing-noreturn -Wno-old-style-cast -Wno-padded -Wno-newline-eof -Wdeprecated-anon-enum-enum-conversion -Wdeprecated-array-compare -Wdeprecated-attributes -Wdeprecated-comma-subscript -Wdeprecated-copy -Wdeprecated-dynamic-exception-spec -Wdeprecated-enum-compare -Wdeprecated-enum-compare-conditional -Wdeprecated-enum-enum-conversion -Wdeprecated-enum-float-conversion -Wdeprecated-increment-bool -Wdeprecated-register -Wdeprecated-this-capture -Wdeprecated-volatile -Wdeprecated-writable-str -Wno-sign-conversion -Wno-unused-parameter -I/tmp/swiftshader/include -DGR_EGL_TRY_GLES3_THEN_GLES2 -g0 -std=c++17 -fvisibility-inlines-hidden -fno-exceptions -fno-rtti -Wnon-virtual-dtor -Wno-noexcept-type -Wno-redundant-move -Wno-abstract-vbase-init -Wno-weak-vtables -Wno-c++98-compat -Wno-c++98-compat-pedantic -Wno-undefined-func-template -c ../../tools/fiddle/draw.cpp -o obj/tools/fiddle/fiddle.draw.o',
line: 0,
col: 0,
},
{
text: "draw.cpp:5:39: error: expected ';' after expression",
line: 5,
col: 39,
},
{
text: ' p.setStyle(SkPaint::kStroke_Style)',
line: 0,
col: 0,
},
{
text: ' ^',
line: 0,
col: 0,
},
{
text: ' ;',
line: 0,
col: 0,
},
{
text: "draw.cpp:6:25: error: expected ';' after expression",
line: 6,
col: 25,
},
{
text: ' p.setStrokeWidth(10)',
line: 0,
col: 0,
},
{
text: ' ^',
line: 0,
col: 0,
},
{
text: ' ;',
line: 0,
col: 0,
},
{
text: '2 errors generated.',
line: 0,
col: 0,
},
],
runtime_error: '',
fiddleHash: '44dfa2e23262b5353e769b8040b48f19',
text: `void draw(SkCanvas* canvas) {
SkPaint p;
p.setColor(SK_ColorRED);
p.setAntiAlias(true);
p.setStyle(SkPaint::kStroke_Style)
p.setStrokeWidth(10)
canvas->drawLine(20, 20, 100, 100, p);
}`,
};
modeComplete();
});
document
.querySelector('#mode_after_run_success')!.addEventListener('click', () => {
beforeMode();
fiddle.config = {
display_options: true,
embedded: false,
cpu_embedded: true,
gpu_embedded: true,
options_open: false,
basic_mode: false,
domain: 'https://fiddle.skia.org',
bug_link: false,
sources: [1, 2, 3],
loop: true,
play: true,
};
fiddle.options = {
textOnly: false,
srgb: false,
f16: false,
width: 256,
height: 256,
animated: false,
duration: 5,
offscreen: true,
offscreen_width: 256,
offscreen_height: 256,
offscreen_sample_count: 1,
offscreen_texturable: false,
offscreen_mipmap: false,
source: 1,
source_mipmap: true,
};
fiddle.runResults = {
compile_errors: [],
runtime_error: '',
fiddleHash: '5395a831409c92c22262fe20f3ecdca8',
text: `
void draw(SkCanvas* canvas) {
SkPaint p;
p.setColor(SK_ColorRED);
p.setAntiAlias(true);
p.setStyle(SkPaint::kStroke_Style);
p.setStrokeWidth(10);
canvas->drawLine(20, 20, 100, 100, p);
}`,
};
// Wait for all the result images to load before signalling we are done.
const promises: Promise<never>[] = [];
fiddle.querySelectorAll('img.result_image').forEach((element) => {
promises.push(new Promise<never>((resolve) => {
element.addEventListener('load', () => (resolve as any)());
}));
});
Promise.all(promises).then(modeComplete);
});
document.querySelector('#mode_animation')!.addEventListener('click', () => {
beforeMode();
fiddle.config = {
display_options: true,
embedded: false,
cpu_embedded: true,
gpu_embedded: true,
options_open: false,
basic_mode: false,
domain: 'https://fiddle.skia.org',
bug_link: false,
sources: [1, 2, 3],
loop: false,
play: false,
};
fiddle.options = {
textOnly: false,
srgb: false,
f16: false,
width: 256,
height: 256,
animated: true,
duration: 1,
offscreen: true,
offscreen_width: 256,
offscreen_height: 256,
offscreen_sample_count: 1,
offscreen_texturable: false,
offscreen_mipmap: false,
source: 1,
source_mipmap: true,
};
fiddle.runResults = {
compile_errors: [],
runtime_error: '',
fiddleHash: 'd7837be52c71542af0f80cd61aab421f',
text: `
void draw(SkCanvas* canvas) {
SkPaint p;
p.setColor(SK_ColorRED);
p.setAntiAlias(true);
p.setStyle(SkPaint::kStroke_Style);
p.setStrokeWidth(10);
canvas->drawLine(20+100*frame, 20, 100, 100, p);
}
`,
};
// Wait for all the result videos to load before signalling we are done.
const promises: Promise<never>[] = [];
fiddle.querySelectorAll('video').forEach((element) => {
promises.push(new Promise<never>((resolve) => {
element.addEventListener('canplay', () => (resolve as any)());
}));
});
Promise.all(promises).then(modeComplete);
});
document.querySelector('#mode_basic')!.addEventListener('click', () => {
beforeMode();
fiddle.config = {
display_options: true,
embedded: true,
cpu_embedded: true,
gpu_embedded: true,
options_open: true,
basic_mode: true,
domain: 'https://fiddle.skia.org',
bug_link: false,
sources: [1, 2, 3],
loop: true,
play: true,
};
fiddle.options = {
textOnly: false,
srgb: false,
f16: false,
width: 256,
height: 256,
animated: false,
duration: 5,
offscreen: false,
offscreen_width: 256,
offscreen_height: 256,
offscreen_sample_count: 1,
offscreen_texturable: false,
offscreen_mipmap: false,
source: 0,
source_mipmap: false,
};
fiddle.runResults = {
compile_errors: [],
runtime_error: '',
fiddleHash: '5395a831409c92c22262fe20f3ecdca8',
text: `void draw(SkCanvas* canvas) {
SkPaint p;
p.setColor(SK_ColorRED);
p.setAntiAlias(true);
p.setStyle(SkPaint::kStroke_Style);
p.setStrokeWidth(10);
canvas->drawLine(20, 20, 100, 100, p);
}`,
};
fiddle.querySelector('img.cpu')!.addEventListener('load', modeComplete);
});
document.querySelector('#mode_text')!.addEventListener('click', () => {
beforeMode();
fiddle.config = {
display_options: false,
embedded: false,
cpu_embedded: true,
gpu_embedded: true,
options_open: true,
basic_mode: false,
domain: 'https://fiddle.skia.org',
bug_link: true,
sources: [1, 2, 3, 4, 5, 6],
loop: true,
play: true,
};
fiddle.options = {
textOnly: true,
srgb: false,
f16: false,
width: 128,
height: 128,
animated: false,
duration: 5,
offscreen: true,
offscreen_width: 256,
offscreen_height: 256,
offscreen_sample_count: 1,
offscreen_texturable: false,
offscreen_mipmap: false,
source: 1,
source_mipmap: true,
};
fiddle.runResults = {
compile_errors: [],
runtime_error: '',
fiddleHash: 'b4c2c1465df5c54c953b1889bd3c47e7',
text: `void assert(bool cond) {
SkDebugf("%d\n", cond);
}
void draw(SkCanvas* canvas) {
SkRRect r =
SkRRect::MakeRectXY(SkRect::MakeLTRB(421.5, 16, 526.5, 64), 24, 24);
assert(!r.isComplex());
SkMatrix matrix;
matrix.setScaleTranslate(1.0102191, 1.0102191, -2.4219234, 2.98397303);
SkRRect transformed;
r.transform(matrix, &transformed);
assert(!transformed.isComplex());
}`,
};
fiddle.querySelector('test-src-sk')!.addEventListener('change', modeComplete);
});
document.querySelector<HTMLButtonElement>('#mode_start')!.click();
document.querySelector<ThemeChooserSk>('theme-chooser-sk')!.darkmode = true;