Send a blank email to dev-unsubscr...@flex.apache.org to unsubscribe from the dev list.
Thanks, Om On Fri, Apr 5, 2013 at 11:57 AM, sujith Reddy <sujith...@gmail.com> wrote: > Please remove me out of these emails. > I entered here by mistake. > > Thanks, > Sujith > > > On Mon, Feb 4, 2013 at 8:07 PM, RJ Camarillo (JIRA) <j...@apache.org> > wrote: > > > > > [ > > > https://issues.apache.org/jira/browse/FLEX-33273?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13570902#comment-13570902 > ] > > > > RJ Camarillo commented on FLEX-33273: > > ------------------------------------- > > > > I don't see the changes for this in the trunk. Was it reverted? > > > > > CSSCondition.matchesStyleClient() is slow and creates excessive garbage > > > ----------------------------------------------------------------------- > > > > > > Key: FLEX-33273 > > > URL: https://issues.apache.org/jira/browse/FLEX-33273 > > > Project: Apache Flex > > > Issue Type: Improvement > > > Components: Styles > > > Affects Versions: Adobe Flex SDK 4.1 (Release), Adobe Flex SDK 4.5 > > (Release), Adobe Flex SDK 4.5.1 (Release), Adobe Flex SDK 4.6 (Release) > > > Reporter: Maurice Nicholson > > > Assignee: Frédéric THOMAS > > > Labels: patch, performance > > > Attachments: FLEX-33273.patch, PerformanceTest.zip > > > > > > > > > CSSCondition.matchesStyleClient() is called *very* frequently during > > layout of components in many different scenarios. > > > I've done a lot of profiling of Flex apps and it comes up again and > > again. > > > The current implementation is slow and creates unnecessary garbage > > (which slows down the runtime further, since it needs to collect the > > garbage instead of doing more useful things). > > > Here is the current implementation: > > > {code} > > > public function > > matchesStyleClient(object:IAdvancedStyleClient):Boolean > > > { > > > var match:Boolean = false; > > > if (kind == CSSConditionKind.CLASS) > > > { > > > if (object.styleName != null && object.styleName is String) > > > { > > > // Look for a match in a potential list of styleNames > > > var styleNames:Array = object.styleName.split(/\s+/); > > > for (var i:uint = 0; i < styleNames.length; i++) > > > { > > > if (styleNames[i] == value) > > > { > > > match = true; > > > break; > > > } > > > } > > > } > > > } > > > else if (kind == CSSConditionKind.ID) > > > { > > > if (object.id == value) > > > match = true; > > > } > > > else if (kind == CSSConditionKind.PSEUDO) > > > { > > > if (object.matchesCSSState(value)) > > > match = true; > > > } > > > return match; > > > } > > > {code} > > > Here is what I suggest instead: > > > {code} > > > public function > > matchesStyleClient(object:IAdvancedStyleClient):Boolean > > > { > > > var match:Boolean = false; > > > if (kind == CSSConditionKind.CLASS) > > > { > > > const styleName:String = object.styleName as String; > > > if (styleName) > > > { > > > // Look for a match in a potential list of styleNames > > > FIND: > > > { > > > var index:int = styleName.indexOf(value); > > > if (index == -1) > > > { > > > break FIND; > > > } > > > if (index != 0 && styleName.charAt(index - 1) != ' > ') > > > { > > > break FIND; > > > } > > > const next:int = index + value.length; > > > if (next != styleName.length && > > styleName.charAt(next) != ' ') > > > { > > > break FIND; > > > } > > > match = true; > > > } > > > } > > > } > > > else if (kind == CSSConditionKind.ID) > > > { > > > if (object.id == value) > > > match = true; > > > } > > > else if (kind == CSSConditionKind.PSEUDO) > > > { > > > if (object.matchesCSSState(value)) > > > match = true; > > > } > > > return match; > > > } > > > {code} > > > There are obviously more concise ways to express this code, but the > > above seems to match the current style more or less. > > > Here is the output from a benchmark I created using Grant Skinner's > > PerformanceTest v2 Beta, comparing the current version and the suggested > > version: > > > {noformat} > > > Comparing speed of matching a string in space delimited string. 1000000 > > loops. > > > Test Old ms > > New ms Speedup Old mem New mem Change > > > matchesStyleClient(styleName: "foo", value: "foo") 1006.00 > > 181.00 -82.0 123.00 0.00 -100.0 > > > matchesStyleClient(styleName: "foo bar", value: "foo") 2107.00 > > 206.80 -90.2 115.00 0.00 -100.0 > > > matchesStyleClient(styleName: "bar foo", value: "foo") 2099.80 > > 232.30 -88.9 117.00 0.00 -100.0 > > > matchesStyleClient(styleName: "baz foo bar", value: "foo") 3193.80 > > 251.30 -92.1 119.00 0.00 -100.0 > > > matchesStyleClient(styleName: "foobar", value: "foo") 1169.50 > > 192.00 -83.6 112.00 0.00 -100.0 > > > matchesStyleClient(styleName: "foofoo bar", value: "foo") 2273.80 > > 191.30 -91.6 116.00 0.00 -100.0 > > > matchesStyleClient(styleName: "fo", value: "foo") 918.80 > > 141.00 -84.7 108.00 0.00 -100.0 > > > matchesStyleClient(styleName: "fooo", value: "foo") 1052.80 > > 192.00 -81.8 108.00 0.00 -100.0 > > > matchesStyleClient(styleName: "2foo bar", value: "foo") 2149.50 > > 205.30 -90.4 116.00 0.00 -100.0 > > > matchesStyleClient(styleName: "foo2 bar", value: "foo") 3849.50 > > 190.80 -95.0 111.00 0.00 -100.0 > > > matchesStyleClient(styleName: "", value: "foo") 1801.80 > > 141.00 -92.2 132.00 0.00 -100.0 > > > {noformat} > > > As you can see, the new version doesn't create garbage, and is at least > > 80% faster in the above test cases. > > > I would be happy to contribute a patch and a FlexUnit test, but I > > haven't seen any existing FlexUnit tests in the current source tree, so > not > > sure where to put it. > > > Otherwise Mustella seems like a beast to get to know and run, so I will > > need some guidance as to what to do if you require new Mustella tests. > > > > -- > > This message is automatically generated by JIRA. > > If you think it was sent incorrectly, please contact your JIRA > > administrators > > For more information on JIRA, see: > http://www.atlassian.com/software/jira > > >