Building Performance Swing Applications - NetBeansBuilding Performance Swing Applications Trung Duc...

25
| JavaOne 2003 | Session #1826 Building Performance Swing Applications Trung Duc Tran Engineering Manager Petr Nejedly Member of Technical Staff Sun Microsystems, Inc. NetBeans 3.5 Case Study

Transcript of Building Performance Swing Applications - NetBeansBuilding Performance Swing Applications Trung Duc...

Page 1: Building Performance Swing Applications - NetBeansBuilding Performance Swing Applications Trung Duc Tran Engineering Manager Petr Nejedly Member of Technical Staff Sun Microsystems,

| JavaOne 2003 | Session #1826

Building Performance Swing Applications

Trung Duc TranEngineering ManagerPetr NejedlyMember of Technical StaffSun Microsystems, Inc.

NetBeans 3.5 Case Study

Page 2: Building Performance Swing Applications - NetBeansBuilding Performance Swing Applications Trung Duc Tran Engineering Manager Petr Nejedly Member of Technical Staff Sun Microsystems,

| JavaOne 2003 | BOF 1826 2

Presentation Goal

The techniques used to improve the UI responsiveness of NetBeans 3.5

Things they don't tell you in performance textbooks

BEGINNING

Page 3: Building Performance Swing Applications - NetBeansBuilding Performance Swing Applications Trung Duc Tran Engineering Manager Petr Nejedly Member of Technical Staff Sun Microsystems,

| JavaOne 2003 | BOF 1826 3

About NetBeans

• large IDE application written using Java/Swing

• runs on many OSes

• platform to build desktop apps

• very modular extensible architecture

• NetBeans 3.5 was released this Monday, June 9

• http://www.netbeans.org/BEGINNING

Page 4: Building Performance Swing Applications - NetBeansBuilding Performance Swing Applications Trung Duc Tran Engineering Manager Petr Nejedly Member of Technical Staff Sun Microsystems,

| JavaOne 2003 | BOF 1826 4

Speakers' Qualifications

• Petr Nejedly has been working on performance of NetBeans for the last two years

• Trung Duc Tran manages Sun's NetBeans Platform engineering team, he led the performance action team during NetBeans 3.5 release cycle

BEGINNING

Page 5: Building Performance Swing Applications - NetBeansBuilding Performance Swing Applications Trung Duc Tran Engineering Manager Petr Nejedly Member of Technical Staff Sun Microsystems,

| JavaOne 2003 | BOF 1826 5

Agenda

• The problem

• What is UI responsiveness

• How to measure/profile responsiveness

• How to improve responsiveness

• Summary

• Q&A

BEGINNING

Page 6: Building Performance Swing Applications - NetBeansBuilding Performance Swing Applications Trung Duc Tran Engineering Manager Petr Nejedly Member of Technical Staff Sun Microsystems,

| JavaOne 2003 | BOF 1826 6

The Problem

• “nice features but too slow”

• “sluggish, can't keep up with me typing”

• “memory hog”

• “I need to buy a new machine to be able to use it”

MIDDLE

Page 7: Building Performance Swing Applications - NetBeansBuilding Performance Swing Applications Trung Duc Tran Engineering Manager Petr Nejedly Member of Technical Staff Sun Microsystems,

| JavaOne 2003 | BOF 1826 7

UI Responsiveness != Raw Performance

• Performance: raw numbers

• UI responsiveness: perception, timely feedback

• Example: splash screen during startup the app starts more slowly but better user perception

MIDDLE

Page 8: Building Performance Swing Applications - NetBeansBuilding Performance Swing Applications Trung Duc Tran Engineering Manager Petr Nejedly Member of Technical Staff Sun Microsystems,

| JavaOne 2003 | BOF 1826 8

Design Principles for Responsive UI

• timely feedback

• acknowledge user inputs immediately

• three time constants: 100 msec: eye-hand coordination tasks (mouse, typing) 1 sec: opening a new window/dialog, reformatting source

files,... 10 sec: unbroken concentration on a task, “unit task”,

progress indicator is necessary

• Reference:Jeff Johnson:“GUI Bloopers” book

MIDDLE

Page 9: Building Performance Swing Applications - NetBeansBuilding Performance Swing Applications Trung Duc Tran Engineering Manager Petr Nejedly Member of Technical Staff Sun Microsystems,

| JavaOne 2003 | BOF 1826 9

Measure/Profile Responsiveness

• needs accuracy of 10 msecSystem.currentTimeMillis() is fine

• start: mouse/keyboard event

• stop: the last paint event

• technique:patching AWT/Swing codeapplication code remains unchanged

• profiler start/stop API

MIDDLE

Page 10: Building Performance Swing Applications - NetBeansBuilding Performance Swing Applications Trung Duc Tran Engineering Manager Petr Nejedly Member of Technical Staff Sun Microsystems,

| JavaOne 2003 | BOF 1826 10

The Event Flow

MIDDLE

> java -Xbootclasspath/p:/path/to/uiresp.jar Main

Patch download: http://performance.netbeans.org/

handle

paint

InputEvent

RepaintRequest

t0

t1

Page 11: Building Performance Swing Applications - NetBeansBuilding Performance Swing Applications Trung Duc Tran Engineering Manager Petr Nejedly Member of Technical Staff Sun Microsystems,

| JavaOne 2003 | Session #1826

Demo

Page 12: Building Performance Swing Applications - NetBeansBuilding Performance Swing Applications Trung Duc Tran Engineering Manager Petr Nejedly Member of Technical Staff Sun Microsystems,

| JavaOne 2003 | BOF 1826 12

Identified Problems in NetBeans

• slow main menus, context menus

• slow expansion, navigation in the explorer tree

• the missing wait cursor, no progress indicator

• frequently used dialogs are slow

• opening files is slow

• temporary “freeze” during typing

• first use is especially slow

http://performance.netbeans.org/responsiveness/issues.htmlMIDDLE

Page 13: Building Performance Swing Applications - NetBeansBuilding Performance Swing Applications Trung Duc Tran Engineering Manager Petr Nejedly Member of Technical Staff Sun Microsystems,

| JavaOne 2003 | BOF 1826 13

Techniques Used in NetBeans 3.5

• standard performance tuning techniques

• automatic wait cursor

• warm-up

• lazy initialization

• progressive rendering

• UI redesign

MIDDLE

Page 14: Building Performance Swing Applications - NetBeansBuilding Performance Swing Applications Trung Duc Tran Engineering Manager Petr Nejedly Member of Technical Staff Sun Microsystems,

| JavaOne 2003 | BOF 1826 14

Automatic Wait Cursor

• all actions are called through the ActionManager

• easy to wrap action invocation inside show/hideWaitCursor()

try {MouseCursorUtils.showWaitCursor();...

} finally {MouseCursorUtils.hideWaitCursor();

}

• consistencyMIDDLE

Page 15: Building Performance Swing Applications - NetBeansBuilding Performance Swing Applications Trung Duc Tran Engineering Manager Petr Nejedly Member of Technical Staff Sun Microsystems,

| JavaOne 2003 | BOF 1826 15

Warm-up

• first use is slow (loading classes,...)

• prepare in advance for expected user tasks

• example: context menu in the editor is computed in the background and cached when a file is opened

MIDDLE

Page 16: Building Performance Swing Applications - NetBeansBuilding Performance Swing Applications Trung Duc Tran Engineering Manager Petr Nejedly Member of Technical Staff Sun Microsystems,

| JavaOne 2003 | BOF 1826 16

Lazy Initialization

• wizard panels used to be init'ed before the wizard is shown -> slow

• to show the wizard we only need the first panel

• the second panel is created when the user clicks “Next”

MIDDLE

Page 17: Building Performance Swing Applications - NetBeansBuilding Performance Swing Applications Trung Duc Tran Engineering Manager Petr Nejedly Member of Technical Staff Sun Microsystems,

| JavaOne 2003 | BOF 1826 17

Progressive Rendering

• show the most important information first

• the secondary information can be filled in later

MIDDLE

Page 18: Building Performance Swing Applications - NetBeansBuilding Performance Swing Applications Trung Duc Tran Engineering Manager Petr Nejedly Member of Technical Staff Sun Microsystems,

| JavaOne 2003 | BOF 1826 18

What's if it's too hard?

• redesign the UI

MIDDLE

Page 19: Building Performance Swing Applications - NetBeansBuilding Performance Swing Applications Trung Duc Tran Engineering Manager Petr Nejedly Member of Technical Staff Sun Microsystems,

Demo

Page 20: Building Performance Swing Applications - NetBeansBuilding Performance Swing Applications Trung Duc Tran Engineering Manager Petr Nejedly Member of Technical Staff Sun Microsystems,

| JavaOne 2003 | BOF 1826 20

Summary

• perceived performance != raw performance

• timely feedback

• three time constants: 0.1 sec / 1 sec / 10 sec

• measuring/profiling UI response time

• techniques used in NetBeans 3.5

• http://performance.netbeans.org

END

Page 21: Building Performance Swing Applications - NetBeansBuilding Performance Swing Applications Trung Duc Tran Engineering Manager Petr Nejedly Member of Technical Staff Sun Microsystems,

| JavaOne 2003 | BOF 1826 21

What Users Say

END

“NetBeans in the past has operated pretty slow, enough to frustrate even the biggest fan. [....] In my personal testing of 3.5, NetBeans performs as fast as any native application.”

http://dmartin.org/blog/Java/?permalink=Netbeans_3_5_Beta1_is_released!.html

Page 22: Building Performance Swing Applications - NetBeansBuilding Performance Swing Applications Trung Duc Tran Engineering Manager Petr Nejedly Member of Technical Staff Sun Microsystems,

| JavaOne 2003 | BOF 1826 22

If You Only Remember One Thing…

UI applications should be optimized

for human users, not for machines.

END

Page 23: Building Performance Swing Applications - NetBeansBuilding Performance Swing Applications Trung Duc Tran Engineering Manager Petr Nejedly Member of Technical Staff Sun Microsystems,

| JavaOne 2003 | BOF 1826 23

URLs

END

• NetBeans open source projecthttp://www.netbeans.org/

• NetBeans architecture and APIshttp://openide.netbeans.org/

• NetBeans performance HOWTOs, guidelineshttp://performance.netbeans.org/

Page 24: Building Performance Swing Applications - NetBeansBuilding Performance Swing Applications Trung Duc Tran Engineering Manager Petr Nejedly Member of Technical Staff Sun Microsystems,

Q&A

Page 25: Building Performance Swing Applications - NetBeansBuilding Performance Swing Applications Trung Duc Tran Engineering Manager Petr Nejedly Member of Technical Staff Sun Microsystems,