4 Replies Latest reply on Jan 20, 2013 7:09 PM by hadoop1984

    Why wave mouse will increase "inactive time"

    hadoop1984 Level 1

      My Test Case is draw Two triangles  and  then wait six millseconds ,it's fps is 60.

      If I wave mouse on the stage then the fps is not stable the Inactive time will increase, and I have no way to decrease the inactive time.

      why? Is this a bug of flash player?

      Here is the scout sceen capture

       

      waveMouse.png

        • 1. Re: Why wave mouse will increase "inactive time"
          hadoop1984 Level 1

          this is a fps graph from GPUView when I wave mouse on the flash stage

           

          fps.png

           

          when no mouse move event happened the fps is stable 60

           

           

          this is my test app

          <code>

          package

          {

                    import com.adobe.utils.AGALMiniAssembler;

                    import com.adobe.utils.PerspectiveMatrix3D;

           

                    import flash.display.Bitmap;

                    import flash.display.Sprite;

                    import flash.display.StageAlign;

                    import flash.display.StageDisplayState;

                    import flash.display.StageScaleMode;

                    import flash.display3D.Context3D;

                    import flash.display3D.Context3DCompareMode;

                    import flash.display3D.Context3DProgramType;

                    import flash.display3D.Context3DTextureFormat;

                    import flash.display3D.Context3DVertexBufferFormat;

                    import flash.display3D.IndexBuffer3D;

                    import flash.display3D.Program3D;

                    import flash.display3D.VertexBuffer3D;

                    import flash.display3D.textures.Texture;

                    import flash.events.Event;

                    import flash.events.MouseEvent;

                    import flash.geom.Matrix3D;

                    import flash.geom.Rectangle;

                    import flash.text.TextField;

                    import flash.utils.getTimer;

           

           

                    [SWF(width="1000",height="600", backgroundColor = 0x000000, frameRate="60")]

                    public class SingleThreadRender extends Sprite

                    {

                              [Embed( source = "RockSmooth.jpg" )]

                              protected const TextureBitmap:Class;

           

                              protected var context3D:Context3D;

           

                              protected var vertexbuffer:VertexBuffer3D;

                              protected var indexBuffer:IndexBuffer3D;

                              protected var program:Program3D;

                              protected var texture:Texture;

                              protected var projectionTransform:PerspectiveMatrix3D;

           

           

                              private   var dataReady :Boolean = false;

           

           

                              private   var text      :TextField = null;

           

                              public function SingleThreadRender()

                              {

                                        text = new TextField();

                                        text.text = "gogo";

                                        addChild(text);

                                        stage.mouseChildren = false;

           

                                        startRenderThread();

                              }

           

           

           

                              private function startRenderThread() :void {

                                        stage.stage3Ds[0].addEventListener( Event.CONTEXT3D_CREATE, initMolehill );

                                        stage.stage3Ds[0].requestContext3D();

                                        stage.scaleMode = StageScaleMode.NO_SCALE;

                                        stage.align = StageAlign.TOP_LEFT;

                                        stage.stageHeight = 600

                                        stage.stageWidth = 800;

                                        addEventListener(Event.ENTER_FRAME, onRender);

                                        stage.addEventListener(MouseEvent.RIGHT_CLICK,rightClickHandler);

                              }

           

                              protected function initMolehill(e:Event):void

                              {

                                        context3D = stage.stage3Ds[0].context3D;

                                        context3D.configureBackBuffer(1000, 600, 1, true);

           

                                        var vertices:Vector.<Number> = Vector.<Number>([

                                                  -3,-3, 0,0, 0, // x, y, z, u, v

                                                  -3, 3, 0, 0, 1,

                                                  3, -3, 0, 1, 1,

                                                  3, 3, 0, 1, 0]);

                                        vertexbuffer = context3D.createVertexBuffer(4, 5);

                                        vertexbuffer.uploadFromVector(vertices, 0, 4);

                                        indexBuffer = context3D.createIndexBuffer(6);

                                        indexBuffer.uploadFromVector (Vector.<uint>([0, 1, 2, 2, 3, 0]), 0, 6);

           

                                        var bitmap:Bitmap = new TextureBitmap();

           

                                        texture = context3D.createTexture(bitmap.bitmapData.width, bitmap.bitmapData.height, Context3DTextureFormat.BGRA, false);

                                        texture.uploadFromBitmapData(bitmap.bitmapData);

           

                                        var vertexShaderAssembler : AGALMiniAssembler = new AGALMiniAssembler();

                                        vertexShaderAssembler.assemble( Context3DProgramType.VERTEX,

                                                  "m44 op, va0, vc0\n" + // pos to clipspace

                                                  "mov v0, va1" // copy uv

                                        );

                                        var fragmentShaderAssembler : AGALMiniAssembler= new AGALMiniAssembler();

                                        fragmentShaderAssembler.assemble( Context3DProgramType.FRAGMENT,

                                                  "tex ft1, v0, fs0 <2d,linear,nomip>\n" +

                                                  "mov oc, ft1"

                                        );

           

                                        program = context3D.createProgram();

                                        program.upload( vertexShaderAssembler.agalcode, fragmentShaderAssembler.agalcode);

           

                                        projectionTransform = new PerspectiveMatrix3D();

                                        var aspect:Number = 4/3;

                                        var zNear:Number = 0.1;

                                        var zFar:Number = 1000;

                                        var fov:Number = 45*Math.PI/180;

                                        projectionTransform.perspectiveFieldOfViewLH(fov, aspect, zNear, zFar);

                              }

           

                              private function rightClickHandler(event :MouseEvent) :void {

                                        stage.removeEventListener(MouseEvent.RIGHT_CLICK,rightClickHandler);

                                        stage.fullScreenSourceRect = new Rectangle( 0,0,stage.fullScreenWidth,stage.fullScreenHeight);

                                        stage.displayState = StageDisplayState.FULL_SCREEN_INTERACTIVE;

                              }

           

                              private var firstTime :Boolean = true;

                              protected function onRender(e:Event):void

                              {

                                        if(stage.frameRate != 60) {

                                                  stage.frameRate = 60;

                                        }

                                        if ( !context3D )

                                                  return;

                                        var start :int = flash.utils.getTimer();

                                        var now :int = 0;

                                        while(true) {

                                                  now = flash.utils.getTimer();

                                                  if((now - start) > 6) {

                                                            break;

                                                  }

                                        }

           

                                        context3D.clear ( 1,1, 1, 1 );

           

                                        context3D.setDepthTest( true, Context3DCompareMode.LESS_EQUAL);

                                        context3D.setVertexBufferAt (0, vertexbuffer, 0, Context3DVertexBufferFormat.FLOAT_3);

                                        context3D.setVertexBufferAt(1, vertexbuffer, 3, Context3DVertexBufferFormat.FLOAT_2);

                                        context3D.setTextureAt(0, texture);

                                        context3D.setProgram(program);

                                        var m:Matrix3D = new Matrix3D();

                                        m.appendTranslation(0, 0, 2);

                                        m.append(projectionTransform);

           

                                        context3D.setProgramConstantsFromMatrix(Context3DProgramType.VERTEX, 0, m, true);

           

                                        var i:int = 2;

                                        while(i--)

                                                  context3D.drawTriangles(indexBuffer,0,2);

                                        context3D.present();

           

                                        while(true) {

                                                  now = flash.utils.getTimer();

                                                  if((now - start) > 6) {

                                                            break;

                                                  }

                                        }

           

                              }

                    }

          }

           

          <code>

          • 2. Re: Why wave mouse will increase "inactive time"
            BradVan21

            I am getting the same thing... makes it very hard to test things.... would be nice to know how to stop this.

            • 3. Re: Why wave mouse will increase "inactive time"
              hadoop1984 Level 1

              flash player's mouse and keyboard process design is a bunch of ****.

              mouse event will cause the inactive time increase. The high frequency mouse will cause the game lag.

              And flash player will drop the mouse event randomly .

              A bunch of **** .But no better choice. ****!!!

              • 4. Re: Why wave mouse will increase "inactive time"
                hadoop1984 Level 1

                Why  S H I T is masked