Thanks, Kirill.

  There still seems to be a fair number of unaccelerated calls, like
  MaskFills (fills of antialiased shapes), MaskBlits (AA shape filled
  with gradient), and BI to BI blits.

  I know that Nimus does lots of caching in VolatileImages,
  and they can even use the cached copies for rendering
  different sizes of the same component by doing scaling.
  Since it's just a texture mapping operation, it is typically
  very fast.

  We have a Swing performance benchmark in house. It pains me
  to no end that we can't open source it or give you access to it.
  But I'll see if I can run it with Substance L&F and compare
  with Nimbus and Ocean on my system.

  Thanks,
    Dmitri


[EMAIL PROTECTED] wrote:
Results of running this benchmark under Nimbus (6u10, b22):


810 calls to D3DDrawLine
19290 calls to sun.java2d.d3d.D3DRTTSurfaceToSurfaceBlit::Blit("D3D Surface 
(render-to-texture)", An
yAlpha, "D3D Surface")
90 calls to sun.java2d.d3d.D3DSurfaceToSwBlit::Blit("D3D Surface", SrcNoEa, 
IntArgb)
25050 calls to 
sun.java2d.d3d.D3DRTTSurfaceToSurfaceTransform::TransformBlit("D3D Surface 
(render-to
-texture)", AnyAlpha, "D3D Surface")
104 calls to sun.java2d.loops.MaskBlit::MaskBlit(IntArgbPre, SrcOver, 
IntArgbPre)
13290 calls to D3DDrawGlyphs
7626 calls to sun.java2d.d3d.D3DMaskFill::MaskFill(LinearGradientPaint, SrcOver, 
"D3D Surface")
12 calls to sun.java2d.loops.MaskBlit::MaskBlit(IntRgb, AnyAlpha, IntArgbPre)
16 calls to sun.java2d.d3d.D3DSwToSurfaceBlit::Blit(ByteIndexed, AnyAlpha, "D3D 
Surface")
16 calls to sun.java2d.d3d.D3DSwToTextureBlit::Blit(ByteIndexed, SrcNoEa, "D3D 
Texture")
17 calls to sun.java2d.d3d.D3DSwToTextureBlit::Blit(IntArgb, SrcNoEa, "D3D 
Texture")
34 calls to sun.java2d.loops.MaskFill::MaskFill(AnyColor, SrcOver, IntArgbPre)
11180 calls to D3DFillRect
83034 calls to sun.java2d.d3d.D3DMaskFill::MaskFill(AnyColor, SrcOver, "D3D 
Surface")
8 calls to sun.java2d.loops.FillRect::FillRect(AnyColor, SrcNoEa, AnyInt)
104 calls to sun.java2d.loops.Blit$GeneralMaskBlit::Blit(IntArgbPre, 
SrcOverNoEa, IntArgbPre)
868 calls to sun.java2d.d3d.D3DSwToSurfaceBlit::Blit(IntRgb, AnyAlpha, "D3D 
Surface")
2877 calls to sun.java2d.d3d.D3DTextureToSurfaceBlit::Blit("D3D Texture", AnyAlpha, 
"D3D Surface")
2378 calls to sun.java2d.d3d.D3DMaskBlit::MaskBlit(IntRgb, SrcNoEa, "D3D 
Surface")
17 calls to sun.java2d.d3d.D3DSwToSurfaceBlit::Blit(IntArgb, AnyAlpha, "D3D 
Surface")
166821 total calls to 20 different primitives

Result of running the benchmark on Substance with BufferedImages only:

30 calls to sun.java2d.d3d.D3DGeneralBlit::Blit(Any, AnyAlpha, "D3D Surface")
720 calls to D3DDrawLine
16 calls to sun.java2d.d3d.D3DSwToTextureBlit::Blit(ByteIndexed, SrcNoEa, "D3D 
Texture")
13976 calls to sun.java2d.loops.MaskFill::MaskFill(AnyColor, Src, IntArgbPre)
1653 calls to sun.java2d.loops.MaskFill::MaskFill(AnyColor, SrcOver, IntArgbPre)
55000 calls to sun.java2d.loops.Blit::Blit(IntRgb, SrcNoEa, IntArgbPre)
1 call to sun.java2d.loops.Blit$GeneralMaskBlit::Blit(IntArgb, SrcOverNoEa, 
IntArgb)
3 calls to sun.java2d.loops.ScaledBlit::ScaledBlit(ByteIndexedBm, SrcOverNoEa, 
IntRgb)
18 calls to sun.java2d.d3d.D3DSwToTextureBlit::Blit(IntArgb, SrcNoEa, "D3D 
Texture")
12360 calls to sun.java2d.d3d.D3DMaskFill::MaskFill(AnyColor, SrcOver, "D3D 
Surface")
10980 calls to sun.java2d.d3d.D3DMaskFill::MaskFill(LinearGradientPaint, SrcOver, 
"D3D Surface")
1 call to sun.java2d.loops.MaskBlit::MaskBlit(IntArgb, SrcOver, IntArgb)
5155 calls to sun.java2d.loops.Blit$GeneralMaskBlit::Blit(IntArgbPre, 
SrcOverNoEa, IntArgbPre)
270 calls to D3DDrawRect
1260 calls to sun.java2d.d3d.D3DMaskFill::MaskFill(GradientPaint, SrcOver, "D3D 
Surface")
10 calls to sun.java2d.loops.DrawRect::DrawRect(AnyColor, SrcNoEa, AnyInt)
30 calls to sun.java2d.loops.MaskBlit::MaskBlit(IntArgb, AnyAlpha, IntArgbPre)
2198 calls to sun.java2d.loops.Blit$GeneralMaskBlit::Blit(IntArgbPre, SrcOver, 
IntArgbPre)
4019 calls to sun.java2d.d3d.D3DSwToSurfaceBlit::Blit(IntArgbPre, AnyAlpha, "D3D 
Surface")
3 calls to sun.java2d.loops.Blit::Blit(ByteIndexedBm, SrcOverNoEa, IntRgb)
3397 calls to sun.java2d.loops.MaskBlit::MaskBlit(IntArgb, SrcOver, IntArgbPre)
12 calls to sun.java2d.loops.FillSpans::FillSpans(AnyColor, SrcNoEa, AnyInt)
16 calls to sun.java2d.d3d.D3DSwToSurfaceBlit::Blit(ByteIndexed, AnyAlpha, "D3D 
Surface")
30 calls to sun.java2d.loops.OpaqueCopyAnyToArgb::Blit(Any, SrcNoEa, IntArgb)
9630 calls to D3DFillSpans
18 calls to sun.java2d.d3d.D3DSwToSurfaceBlit::Blit(IntArgb, AnyAlpha, "D3D 
Surface")
259 calls to sun.java2d.loops.TransformHelper::TransformHelper(IntArgbPre, 
SrcNoEa, IntArgbPre)
14190 calls to D3DDrawGlyphs
7353 calls to sun.java2d.loops.MaskBlit::MaskBlit(IntArgbPre, SrcOver, 
IntArgbPre)
450 calls to sun.java2d.loops.Blit$GeneralMaskBlit::Blit(IntArgbPre, DstIn, 
IntArgbPre)
1 call to sun.java2d.loops.MaskBlit::MaskBlit(IntArgbPre, SrcOver, IntArgb)
30 calls to sun.java2d.loops.Blit$GeneralMaskBlit::Blit(Any, SrcNoEa, 
IntArgbPre)
90 calls to sun.java2d.d3d.D3DSurfaceToSwBlit::Blit("D3D Surface", SrcNoEa, 
IntArgb)
10287 calls to sun.java2d.d3d.D3DTextureToSurfaceBlit::Blit("D3D Texture", AnyAlpha, 
"D3D Surface")
7046 calls to sun.java2d.loops.MaskBlit::MaskBlit(IntRgb, AnyAlpha, IntArgbPre)
3397 calls to sun.java2d.loops.Blit$GeneralMaskBlit::Blit(IntArgb, SrcOverNoEa, 
IntArgbPre)
76 calls to sun.java2d.d3d.D3DSwToTextureBlit::Blit(IntArgbPre, SrcNoEa, "D3D 
Texture")
90 calls to sun.java2d.loops.DrawGlyphList::DrawGlyphList(AnyColor, SrcNoEa, 
AnyInt)
1080 calls to D3DFillPath
1 call to sun.java2d.loops.Blit$GeneralMaskBlit::Blit(IntArgbPre, SrcOverNoEa, 
IntArgb)
540 calls to sun.java2d.loops.Blit$GeneralMaskBlit::Blit(IntArgbPre, DstOut, 
IntArgbPre)
24002 calls to D3DFillRect
18 calls to sun.java2d.loops.DrawLine::DrawLine(AnyColor, SrcNoEa, AnyInt)
100 calls to sun.java2d.loops.FillRect::FillRect(AnyColor, SrcNoEa, AnyInt)
990 calls to sun.java2d.loops.MaskBlit::MaskBlit(IntArgbPre, AnyAlpha, 
IntArgbPre)
30 calls to sun.java2d.loops.MaskBlit$General::MaskBlit(Any, SrcNoEa, 
IntArgbPre)
190836 total calls to 46 different primitives

Running the benchmark on Substance with one cache using VolatileImages:

720 calls to D3DDrawLine
30 calls to sun.java2d.loops.MaskBlit::MaskBlit(IntArgb, AnyAlpha, IntArgbPre)
69 calls to sun.java2d.d3d.D3DSwToTextureBlit::Blit(IntArgbPre, SrcNoEa, "D3D 
Texture")
1 call to sun.java2d.loops.MaskBlit::MaskBlit(IntArgb, SrcOver, IntArgb)
30 calls to sun.java2d.loops.Blit$GeneralMaskBlit::Blit(Any, SrcNoEa, 
IntArgbPre)
1653 calls to sun.java2d.loops.MaskFill::MaskFill(AnyColor, SrcOver, IntArgbPre)
18 calls to sun.java2d.d3d.D3DSwToSurfaceBlit::Blit(IntArgb, AnyAlpha, "D3D 
Surface")
9342 calls to sun.java2d.d3d.D3DTextureToSurfaceBlit::Blit("D3D Texture", AnyAlpha, 
"D3D Surface")
4723 calls to sun.java2d.loops.Blit$GeneralMaskBlit::Blit(IntArgbPre, 
SrcOverNoEa, IntArgbPre)
90 calls to sun.java2d.loops.DrawGlyphList::DrawGlyphList(AnyColor, SrcNoEa, 
AnyInt)
56607 calls to sun.java2d.loops.Blit::Blit(IntRgb, SrcNoEa, IntArgbPre)
270 calls to D3DDrawRect
30 calls to sun.java2d.loops.MaskBlit$General::MaskBlit(Any, SrcNoEa, 
IntArgbPre)
18 calls to sun.java2d.d3d.D3DSwToTextureBlit::Blit(IntArgb, SrcNoEa, "D3D 
Texture")
1078 calls to sun.java2d.loops.MaskBlit::MaskBlit(IntArgbPre, AnyAlpha, 
IntArgbPre)
3 calls to sun.java2d.loops.Blit::Blit(ByteIndexedBm, SrcOverNoEa, IntRgb)
10 calls to sun.java2d.loops.DrawRect::DrawRect(AnyColor, SrcNoEa, AnyInt)
1988 calls to sun.java2d.loops.Blit$GeneralMaskBlit::Blit(IntArgbPre, SrcOver, 
IntArgbPre)
6868 calls to sun.java2d.loops.MaskBlit::MaskBlit(IntRgb, AnyAlpha, IntArgbPre)
1260 calls to sun.java2d.d3d.D3DMaskFill::MaskFill(GradientPaint, SrcOver, "D3D 
Surface")
1 call to sun.java2d.loops.Blit$GeneralMaskBlit::Blit(IntArgbPre, SrcOverNoEa, 
IntArgb)
2040 calls to sun.java2d.d3d.D3DRTTSurfaceToSurfaceBlit::Blit("D3D Surface 
(render-to-texture)", Any
Alpha, "D3D Surface")
3488 calls to sun.java2d.loops.MaskBlit::MaskBlit(IntArgb, SrcOver, IntArgbPre)
12 calls to sun.java2d.loops.FillSpans::FillSpans(AnyColor, SrcNoEa, AnyInt)
9630 calls to D3DFillSpans
258 calls to sun.java2d.loops.TransformHelper::TransformHelper(IntArgbPre, 
SrcNoEa, IntArgbPre)
1 call to sun.java2d.loops.Blit$GeneralMaskBlit::Blit(IntArgb, SrcOverNoEa, 
IntArgb)
1 call to sun.java2d.loops.MaskBlit::MaskBlit(IntArgbPre, SrcOver, IntArgb)
14190 calls to D3DDrawGlyphs
3699 calls to sun.java2d.d3d.D3DSwToSurfaceBlit::Blit(IntArgbPre, AnyAlpha, "D3D 
Surface")
6711 calls to sun.java2d.loops.MaskBlit::MaskBlit(IntArgbPre, SrcOver, 
IntArgbPre)
3 calls to sun.java2d.loops.ScaledBlit::ScaledBlit(ByteIndexedBm, SrcOverNoEa, 
IntRgb)
14456 calls to sun.java2d.loops.MaskFill::MaskFill(AnyColor, Src, IntArgbPre)
3488 calls to sun.java2d.loops.Blit$GeneralMaskBlit::Blit(IntArgb, SrcOverNoEa, 
IntArgbPre)
12360 calls to sun.java2d.d3d.D3DMaskFill::MaskFill(AnyColor, SrcOver, "D3D 
Surface")
1080 calls to D3DFillPath
27807 calls to D3DFillRect
30 calls to sun.java2d.d3d.D3DGeneralBlit::Blit(Any, AnyAlpha, "D3D Surface")
11274 calls to sun.java2d.d3d.D3DMaskFill::MaskFill(LinearGradientPaint, SrcOver, 
"D3D Surface")
18 calls to sun.java2d.loops.DrawLine::DrawLine(AnyColor, SrcNoEa, AnyInt)
30 calls to sun.java2d.loops.OpaqueCopyAnyToArgb::Blit(Any, SrcNoEa, IntArgb)
16 calls to sun.java2d.d3d.D3DSwToTextureBlit::Blit(ByteIndexed, SrcNoEa, "D3D 
Texture")
100 calls to sun.java2d.loops.FillRect::FillRect(AnyColor, SrcNoEa, AnyInt)
494 calls to sun.java2d.loops.Blit$GeneralMaskBlit::Blit(IntArgbPre, DstIn, 
IntArgbPre)
584 calls to sun.java2d.loops.Blit$GeneralMaskBlit::Blit(IntArgbPre, DstOut, 
IntArgbPre)
90 calls to sun.java2d.d3d.D3DSurfaceToSwBlit::Blit("D3D Surface", SrcNoEa, 
IntArgb)
16 calls to sun.java2d.d3d.D3DSwToSurfaceBlit::Blit(ByteIndexed, AnyAlpha, "D3D 
Surface")
196685 total calls to 47 different primitives
[Message sent by forum member 'kirillcool' (kirillcool)]

http://forums.java.net/jive/thread.jspa?messageID=271126

===========================================================================
To unsubscribe, send email to [EMAIL PROTECTED] and include in the body
of the message "signoff JAVA2D-INTEREST".  For general help, send email to
[EMAIL PROTECTED] and include in the body of the message "help".

===========================================================================
To unsubscribe, send email to [EMAIL PROTECTED] and include in the body
of the message "signoff JAVA2D-INTEREST".  For general help, send email to
[EMAIL PROTECTED] and include in the body of the message "help".

Reply via email to