[
https://issues.apache.org/jira/browse/PIVOT-96?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Todd Volkert updated PIVOT-96:
------------------------------
Attachment: diff.txt
This patch adds an isOpaque() method to Skin and to Component, and Container
uses it to determine if it needs to paint itself or if it's going to be
obscured by a child component. Early testing shows a dramatic performance
improvement with this change.
> 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
> Attachments: diff.txt
>
>
> 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.