What I meant with "odd" is the fact that a thread is waiting for a lock instance which is not told by the stack trace as locked by another thread, and that there is a thread which is waiting for a lock obtained by itself. I haven't seen this patterns before, but I also must confess that I am not an expert in reading stack traces. ;-)
-Markus From: Kevin Rushforth [mailto:kevin.rushfo...@oracle.com] Sent: Dienstag, 22. Dezember 2015 16:57 To: Markus KARG Cc: openjfx-dev@openjdk.java.net Subject: Re: Huge JavaFX performance drop in Debian Jessie This is the normal stack trace I would expect when waiting for rendering to complete and the rendering is taking a long time. So in short: I see nothing strange or remarkable about the stack trace. -- Kevin Markus KARG wrote: Thanks for the stacktrace. This is definitively a separate issue. Yours actually waits for the renderer to complete the previous frame. Mine is heavily working inside ToolbarSkin. Technically unrelated, but leading to the same outcome: frozen UI. What seems odd is that the object reference the JavaFX thread is waiting for is not locked by any other thread, particularly *not* the renderer. Never saw something like that. One more thing I noticed in your stacktrace: The prism font dispose has locked an object and now waits for exactly that object. That looks strange. How can a thread wait for an object which itself has locked?! -Markus -----Original Message----- From: Chris Newland [mailto:cnewl...@chrisnewland.com] Sent: Dienstag, 22. Dezember 2015 10:06 To: Chien Yang; Markus KARG Cc: openjfx-dev@openjdk.java.net Subject: Re: Huge JavaFX performance drop in Debian Jessie Hi Chien, Thanks, using -Dprism.order=sw prevents the multi-second hangs but JavaFX desktop performance is still noticably worse than in Wheezy (probably because the CPU is now doing all the work and this little Atom is maxed out). Something has definitely changed under the hood in Jessie but it's probably only noticeable in these low powered GPUs. Slowdown is with LXDE+lightdm and also Gnome3. Markus, Here is what the threads are doing when the scrollbar is hanging (with es2) Regards, Chris 2015-12-22 09:00:30 Full thread dump Java HotSpot(TM) 64-Bit Server VM (25.66-b17 mixed mode): "Attach Listener" #14 daemon prio=9 os_prio=0 tid=0x00007fec58001000 nid=0x17f9 waiting on condition [0x0000000000000000] java.lang.Thread.State: RUNNABLE "Prism Font Disposer" #13 daemon prio=10 os_prio=0 tid=0x00007fec2c192800 nid=0x17e1 in Object.wait() [0x00007fec3a5b2000] java.lang.Thread.State: WAITING (on object monitor) at java.lang.Object.wait(Native Method) - waiting on <0x00000000e10486f8> (a java.lang.ref.ReferenceQueue$Lock) at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:143) - locked <0x00000000e10486f8> (a java.lang.ref.ReferenceQueue$Lock) at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:164) at com.sun.javafx.font.Disposer.run(Disposer.java:93) at java.lang.Thread.run(Thread.java:745) "JavaFX Application Thread" #12 prio=5 os_prio=0 tid=0x00007fec4c093800 nid=0x17e0 waiting on condition [0x00007fec4412e000] java.lang.Thread.State: WAITING (parking) at sun.misc.Unsafe.park(Native Method) - parking to wait for <0x00000000f67d7668> (a java.util.concurrent.CountDownLatch$Sync) at java.util.concurrent.locks.LockSupport.park(LockSupport.java:175) at java.util.concurrent.locks.AbstractQueuedSynchronizer.parkAndCheckInterrupt( AbstractQueuedSynchronizer.java:836) at java.util.concurrent.locks.AbstractQueuedSynchronizer.doAcquireSharedInterru ptibly(AbstractQueuedSynchronizer.java:997) at java.util.concurrent.locks.AbstractQueuedSynchronizer.acquireSharedInterrupt ibly(AbstractQueuedSynchronizer.java:1304) at java.util.concurrent.CountDownLatch.await(CountDownLatch.java:231) at com.sun.javafx.tk.quantum.PaintCollector.waitForRenderingToComplete(PaintCol lector.java:157) at com.sun.javafx.tk.quantum.GlassScene.waitForRenderingToComplete(GlassScene.j ava:127) at javafx.scene.Scene$ScenePulseListener.pulse(Scene.java:2410) at com.sun.javafx.tk.Toolkit.lambda$runPulse$30(Toolkit.java:355) at com.sun.javafx.tk.Toolkit$$Lambda$359/1368562994.run(Unknown Source) at java.security.AccessController.doPrivileged(Native Method) at com.sun.javafx.tk.Toolkit.runPulse(Toolkit.java:354) at com.sun.javafx.tk.Toolkit.firePulse(Toolkit.java:381) at com.sun.javafx.tk.quantum.QuantumToolkit.pulse(QuantumToolkit.java:510) at com.sun.javafx.tk.quantum.QuantumToolkit.pulse(QuantumToolkit.java:490) at com.sun.javafx.tk.quantum.QuantumToolkit.lambda$runToolkit$404(QuantumToolki t.java:319) at com.sun.javafx.tk.quantum.QuantumToolkit$$Lambda$47/1617205338.run(Unknown Source) at com.sun.glass.ui.InvokeLaterDispatcher$Future.run(InvokeLaterDispatcher.java :95) at com.sun.glass.ui.gtk.GtkApplication._runLoop(Native Method) at com.sun.glass.ui.gtk.GtkApplication.lambda$null$49(GtkApplication.java:139) at com.sun.glass.ui.gtk.GtkApplication$$Lambda$43/357920869.run(Unknown Source) at java.lang.Thread.run(Thread.java:745) "Thread-2" #11 daemon prio=5 os_prio=0 tid=0x00007fec4c08f800 nid=0x17df in Object.wait() [0x00007fec70143000] java.lang.Thread.State: WAITING (on object monitor) at java.lang.Object.wait(Native Method) at java.lang.Object.wait(Object.java:502) at com.sun.glass.ui.InvokeLaterDispatcher.run(InvokeLaterDispatcher.java:126) - locked <0x00000000e0ffc670> (a java.lang.StringBuilder) "QuantumRenderer-0" #9 daemon prio=5 os_prio=0 tid=0x00007fec4c04c000 nid=0x17de runnable [0x00007fec7118b000] java.lang.Thread.State: RUNNABLE at com.sun.prism.es2.GLContext.nDrawIndexedQuads(Native Method) at com.sun.prism.es2.GLContext.drawIndexedQuads(GLContext.java:724) at com.sun.prism.es2.ES2VertexBuffer.drawQuads(ES2VertexBuffer.java:65) at com.sun.prism.impl.VertexBuffer.flush(VertexBuffer.java:105) at com.sun.prism.impl.BaseContext.flushVertexBuffer(BaseContext.java:111) at com.sun.prism.impl.ps.BaseShaderContext.setRenderTarget(BaseShaderContext.ja va:747) at com.sun.prism.impl.BaseContext.setRenderTarget(BaseContext.java:121) at com.sun.prism.impl.BaseGraphics.<init>(BaseGraphics.java:105) at com.sun.prism.impl.ps.BaseShaderGraphics.<init>(BaseShaderGraphics.java:86) at com.sun.prism.es2.ES2Graphics.<init>(ES2Graphics.java:42) at com.sun.prism.es2.ES2Graphics.create(ES2Graphics.java:50) at com.sun.prism.es2.ES2RTTexture.createGraphics(ES2RTTexture.java:312) at com.sun.prism.impl.ps.BaseShaderGraphics.initLCDSampleRT(BaseShaderGraphics. java:1929) at com.sun.prism.impl.ps.BaseShaderGraphics.drawString(BaseShaderGraphics.java: 2059) at com.sun.javafx.sg.prism.NGText.renderText(NGText.java:312) at com.sun.javafx.sg.prism.NGText.renderContent2D(NGText.java:270) at com.sun.javafx.sg.prism.NGShape.renderContent(NGShape.java:261) at com.sun.javafx.sg.prism.NGNode.doRender(NGNode.java:2053) at com.sun.javafx.sg.prism.NGNode.render(NGNode.java:1945) at com.sun.javafx.sg.prism.NGGroup.renderContent(NGGroup.java:235) at com.sun.javafx.sg.prism.NGNode.doRender(NGNode.java:2053) at com.sun.javafx.sg.prism.NGNode.render(NGNode.java:1945) at com.sun.javafx.sg.prism.NGGroup.renderContent(NGGroup.java:235) at com.sun.javafx.sg.prism.NGRegion.renderContent(NGRegion.java:576) at com.sun.javafx.sg.prism.NGNode.doRender(NGNode.java:2053) at com.sun.javafx.sg.prism.NGNode.render(NGNode.java:1945) at com.sun.javafx.sg.prism.NGGroup.renderContent(NGGroup.java:235) at com.sun.javafx.sg.prism.NGRegion.renderContent(NGRegion.java:576) at com.sun.javafx.sg.prism.NGNode.doRender(NGNode.java:2053) at com.sun.javafx.sg.prism.NGNode.render(NGNode.java:1945) at com.sun.javafx.sg.prism.NGGroup.renderContent(NGGroup.java:235) at com.sun.javafx.sg.prism.NGRegion.renderContent(NGRegion.java:576) at com.sun.javafx.sg.prism.NGNode.renderForClip(NGNode.java:2294) at com.sun.javafx.sg.prism.NGNode.renderRectClip(NGNode.java:2188) at com.sun.javafx.sg.prism.NGNode.renderClip(NGNode.java:2214) at com.sun.javafx.sg.prism.CacheFilter.impl_renderNodeToCache(CacheFilter.java: 671) at com.sun.javafx.sg.prism.CacheFilter.render(CacheFilter.java:575) at com.sun.javafx.sg.prism.NGNode.renderCached(NGNode.java:2358) at com.sun.javafx.sg.prism.NGNode.doRender(NGNode.java:2044) at com.sun.javafx.sg.prism.NGNode.render(NGNode.java:1945) at com.sun.javafx.sg.prism.NGGroup.renderContent(NGGroup.java:235) at com.sun.javafx.sg.prism.NGRegion.renderContent(NGRegion.java:576) at com.sun.javafx.sg.prism.NGNode.doRender(NGNode.java:2053) at com.sun.javafx.sg.prism.NGNode.render(NGNode.java:1945) at com.sun.javafx.sg.prism.NGGroup.renderContent(NGGroup.java:235) at com.sun.javafx.sg.prism.NGRegion.renderContent(NGRegion.java:576) at com.sun.javafx.sg.prism.NGNode.doRender(NGNode.java:2053) at com.sun.javafx.sg.prism.NGNode.render(NGNode.java:1945) at com.sun.javafx.sg.prism.NGGroup.renderContent(NGGroup.java:235) at com.sun.javafx.sg.prism.NGRegion.renderContent(NGRegion.java:576) at com.sun.javafx.sg.prism.NGNode.renderForClip(NGNode.java:2294) at com.sun.javafx.sg.prism.NGNode.renderRectClip(NGNode.java:2188) at com.sun.javafx.sg.prism.NGNode.renderClip(NGNode.java:2214) at com.sun.javafx.sg.prism.NGNode.doRender(NGNode.java:2047) at com.sun.javafx.sg.prism.NGNode.render(NGNode.java:1945) at com.sun.javafx.sg.prism.NGGroup.renderContent(NGGroup.java:235) at com.sun.javafx.sg.prism.NGRegion.renderContent(NGRegion.java:576) at com.sun.javafx.sg.prism.NGNode.doRender(NGNode.java:2053) at com.sun.javafx.sg.prism.NGNode.render(NGNode.java:1945) at com.sun.javafx.sg.prism.NGGroup.renderContent(NGGroup.java:235) at com.sun.javafx.sg.prism.NGRegion.renderContent(NGRegion.java:576) at com.sun.javafx.sg.prism.NGNode.doRender(NGNode.java:2053) at com.sun.javafx.sg.prism.NGNode.render(NGNode.java:1945) at com.sun.javafx.sg.prism.NGGroup.renderContent(NGGroup.java:235) at com.sun.javafx.sg.prism.NGRegion.renderContent(NGRegion.java:576) at com.sun.javafx.sg.prism.NGNode.renderForClip(NGNode.java:2294) at com.sun.javafx.sg.prism.NGNode.renderRectClip(NGNode.java:2188) at com.sun.javafx.sg.prism.NGNode.renderClip(NGNode.java:2214) at com.sun.javafx.sg.prism.NGNode.doRender(NGNode.java:2047) at com.sun.javafx.sg.prism.NGNode.render(NGNode.java:1945) at com.sun.javafx.sg.prism.NGGroup.renderContent(NGGroup.java:235) at com.sun.javafx.sg.prism.NGRegion.renderContent(NGRegion.java:576) at com.sun.javafx.sg.prism.NGNode.renderForClip(NGNode.java:2294) at com.sun.javafx.sg.prism.NGNode.renderRectClip(NGNode.java:2188) at com.sun.javafx.sg.prism.NGNode.renderClip(NGNode.java:2214) at com.sun.javafx.sg.prism.NGNode.doRender(NGNode.java:2047) at com.sun.javafx.sg.prism.NGNode.render(NGNode.java:1945) at com.sun.javafx.sg.prism.NGGroup.renderContent(NGGroup.java:235) at com.sun.javafx.sg.prism.NGRegion.renderContent(NGRegion.java:576) at com.sun.javafx.sg.prism.NGNode.renderForClip(NGNode.java:2294) at com.sun.javafx.sg.prism.NGNode.renderRectClip(NGNode.java:2188) at com.sun.javafx.sg.prism.NGNode.renderClip(NGNode.java:2214) at com.sun.javafx.sg.prism.NGNode.doRender(NGNode.java:2047) at com.sun.javafx.sg.prism.NGNode.render(NGNode.java:1945) at com.sun.javafx.sg.prism.NGGroup.renderContent(NGGroup.java:235) at com.sun.javafx.sg.prism.NGRegion.renderContent(NGRegion.java:576) at com.sun.javafx.sg.prism.NGNode.doRender(NGNode.java:2053) at com.sun.javafx.sg.prism.NGNode.render(NGNode.java:1945) at com.sun.javafx.sg.prism.NGGroup.renderContent(NGGroup.java:235) at com.sun.javafx.sg.prism.NGRegion.renderContent(NGRegion.java:576) at com.sun.javafx.sg.prism.NGNode.doRender(NGNode.java:2053) at com.sun.javafx.sg.prism.NGNode.render(NGNode.java:1945) at com.sun.javafx.tk.quantum.ViewPainter.doPaint(ViewPainter.java:477) at com.sun.javafx.tk.quantum.ViewPainter.paintImpl(ViewPainter.java:323) at com.sun.javafx.tk.quantum.PresentingPainter.run(PresentingPainter.java:91) at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) at java.util.concurrent.FutureTask.runAndReset(FutureTask.java:308) at com.sun.javafx.tk.RenderJob.run(RenderJob.java:58) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:11 42) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:6 17) at com.sun.javafx.tk.quantum.QuantumRenderer$PipelineRunnable.run(QuantumRender er.java:125) at java.lang.Thread.run(Thread.java:745) "JavaFX-Launcher" #8 prio=5 os_prio=0 tid=0x00007fec883c5800 nid=0x17dd waiting on condition [0x00007fec71292000] java.lang.Thread.State: WAITING (parking) at sun.misc.Unsafe.park(Native Method) - parking to wait for <0x00000000e0ba48f0> (a java.util.concurrent.CountDownLatch$Sync) at java.util.concurrent.locks.LockSupport.park(LockSupport.java:175) at java.util.concurrent.locks.AbstractQueuedSynchronizer.parkAndCheckInterrupt( AbstractQueuedSynchronizer.java:836) at java.util.concurrent.locks.AbstractQueuedSynchronizer.doAcquireSharedInterru ptibly(AbstractQueuedSynchronizer.java:997) at java.util.concurrent.locks.AbstractQueuedSynchronizer.acquireSharedInterrupt ibly(AbstractQueuedSynchronizer.java:1304) at java.util.concurrent.CountDownLatch.await(CountDownLatch.java:231) at com.sun.javafx.application.LauncherImpl.launchApplication1(LauncherImpl.java :873) at com.sun.javafx.application.LauncherImpl.lambda$launchApplication$155(Launche rImpl.java:182) at com.sun.javafx.application.LauncherImpl$$Lambda$2/93122545.run(Unknown Source) at java.lang.Thread.run(Thread.java:745) "Service Thread" #7 daemon prio=9 os_prio=0 tid=0x00007fec880ba000 nid=0x17db runnable [0x0000000000000000] java.lang.Thread.State: RUNNABLE "C1 CompilerThread1" #6 daemon prio=9 os_prio=0 tid=0x00007fec880b5000 nid=0x17da waiting on condition [0x0000000000000000] java.lang.Thread.State: RUNNABLE "C2 CompilerThread0" #5 daemon prio=9 os_prio=0 tid=0x00007fec880b2000 nid=0x17d9 waiting on condition [0x0000000000000000] java.lang.Thread.State: RUNNABLE "Signal Dispatcher" #4 daemon prio=9 os_prio=0 tid=0x00007fec880b0800 nid=0x17d8 runnable [0x0000000000000000] java.lang.Thread.State: RUNNABLE "Finalizer" #3 daemon prio=8 os_prio=0 tid=0x00007fec8807a800 nid=0x17d7 in Object.wait() [0x00007fec72046000] java.lang.Thread.State: WAITING (on object monitor) at java.lang.Object.wait(Native Method) - waiting on <0x00000000e0a33fe8> (a java.lang.ref.ReferenceQueue$Lock) at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:143) - locked <0x00000000e0a33fe8> (a java.lang.ref.ReferenceQueue$Lock) at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:164) at java.lang.ref.Finalizer$FinalizerThread.run(Finalizer.java:209) "Reference Handler" #2 daemon prio=10 os_prio=0 tid=0x00007fec88078800 nid=0x17d6 in Object.wait() [0x00007fec72147000] java.lang.Thread.State: WAITING (on object monitor) at java.lang.Object.wait(Native Method) - waiting on <0x00000000e0a34028> (a java.lang.ref.Reference$Lock) at java.lang.Object.wait(Object.java:502) at java.lang.ref.Reference$ReferenceHandler.run(Reference.java:157) - locked <0x00000000e0a34028> (a java.lang.ref.Reference$Lock) "main" #1 prio=5 os_prio=0 tid=0x00007fec8800a000 nid=0x17d2 waiting on condition [0x00007fec8edbb000] java.lang.Thread.State: WAITING (parking) at sun.misc.Unsafe.park(Native Method) - parking to wait for <0x00000000e0ffcda8> (a java.util.concurrent.CountDownLatch$Sync) at java.util.concurrent.locks.LockSupport.park(LockSupport.java:175) at java.util.concurrent.locks.AbstractQueuedSynchronizer.parkAndCheckInterrupt( AbstractQueuedSynchronizer.java:836) at java.util.concurrent.locks.AbstractQueuedSynchronizer.doAcquireSharedInterru ptibly(AbstractQueuedSynchronizer.java:997) at java.util.concurrent.locks.AbstractQueuedSynchronizer.acquireSharedInterrupt ibly(AbstractQueuedSynchronizer.java:1304) at java.util.concurrent.CountDownLatch.await(CountDownLatch.java:231) at com.sun.javafx.application.LauncherImpl.launchApplication(LauncherImpl.java: 200) at com.sun.javafx.application.LauncherImpl.launchApplication(LauncherImpl.java: 143) at javafx.application.Application.launch(Application.java:252) at org.adoptopenjdk.jitwatch.ui.JITWatchUI.<init>(JITWatchUI.java:185) at org.adoptopenjdk.jitwatch.launch.LaunchUI.main(LaunchUI.java:18) "VM Thread" os_prio=0 tid=0x00007fec88073800 nid=0x17d5 runnable "GC task thread#0 (ParallelGC)" os_prio=0 tid=0x00007fec8801f000 nid=0x17d3 runnable "GC task thread#1 (ParallelGC)" os_prio=0 tid=0x00007fec88021000 nid=0x17d4 runnable "VM Periodic Task Thread" os_prio=0 tid=0x00007fec880bd000 nid=0x17dc waiting on condition JNI global references: 1037 On Tue, December 22, 2015 08:00, Chien Yang wrote: Hi Chris, JavaFX may run on Intel GMA 3150, but it is not a supported GPU. There is a high likelihood that the drop in performance is caused by the switch from sw pipe (Debian Wheezy) to es2 pipe (Debian Jessie). GMA 3150 is an underpowered GPU for JavaFX's es2 pipe. You can try forcing JavaFX to use its sw pipe by specifying -Dprism.order=sw in the run command. - Chien On 12/21/2015 03:02 PM, Chris Newland wrote: Upgraded my netbook (Intel GMA3150 onboard graphics) from Debian Wheezy to Debian Jessie and JavaFX performance has suffered a huge drop :( Possibly not JavaFX related but native apps (firefox etc) all seem to perform the same and glxgears runs full sync framerate and 350fps unsynced. JavaFX stages open blank and can take 5 seconds to render. Trying to scroll a scrollbar pegs the CPU (java process at 100%) and hangs the app for 10s+. Previously stages opened in under 1s and scrolling was instant. My DemoFX test platform (Canvas based effects) seems to run the same so it only appears to be windows / stages that are affected. It's an old (2010) system but JavaFX performance has dropped from slow to unusable. Will keep investigating and test on my Debian desktop once I upgrade it to Jessie. Cheers, Chris @chriswhocodes JavaFX debug: Dec 21, 2015 10:35:25 PM com.sun.javafx.jmx.MXExtension initializeIfAvailable INFO: Failed to initialize management extension java.lang.ClassNotFoundException: com.oracle.javafx.jmx.MXExtensionImpl at java.net.URLClassLoader.findClass(URLClassLoader.java:381) at java.lang.ClassLoader.loadClass(ClassLoader.java:424) at java.lang.ClassLoader.loadClass(ClassLoader.java:357) at java.lang.Class.forName0(Native Method) at java.lang.Class.forName(Class.java:264) at com.sun.javafx.jmx.MXExtension.initializeIfAvailable(MXExtension.java:4 0) at com.sun.javafx.application.LauncherImpl.startToolkit(LauncherImpl.java: 669) at com.sun.javafx.application.LauncherImpl.launchApplication1(LauncherImpl .java:695) at com.sun.javafx.application.LauncherImpl.lambda$launchApplication$155(La uncherImpl.java:182) at java.lang.Thread.run(Thread.java:745) Prism pipeline init order: es2 sw Using java-based Pisces rasterizer Using dirty region optimizations Not using texture mask for primitives Not forcing power of 2 sizes for textures Using hardware CLAMP_TO_ZERO mode Opting in for HiDPI pixel scaling Prism pipeline name = com.sun.prism.es2.ES2Pipeline Loading ES2 native library ... prism_es2 Loaded /home/chris/jdk1.8.0_66/jre/lib/ext/../amd64/libprism_es2.so from relative path succeeded. GLFactory using com.sun.prism.es2.X11GLFactory (X) Got class = class com.sun.prism.es2.ES2Pipeline Initialized prism pipeline: com.sun.prism.es2.ES2Pipeline JavaFX: using com.sun.javafx.tk.quantum.QuantumToolkit Loaded /home/chris/jdk1.8.0_66/jre/lib/ext/../amd64/libglass.so from relative path Maximum supported texture size: 2048 Non power of two texture support = true Maximum number of vertex attributes = 16 Maximum number of uniform vertex components = 16384 Maximum number of uniform fragment components = 16384 Maximum number of varying components = 32 Maximum number of texture units usable in a vertex shader = 8 Maximum number of texture units usable in a fragment shader = 8 Graphics Vendor: Intel Open Source Technology Center Renderer: Mesa DRI Intel(R) IGD Version: 2.1 Mesa 10.3.2 vsync: true vpipe: true Loaded /home/chris/jdk1.8.0_66/jre/lib/ext/../amd64/libjavafx_font.so from relative path Loaded /home/chris/jdk1.8.0_66/jre/lib/ext/../amd64/libjavafx_font_freetype.so from relative path Loaded /home/chris/jdk1.8.0_66/jre/lib/ext/../amd64/libjavafx_font_pango.so from relative path ES2ResourceFactory: Prism - createStockShader: FillPgram_Color.frag new alphas ES2ResourceFactory: Prism - createStockShader: Texture_Color.frag ES2ResourceFactory: Prism - createStockShader: Texture_LinearGradient_PAD.frag ES2ResourceFactory: Prism - createStockShader: Solid_TextureRGB.frag ES2ResourceFactory: Prism - createStockShader: Solid_TextureFirstPassLCD.frag ES2ResourceFactory: Prism - createStockShader: Solid_TextureSecondPassLCD.frag ES2ResourceFactory: Prism - createStockShader: FillPgram_LinearGradient_PAD.frag ES2ResourceFactory: Prism - createStockShader: Solid_Color.frag ES2ResourceFactory: Prism - createStockShader: Mask_TextureSuper.frag new alphas new alphas PPSRenderer: scenario.effect - createShader: LinearConvolveShadow_4