Slide 1

Slide 1 text

JetBrains Runtime: Зачем мы форкнули OpenJDK? — Konstantin Bulenkov 29.02.2020, Novosibirsk

Slide 2

Slide 2 text

Ctrl+Tab / Cmd+E

Slide 3

Slide 3 text

Shift + Shift

Slide 4

Slide 4 text

Structure Popup (Cmd + F12)

Slide 5

Slide 5 text

Darcula Look-n-Feel

Slide 6

Slide 6 text

Inline debugger

Slide 7

Slide 7 text

Diagrams / UML

Slide 8

Slide 8 text

Themes

Slide 9

Slide 9 text

JetBrains Toolbox App https://toolbox.app

Slide 10

Slide 10 text

JetBrains Mono https://jetbrains.com/mono

Slide 11

Slide 11 text

JetBrains Runtime: — ● OpenJDK fork ● All JetBrains IDEs ● Google Android Studio ● YourKit ● JProfiler ● + Others ● ~10M users

Slide 12

Slide 12 text

WHY?

Slide 13

Slide 13 text

JAVA SWING ⓵

Slide 14

Slide 14 text

Swing — ● Создан в 1997 ● Кроссплатформенный ● Использовался в первом продукте Renamer ● В 2000м не было альтернатив ● Legacy (JComponent в API, сильносвязность)

Slide 15

Slide 15 text

DESKTOP ⓶

Slide 16

Slide 16 text

⓷ ● Не все баги можно починить в клиентском коде ● Каждый UI баг в JDK превращается в N багов в продукте

Slide 17

Slide 17 text

JVM -> IDEs ->

Slide 18

Slide 18 text

Откуда баги в JDK? — ● Просто баги (фокус, клавиатура, etc) ● Апдейты в OS, которые приводят к багам (скроллинг, variable font) ● Апдейты в железе (touch bar)

Slide 19

Slide 19 text

No content

Slide 20

Slide 20 text

Если баг не чинят, почини сам* Народная мудрость. *Если не лень

Slide 21

Slide 21 text

while (!⛈) { .✝ (false); } .✝ (true);

Slide 22

Slide 22 text

“Java's not worth building in. Nobody uses Java anymore. It's this big heavyweight ball and chain.” Steve Jobs, 2007

Slide 23

Slide 23 text

Three years later. 2010 — - CVE-2008-5353: allows to run untrusted applets and applications in a privileged context - CVE-2009-3867: allows to execute arbitrary code via a long file: URL in an argument - CVE-2010-0094: allows to affect confidentiality, integrity, and availability via unknown vectors

Slide 24

Slide 24 text

Boonana Trojan —

Slide 25

Slide 25 text

Java deprecation on OS X — Java for OS X v10.6 Update 3 is deprecated “Developers should not rely on the Apple-supplied Java runtime being present in future versions of OS X” October, 2010

Slide 26

Slide 26 text

Java 7 — ● Apple stopped supporting Java ● Oracle started supporting Java for Mac ● Text rendering is broken on Mac in Java 7

Slide 27

Slide 27 text

No content

Slide 28

Slide 28 text

No content

Slide 29

Slide 29 text

No content

Slide 30

Slide 30 text

Oracle JDK 1.7 does not support subpixel AA

Slide 31

Slide 31 text

No antialiasing —

Slide 32

Slide 32 text

Grayscale antialiasing —

Slide 33

Slide 33 text

Subpixel antialiasing —

Slide 34

Slide 34 text

Чтобы разобраться как работает subpixel AA, нужно разобраться как работает pixel

Slide 35

Slide 35 text

Как выглядит Pixel на LCD мониторах —

Slide 36

Slide 36 text

Как выглядит Pixel на LCD мониторах —

Slide 37

Slide 37 text

Как выглядит Pixel на LCD мониторах —

Slide 38

Slide 38 text

Как проверить, что докладчик не врёт?

Slide 39

Slide 39 text

No content

Slide 40

Slide 40 text

Как работает subpixel AA?

Slide 41

Slide 41 text

Как это работает? —

Slide 42

Slide 42 text

Как это работает? —

Slide 43

Slide 43 text

Как это работает? —

Slide 44

Slide 44 text

Как это работает? —

Slide 45

Slide 45 text

Анитиалиасиг —

Slide 46

Slide 46 text

Алгоритмы subpixel rendering — ● ClearType (Microsoft) ● OS X (Apple, part of Quartz 2D) ● CoolType (Adobe) ● FreeType ● IBM

Slide 47

Slide 47 text

Sub-pixel rendering tuning —

Slide 48

Slide 48 text

Subpixel AA is the first feature of JetBrains Runtime

Slide 49

Slide 49 text

Hinting —

Slide 50

Slide 50 text

Hinting —

Slide 51

Slide 51 text

Hinting —

Slide 52

Slide 52 text

Hinting —

Slide 53

Slide 53 text

FreeType Rendering, Hinting

Slide 54

Slide 54 text

No content

Slide 55

Slide 55 text

Text Layout

Slide 56

Slide 56 text

HarfBuzz C API for text shaping Supports Indic, Arabic, Emoji, Hebrew, and more

Slide 57

Slide 57 text

Basic steps for text rendering — 1. Styling (parse markup, query system for fonts) 2. Layout (break text into pieces) 3. Shaping (compute the glyphs in a line and their positions) 4. Rasterization (rasterize needed glyphs into an cache) 5. Composition (copy glyphs from cache to their desired positions)

Slide 58

Slide 58 text

No content

Slide 59

Slide 59 text

No content

Slide 60

Slide 60 text

Text in IntelliJ Platform — ● Font rendering ● Complex languages تﯾﻠﺑﺎﻗ ● Emoji ❤ ● RTL ● Ligatures -> -= -= ----

Slide 61

Slide 61 text

HiDPI

Slide 62

Slide 62 text

What is HiDPI? — ● Retina ○ Сетчатка – внутренняя оболочка глаза ○ Общее маркетинговое название ЖК и OLED дисплеев, используемых в устройствах Apple с 2010 года ● 4K (3840×2160) = 2160p ● 5K (5120×2880) = 2880p ● Quad HD (2560×1440) = 1440p

Slide 63

Slide 63 text

HiDPI = x2

Slide 64

Slide 64 text

Problems with HiDPI — ● Blurry icons, text, paintings ● Small content

Slide 65

Slide 65 text

Blurry & small icons —

Slide 66

Slide 66 text

HiDPI Support — Когда мы занялись HiDPI

Slide 67

Slide 67 text

A11Y

Slide 68

Slide 68 text

A11Y ACCESSIBILITY

Slide 69

Slide 69 text

No content

Slide 70

Slide 70 text

Accessibility in IntelliJ Platform — + High Contrast theme + Screen readers (NVDA, JAWS)

Slide 71

Slide 71 text

What’s next?

Slide 72

Slide 72 text

VoiceOver

Slide 73

Slide 73 text

A new graphics rendering pipeline for macOS

Slide 74

Slide 74 text

Thanks Q&A