Java2D performance optimizations
--------------------------------
Key: PIVOT-96
URL: https://issues.apache.org/jira/browse/PIVOT-96
Project: Pivot
Issue Type: Improvement
Components: wtk
Affects Versions: 1.1
Reporter: Todd Volkert
Assignee: Todd Volkert
Priority: Minor
The following are some performance numbers from a sample run on my local
machine. They're only meaningful when compared against one another (they
shouldn't ever be compared to someone else's numbers or against future
performance runs). They show the relative run times of paint(Graphics2D) calls
in our skin classes, sorted by avg run time.
<pre>
Skin :: calls :: avg
(ms) :: total (ms)
pivot.wtk.skin.terra.TerraMenuPopupSkin :: 73 ::
0.000000 :: 0
pivot.wtk.skin.terra.TerraPanoramaSkin :: 430 ::
0.000000 :: 0
pivot.wtk.skin.terra.TerraRollupSkin :: 2562 ::
0.000000 :: 0
pivot.wtk.skin.terra.TerraSplitPaneSkin :: 471 ::
0.000000 :: 0
pivot.wtk.skin.terra.TerraFlowPaneSkin :: 34167 ::
0.000088 :: 3
pivot.wtk.skin.terra.TerraFormSkin :: 565 ::
0.001770 :: 1
pivot.wtk.skin.terra.TerraSliderSkin :: 559 ::
0.001789 :: 1
pivot.wtk.skin.terra.TerraMenuBarSkin :: 176 ::
0.011364 :: 2
pivot.wtk.skin.terra.TerraSplitPaneSkin$SplitterSkin :: 433 ::
0.011547 :: 5
pivot.wtk.skin.terra.TerraSeparatorSkin :: 165 ::
0.012121 :: 2
pivot.wtk.skin.terra.TerraCalendarSkin :: 156 ::
0.019231 :: 3
pivot.wtk.skin.terra.TerraScrollPaneCornerSkin :: 291 ::
0.020619 :: 6
pivot.wtk.skin.terra.TerraTabPaneSkin :: 368 ::
0.021739 :: 8
pivot.wtk.skin.terra.TerraTablePaneSkin :: 863 ::
0.040556 :: 35
pivot.wtk.skin.terra.TerraAccordionSkin :: 92 ::
0.043478 :: 4
pivot.wtk.skin.terra.TerraSpinnerSkin$SpinButtonSkin :: 1476 ::
0.052168 :: 77
pivot.wtk.skin.terra.TerraScrollBarSkin$HandleSkin :: 678 ::
0.058997 :: 40
pivot.wtk.skin.terra.TerraSpinnerSkin :: 744 ::
0.060484 :: 45
pivot.wtk.skin.terra.TerraCalendarSkin$DateButtonSkin :: 5818 ::
0.061705 :: 359
pivot.wtk.skin.terra.TerraLabelSkin :: 36104 ::
0.066696 :: 2408
pivot.wtk.skin.terra.TerraTextInputSkin :: 222 ::
0.072072 :: 16
pivot.wtk.skin.ImageViewSkin :: 6488 ::
0.074445 :: 483
pivot.wtk.skin.terra.TerraMeterSkin :: 804 ::
0.085821 :: 69
pivot.wtk.skin.terra.TerraAlertSkin :: 124 ::
0.088710 :: 11
pivot.wtk.skin.terra.TerraSliderSkin$ThumbSkin :: 555 ::
0.095495 :: 53
pivot.wtk.skin.terra.TerraExpanderSkin$ShadeButtonSkin :: 256 ::
0.097656 :: 25
pivot.wtk.skin.terra.TerraRollupSkin$RollupButtonSkin :: 1818 ::
0.097910 :: 178
pivot.wtk.skin.terra.TerraScrollBarSkin :: 834 ::
0.100719 :: 84
pivot.wtk.skin.terra.TerraScrollBarSkin$ScrollButtonSkin :: 1415 ::
0.108127 :: 153
pivot.wtk.skin.terra.TerraAccordionSkin$PanelHeaderSkin :: 263 ::
0.133080 :: 35
pivot.wtk.skin.terra.TerraExpanderSkin :: 266 ::
0.146617 :: 39
pivot.wtk.skin.terra.TerraCheckboxSkin :: 3210 ::
0.151713 :: 487
pivot.wtk.skin.terra.TerraMenuButtonSkin :: 591 ::
0.155668 :: 92
pivot.wtk.skin.terra.TerraPromptSkin :: 19 ::
0.157895 :: 3
pivot.wtk.skin.terra.TerraSpinnerSkin$SpinnerContentSkin :: 735 ::
0.161905 :: 119
pivot.wtk.skin.terra.TerraListButtonSkin :: 134 ::
0.164179 :: 22
pivot.wtk.skin.terra.TerraMenuBarItemSkin :: 664 ::
0.183735 :: 122
pivot.wtk.skin.terra.TerraMenuSkin :: 69 ::
0.202899 :: 14
pivot.wtk.skin.terra.TerraMenuItemSkin :: 238 ::
0.210084 :: 50
pivot.wtk.skin.terra.TerraTabPaneSkin$TabButtonSkin :: 1041 ::
0.282421 :: 294
pivot.wtk.skin.terra.TerraCalendarButtonSkin :: 340 ::
0.285294 :: 97
pivot.wtk.skin.TextAreaSkin :: 71 ::
0.323944 :: 23
pivot.wtk.skin.terra.TerraFrameSkin$FrameButtonSkin :: 122 ::
0.336066 :: 41
pivot.wtk.skin.terra.TerraTableViewHeaderSkin :: 413 ::
0.341404 :: 141
pivot.wtk.skin.terra.TerraBorderSkin :: 6200 ::
0.358226 :: 2221
pivot.wtk.skin.terra.TerraPushButtonSkin :: 1300 ::
0.363846 :: 473
pivot.wtk.skin.terra.TerraLinkButtonSkin :: 399 ::
0.385965 :: 154
pivot.wtk.skin.terra.TerraScrollPaneSkin :: 1968 ::
0.462398 :: 910
pivot.wtk.skin.terra.TerraRadioButtonSkin :: 565 ::
0.467257 :: 264
pivot.wtk.skin.terra.TerraTreeViewSkin :: 427 ::
1.060890 :: 453
pivot.wtk.skin.WindowSkin :: 802 ::
1.168329 :: 937
pivot.wtk.skin.DisplaySkin :: 797 ::
1.193225 :: 951
pivot.wtk.skin.terra.TerraListViewSkin :: 194 ::
1.324742 :: 257
pivot.wtk.skin.terra.TerraTableViewSkin :: 465 ::
1.408602 :: 655
</pre>
There are a few things that jump off the page to me:
1) LabelSkin is called to paint a TON! This is because it's used in virtually
every renderer. Its average run time is comparatively fast, but because it's
so foundational, it's the one paint method that should be optimized to the tilt.
2) BorderSkin's paint is way costlier than you'd think it'd be relative to
other skins (it's in the 80th percentile), and it's also called an awful lot.
Can we find out what's taking so long and speed it up?
3) DisplaySkin and WindowSkin only fill in their background color, yet because
they often do it on the entire clip rect (display always does, window always
does when it's maximized), it's surprisingly expensive! ScrollPaneSkin has the
same issue but to a lesser extent. Is there any known trick to speeding up
this primitive graphics operation? I doubt it, but it's worth asking :)
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.