flex-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Alex Harui (JIRA)" <j...@apache.org>
Subject [jira] [Commented] (FLEX-33295) Flash player will go into an infinite loop on certain cases of trying to wrap text.
Date Wed, 12 Dec 2012 17:30:21 GMT

    [ https://issues.apache.org/jira/browse/FLEX-33295?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13530129#comment-13530129

Alex Harui commented on FLEX-33295:

If it is the issue I think it is, it will not be resolved in the next version of TLF. Also,
you are just as likely to run into this problem on Mac as Windows.  All you need is the right
mixture of sizes of fonts and the component.

The problem is that wrapped text can be of any size, and there are corner cases where the
appearance of the scrollbar will cause text to wrap differently and cause fewer visible lines
(even though there is always more off-screen).  TLF guesses at its size based on the lines
it did draw and when it sees there are fewer visible lines, it picks a smaller size, which
causes Flex code to remove the scrollbar (which brings in more visible lines)  and measure
again only to decide we need the scrollbar, and we go around and around and around.

There are two common workarounds for this situation.  One is to constrain either the width
or height of the TextArea to some fixed value.  If you wanted to use percentWidth so the TextArea
would stretch, add some resize handler to the parent to set a new width instead.  The other
is to not use the TextArea's scrollbar and size the TextArea to the full height of the text
and put it in a Scroller.  This will, of course, use lots of CPU and memory if there is a
lot of text, but you will also get faster scrolling, so there is a tradeoff there.

The fix for this is a pretty disruptive change to the layout subsystem in Flex, which is why
it hasn't been implemented (actually, it was implemented, then pulled because the Adobe QA
team didn't have time to test it).  Hopefully, one of the workarounds will be sufficient for
> Flash player will go into an infinite loop on certain cases of trying to wrap text.
> -----------------------------------------------------------------------------------
>                 Key: FLEX-33295
>                 URL: https://issues.apache.org/jira/browse/FLEX-33295
>             Project: Apache Flex
>          Issue Type: Bug
>          Components: Spark: TextArea
>    Affects Versions: Adobe Flex SDK 4.6 (Release)
>         Environment: Win 7x64, Win 8x64
> Flash Player 11.4, Flash Player 11.5
> Mac OS works fine.
>            Reporter: Tyler Hansen
>              Labels: textarea
> Setting text on a spark textarea depending on how the word wrap lays, will crash flashplayer
on windows only with this error:
> Error: Error #1502: A script has executed for longer than the default timeout period
of 15 seconds.
> 	at flashx.textLayout.elements::FlowElement/getAbsoluteStart()[C:\Vellum\branches\v2\2.0\dev\output\openSource\textLayout\src\flashx\textLayout\elements\FlowElement.as:888]
> 	at flashx.textLayout.compose::TextFlowLine/get location()[C:\Vellum\branches\v2\2.0\dev\output\openSource\textLayout\src\flashx\textLayout\compose\TextFlowLine.as:351]
> 	at flashx.textLayout.compose::TextFlowLine/get spaceBefore()[C:\Vellum\branches\v2\2.0\dev\output\openSource\textLayout\src\flashx\textLayout\compose\TextFlowLine.as:504]
> 	at flashx.textLayout.compose::BaseCompose/fitLineToParcel()[C:\Vellum\branches\v2\2.0\dev\output\openSource\textLayout\src\flashx\textLayout\compose\BaseCompose.as:1613]
> 	at flashx.textLayout.compose::ComposeState/composeNextLine()[C:\Vellum\branches\v2\2.0\dev\output\openSource\textLayout\src\flashx\textLayout\compose\ComposeState.as:399]
> 	at flashx.textLayout.compose::BaseCompose/composeParagraphElementIntoLines()[C:\Vellum\branches\v2\2.0\dev\output\openSource\textLayout\src\flashx\textLayout\compose\BaseCompose.as:791]
> 	at flashx.textLayout.compose::BaseCompose/composeParagraphElement()[C:\Vellum\branches\v2\2.0\dev\output\openSource\textLayout\src\flashx\textLayout\compose\BaseCompose.as:688]
> 	at flashx.textLayout.compose::ComposeState/composeParagraphElement()[C:\Vellum\branches\v2\2.0\dev\output\openSource\textLayout\src\flashx\textLayout\compose\ComposeState.as:316]
> 	at flashx.textLayout.compose::BaseCompose/composeBlockElement()[C:\Vellum\branches\v2\2.0\dev\output\openSource\textLayout\src\flashx\textLayout\compose\BaseCompose.as:358]
> 	at flashx.textLayout.compose::BaseCompose/composeInternal()[C:\Vellum\branches\v2\2.0\dev\output\openSource\textLayout\src\flashx\textLayout\compose\BaseCompose.as:673]
> 	at flashx.textLayout.compose::ComposeState/composeInternal()[C:\Vellum\branches\v2\2.0\dev\output\openSource\textLayout\src\flashx\textLayout\compose\ComposeState.as:143]
> 	at flashx.textLayout.compose::BaseCompose/composeTextFlow()[C:\Vellum\branches\v2\2.0\dev\output\openSource\textLayout\src\flashx\textLayout\compose\BaseCompose.as:458]
> 	at flashx.textLayout.compose::ComposeState/composeTextFlow()[C:\Vellum\branches\v2\2.0\dev\output\openSource\textLayout\src\flashx\textLayout\compose\ComposeState.as:106]
> 	at flashx.textLayout.compose::StandardFlowComposer/http://ns.adobe.com/textLayout/internal/2008::callTheComposer()[C:\Vellum\branches\v2\2.0\dev\output\openSource\textLayout\src\flashx\textLayout\compose\StandardFlowComposer.as:676]
> 	at flashx.textLayout.compose::StandardFlowComposer/internalCompose()[C:\Vellum\branches\v2\2.0\dev\output\openSource\textLayout\src\flashx\textLayout\compose\StandardFlowComposer.as:760]
> 	at flashx.textLayout.compose::StandardFlowComposer/updateToController()[C:\Vellum\branches\v2\2.0\dev\output\openSource\textLayout\src\flashx\textLayout\compose\StandardFlowComposer.as:556]
> 	at flashx.textLayout.compose::StandardFlowComposer/updateAllControllers()[C:\Vellum\branches\v2\2.0\dev\output\openSource\textLayout\src\flashx\textLayout\compose\StandardFlowComposer.as:517]
> 	at flashx.textLayout.container::TextContainerManager/updateContainer()[C:\Vellum\branches\v2\2.0\dev\output\openSource\textLayout\src\flashx\textLayout\container\TextContainerManager.as:1343]
> 	at spark.components::RichEditableText/updateDisplayList()[E:\dev\4.y\frameworks\projects\spark\src\spark\components\RichEditableText.as:2974]
> 	at mx.core::UIComponent/validateDisplayList()[E:\dev\4.y\frameworks\projects\framework\src\mx\core\UIComponent.as:8999]
> 	at mx.managers::LayoutManager/validateDisplayList()[E:\dev\4.y\frameworks\projects\framework\src\mx\managers\LayoutManager.as:736]
> 	at mx.managers::LayoutManager/doPhasedInstantiation()[E:\dev\4.y\frameworks\projects\framework\src\mx\managers\LayoutManager.as:819]
> 	at mx.managers::LayoutManager/doPhasedInstantiationCallback()[E:\dev\4.y\frameworks\projects\framework\src\mx\managers\LayoutManager.as:1180]
> I have been able to recreate this with a real use client case, as well as some lorem
ipsum text of the same length(but not every time since the lorem ipsum text is randomly generated).
 Removing the first two words in the text fixes the issue, however still remains when removing
the same amount of characters at the end of the text instead.  This leads me to believe this
is a random text wrapping issue.
> We tried testing on a mac and everything ran as expected, it appears to be a windows
only issue.
> Here is some simple code to reproduce the issue:
> <?xml version="1.0" encoding="utf-8"?>
> <s:Application xmlns:fx="http://ns.adobe.com/mxml/2009" 
> 			   xmlns:s="library://ns.adobe.com/flex/spark" 
> 			   xmlns:mx="library://ns.adobe.com/flex/mx" minWidth="955" minHeight="600" creationComplete="application1_creationCompleteHandler(event)">
> 	<fx:Declarations>
> 		<!-- Place non-visual elements (e.g., services, value objects) here -->
> 	</fx:Declarations>
> 	<fx:Script>
> 		<![CDATA[
> 			import mx.events.FlexEvent;
> 			[Bindable]private var testText:String = '';
> 			protected function application1_creationCompleteHandler(event:FlexEvent):void
> 			{
> 				testText = "The learning tasks and activities are aligned with the instructional
outcomes and are designed to challenge student thinking, resulting in active intellectual
engagement by students and teacher scaffolding. The pacing of the lesson is appropriate providing
most students the time needed to be intellectually engaged.Ms. Pruden begins the math and
Reading lesson by strategically placing her chair between two rows of desks and methodically
assisting one student then another. She first assists a student to her left (Artice) on simple
addition, such as 1 + 4 = 5; then she turns to her right to work with another student (Fode)
on reading the numbers of his address. She methodically moves her chair down the middle of
the two rows to work with the other remaining students. One student (Dexter) works independently
on a calendar; he places the word 'cloudy' on today's date: October 25. He is getting his
assignments from his individual basket of daily tasks. Ms. Pruden then worked with Aujana
who isworking on a ruber puzzle of the alphabet. She asks her t repeat after her as she points
to each letter and names each letter of the alphabet. Ms. Pruden worked back and forth with
Fode, Artice and Auana. Ms. Gordon, her teacher assistant, worked with Dejuan as he counts
dots that are pasted on a paper dinosaur. After 45 minutes, Ms. Pruden stops and directs all
of the students to join her at the semi-circle table to work on consonant sound for the letter
'C.' The teacher passes out a picture of a cat, and emphasizes the 'KK' sound as she hands
the cat to each student. Then, sheallows time for students to color their picture. Then she
passes out a picture of  cupcake, and follows the same procedure."
> 			}
> 		]]>
> 	</fx:Script>
> 	<s:TextArea width="729" height="200" text="{testText}"/>
> </s:Application>

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

View raw message