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)