<html xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:st1="urn:schemas-microsoft-com:office:smarttags" xmlns="http://www.w3.org/TR/REC-html40">

<head>
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=us-ascii">
<meta name=Generator content="Microsoft Word 11 (filtered medium)">
<!--[if !mso]>
<style>
v\:* {behavior:url(#default#VML);}
o\:* {behavior:url(#default#VML);}
w\:* {behavior:url(#default#VML);}
.shape {behavior:url(#default#VML);}
</style>
<![endif]--><o:SmartTagType
 namespaceuri="urn:schemas-microsoft-com:office:smarttags" name="City"/>
<o:SmartTagType namespaceuri="urn:schemas-microsoft-com:office:smarttags"
 name="country-region"/>
<o:SmartTagType namespaceuri="urn:schemas-microsoft-com:office:smarttags"
 name="place"/>
<!--[if !mso]>
<style>
st1\:*{behavior:url(#default#ieooui) }
</style>
<![endif]-->
<style>
<!--
 /* Font Definitions */
 @font-face
        {font-family:Batang;
        panose-1:2 3 6 0 0 1 1 1 1 1;}
@font-face
        {font-family:Tahoma;
        panose-1:2 11 6 4 3 5 4 4 2 4;}
@font-face
        {font-family:"\@Batang";
        panose-1:2 3 6 0 0 1 1 1 1 1;}
 /* Style Definitions */
 p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0in;
        margin-bottom:.0001pt;
        font-size:12.0pt;
        font-family:"Times New Roman";}
a:link, span.MsoHyperlink
        {color:blue;
        text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
        {color:blue;
        text-decoration:underline;}
span.EmailStyle18
        {mso-style-type:personal-reply;
        font-family:Arial;
        color:navy;}
@page Section1
        {size:8.5in 11.0in;
        margin:1.0in 1.25in 1.0in 1.25in;}
div.Section1
        {page:Section1;}
-->
</style>

</head>

<body lang=EN-US link=blue vlink=blue>

<div class=Section1>

<p class=MsoNormal><font size=2 color=navy face=Arial><span style='font-size:
10.0pt;font-family:Arial;color:navy'>Hi David,<o:p></o:p></span></font></p>

<p class=MsoNormal><font size=2 color=navy face=Arial><span style='font-size:
10.0pt;font-family:Arial;color:navy'><o:p>&nbsp;</o:p></span></font></p>

<p class=MsoNormal><font size=2 color=navy face=Arial><span style='font-size:
10.0pt;font-family:Arial;color:navy'>Thanks a lot for your help. <o:p></o:p></span></font></p>

<p class=MsoNormal><font size=2 color=navy face=Arial><span style='font-size:
10.0pt;font-family:Arial;color:navy'><o:p>&nbsp;</o:p></span></font></p>

<p class=MsoNormal><font size=2 color=navy face=Arial><span style='font-size:
10.0pt;font-family:Arial;color:navy'>Your hints can finally get me started on
some useful optimizations. Yes, I can make time measurements using
gettimeofday, though the maximum accuracy possible in that is in microseconds. But
I believe that should suffice on the ARM.<o:p></o:p></span></font></p>

<p class=MsoNormal><font size=2 color=navy face=Arial><span style='font-size:
10.0pt;font-family:Arial;color:navy'><o:p>&nbsp;</o:p></span></font></p>

<div>

<p class=MsoNormal><em><i><font size=2 color=navy face=Arial><span
style='font-size:10.0pt;font-family:Arial;color:navy'>Thanks.</span></font></i></em><font
color=navy><span style='color:navy'><o:p></o:p></span></font></p>

<p class=MsoNormal><em><i><font size=2 color=navy face=Arial><span
style='font-size:10.0pt;font-family:Arial;color:navy'>Sandeep Agrawal,</span></font></i></em><font
color=navy><span style='color:navy'><o:p></o:p></span></font></p>

<p class=MsoNormal><em><i><font size=2 color=navy face=Arial><span
style='font-size:10.0pt;font-family:Arial;color:navy'>Wireless Terminal
Division,</span></font></i></em><font color=navy><span style='color:navy'><o:p></o:p></span></font></p>

<p class=MsoNormal><em><i><font size=2 color=navy face=Arial><span
style='font-size:10.0pt;font-family:Arial;color:navy'>Samsung <st1:country-region
w:st="on"><st1:place w:st="on">India</st1:place></st1:country-region> Software
Operations</span></font></i></em><font size=2 color=navy face=Arial><span
style='font-size:10.0pt;font-family:Arial;color:navy'>.</span></font><o:p></o:p></p>

</div>

<div>

<div class=MsoNormal align=center style='text-align:center'><font size=3
face="Times New Roman"><span style='font-size:12.0pt'>

<hr size=2 width="100%" align=center tabindex=-1>

</span></font></div>

<p class=MsoNormal><b><font size=2 face=Tahoma><span style='font-size:10.0pt;
font-family:Tahoma;font-weight:bold'>From:</span></font></b><font size=2
face=Tahoma><span style='font-size:10.0pt;font-family:Tahoma'>
david.freetype@gmail.com [mailto:david.freetype@gmail.com] <b><span
style='font-weight:bold'>On Behalf Of </span></b>David Turner<br>
<b><span style='font-weight:bold'>Sent:</span></b> Thursday, November 01, 2007
2:17 PM<br>
<b><span style='font-weight:bold'>To:</span></b> Sandeep Agrawal<br>
<b><span style='font-weight:bold'>Cc:</span></b> Dan Amelang;
cairo@cairographics.org<br>
<b><span style='font-weight:bold'>Subject:</span></b> Re: [<st1:City w:st="on"><st1:place
 w:st="on">cairo</st1:place></st1:City>] Regarding Cairo Optimization for ARM
PXA320</span></font><o:p></o:p></p>

</div>

<p class=MsoNormal><font size=3 face="Times New Roman"><span style='font-size:
12.0pt'><o:p>&nbsp;</o:p></span></font></p>

<p class=MsoNormal style='margin-bottom:12.0pt'><font size=3
face="Times New Roman"><span style='font-size:12.0pt'>Hi Sandeep,<o:p></o:p></span></font></p>

<div>

<p class=MsoNormal><span class=gmailquote><font size=3 face="Times New Roman"><span
style='font-size:12.0pt'>2007/10/28, Sandeep Agrawal &lt;<a
href="mailto:sandeep.a@samsung.com">sandeep.a@samsung.com</a>&gt;:</span></font></span><o:p></o:p></p>

<p class=MsoNormal><font size=3 face="Times New Roman"><span style='font-size:
12.0pt'>Hi,<br>
<br>
Actually I am unable to generate profiling data because of certain problems<br>
with the platform I am working on. I don't have permissions to create a new<br>
device and so opcontrol --init fails.<br>
<br>
I am new to the text rendering field. Since Monahans does not have an FPU, I <br>
made the assumption that the affine transformations happening in floating<br>
point may be optimized to work in fixed point. Am I wrong in my assumption?<o:p></o:p></span></font></p>

<div>

<p class=MsoNormal><font size=3 face="Times New Roman"><span style='font-size:
12.0pt'><o:p>&nbsp;</o:p></span></font></p>

</div>

<div>

<p class=MsoNormal><font size=3 face="Times New Roman"><span style='font-size:
12.0pt'>you would probably be able to optimize the speed of the affine
transformation itself, let's say by a factor of 2 (at the cost of reduce
precision). However, if this operation only corresponds to say, 5% of your
running time, this will only gain you 2.5% of overall time; not necessarily a
big win for what could be a lot of work.<o:p></o:p></span></font></p>

</div>

<div>

<p class=MsoNormal><font size=3 face="Times New Roman"><span style='font-size:
12.0pt'><o:p>&nbsp;</o:p></span></font></p>

</div>

<div>

<p class=MsoNormal><font size=3 face="Times New Roman"><span style='font-size:
12.0pt'>please, please use a profiling tool, it will guide you to optimization
opportunities. more precisely, it will guide you to the low-hanging fruits,
because profile-based optimization usually leads you to some sort of
&quot;plateau&quot; which can only be broken by changing your internals
drastically. <o:p></o:p></span></font></p>

</div>

<div>

<p class=MsoNormal><font size=3 face="Times New Roman"><span style='font-size:
12.0pt'><o:p>&nbsp;</o:p></span></font></p>

</div>

<div>

<p class=MsoNormal><font size=3 face="Times New Roman"><span style='font-size:
12.0pt'>if you *absolutely* cannot run a profiling tool, I advise you to write
profiling tests that basically run the same operation in loops, only varying
one parameter at a time. (yes, I'm assuming that you can at least make time
measurements in your program). <o:p></o:p></span></font></p>

</div>

<div>

<p class=MsoNormal><font size=3 face="Times New Roman"><span style='font-size:
12.0pt'><o:p>&nbsp;</o:p></span></font></p>

</div>

<div>

<p class=MsoNormal><font size=3 face="Times New Roman"><span style='font-size:
12.0pt'>for example, what is the time to draw 1 glyph, then the time to draw 2,
5, 10, 50, 100 ?<o:p></o:p></span></font></p>

</div>

<div>

<p class=MsoNormal><font size=3 face="Times New Roman"><span style='font-size:
12.0pt'>do these number scale linearly if all glyphs are identical ? is there a
&quot;setup time&quot; that is consistently larger than the increment between
two glyph counts ? <o:p></o:p></span></font></p>

</div>

<div>

<p class=MsoNormal><font size=3 face="Times New Roman"><span style='font-size:
12.0pt'><o:p>&nbsp;</o:p></span></font></p>

</div>

<div>

<p class=MsoNormal><font size=3 face="Times New Roman"><span style='font-size:
12.0pt'>what is the time to to draw a string of text at 10pt, 12pt, 14, etc...
given that the amount of pixels to be filled grows roughly in n^2 (where n is
the size), does the timing follow a similar curve ? <o:p></o:p></span></font></p>

</div>

<div>

<p class=MsoNormal><font size=3 face="Times New Roman"><span style='font-size:
12.0pt'><o:p>&nbsp;</o:p></span></font></p>

</div>

<div>

<p class=MsoNormal><font size=3 face="Times New Roman"><span style='font-size:
12.0pt'>what is the cost of rotating text ? what's the function of
performance/angle, etc...<o:p></o:p></span></font></p>

</div>

<div>

<p class=MsoNormal><font size=3 face="Times New Roman"><span style='font-size:
12.0pt'><o:p>&nbsp;</o:p></span></font></p>

</div>

<div>

<p class=MsoNormal><font size=3 face="Times New Roman"><span style='font-size:
12.0pt'>this kind of tests can give you significant information about what's
slow and what isn't in a given library, and they're usually pretty easy to
write. <o:p></o:p></span></font></p>

</div>

<div>

<p class=MsoNormal><font size=3 face="Times New Roman"><span style='font-size:
12.0pt'><o:p>&nbsp;</o:p></span></font></p>

</div>

<div>

<p class=MsoNormal><font size=3 face="Times New Roman"><span style='font-size:
12.0pt'>and since you also have the <st1:City w:st="on"><st1:place w:st="on">Cairo</st1:place></st1:City>
sources to play with, feel free to put time measurements within the library
itself to get smaller grained estimates.<o:p></o:p></span></font></p>

</div>

<div>

<p class=MsoNormal><font size=3 face="Times New Roman"><span style='font-size:
12.0pt'><o:p>&nbsp;</o:p></span></font></p>

</div>

<div>

<p class=MsoNormal><font size=3 face="Times New Roman"><span style='font-size:
12.0pt'>maybe that doesn't sound glamorous, but given the conditions you describe,
I'm pretty certain it will prove to be more fruitful than a random quest for
local optimizations...<o:p></o:p></span></font></p>

</div>

<div>

<p class=MsoNormal><font size=3 face="Times New Roman"><span style='font-size:
12.0pt'><o:p>&nbsp;</o:p></span></font></p>

</div>

<div>

<p class=MsoNormal><font size=3 face="Times New Roman"><span style='font-size:
12.0pt'>hope this helps,<o:p></o:p></span></font></p>

</div>

<div>

<p class=MsoNormal><font size=3 face="Times New Roman"><span style='font-size:
12.0pt'><o:p>&nbsp;</o:p></span></font></p>

</div>

<div>

<p class=MsoNormal><font size=3 face="Times New Roman"><span style='font-size:
12.0pt'>- David Turner<o:p></o:p></span></font></p>

</div>

<div>

<p class=MsoNormal><font size=3 face="Times New Roman"><span style='font-size:
12.0pt'><o:p>&nbsp;</o:p></span></font></p>

</div>

<div>

<p class=MsoNormal><font size=3 face="Times New Roman"><span style='font-size:
12.0pt'>&nbsp;<o:p></o:p></span></font></p>

</div>

<blockquote style='border:none;border-left:solid #CCCCCC 1.0pt;padding:0in 0in 0in 6.0pt;
margin-left:4.8pt;margin-right:0in'>

<p class=MsoNormal><font size=3 face="Times New Roman"><span style='font-size:
12.0pt'><o:p>&nbsp;</o:p></span></font></p>

<p class=MsoNormal><font size=3 face="Times New Roman"><span style='font-size:
12.0pt'>If so can you please give some hints as to where I can perform<br>
optimizations? I am sure that it would be possible to do some processor<br>
specific optimizations as well as <st1:City w:st="on"><st1:place w:st="on">Cairo</st1:place></st1:City>
has been written to cater to a large<br>
community.<br>
<br>
Thanks.<br>
Sandeep Agrawal,<br>
Wireless Terminal Division,<br>
Samsung <st1:country-region w:st="on"><st1:place w:st="on">India</st1:place></st1:country-region>
Software Operations.<br>
<br>
-----Original Message-----<br>
From: Dan Amelang [mailto:<a href="mailto:daniel.amelang@gmail.com">daniel.amelang@gmail.com
</a>]<br>
Sent: Saturday, October 27, 2007 12:46 AM<br>
To: Sandeep Agrawal<br>
Cc: <a href="mailto:cairo@cairographics.org">cairo@cairographics.org</a><br>
Subject: Re: [<st1:City w:st="on"><st1:place w:st="on">cairo</st1:place></st1:City>]
Regarding Cairo Optimization for ARM PXA320<br>
<br>
On 10/26/07, Sandeep Agrawal &lt;<a href="mailto:sandeep.a@samsung.com">sandeep.a@samsung.com</a>&gt;
wrote:<br>
&gt;<br>
&gt; I am currently optimizing text rendering in <st1:City w:st="on"><st1:place
 w:st="on">Cairo</st1:place></st1:City> for the PXA320 Monahans<br>
&gt; processor. <br>
&gt;<br>
&gt; I just want to know that is it possible to convert the double computations<br>
&gt; (specifically affine) to 16.16 or 26.6 fixed point format (any chance of<br>
&gt; overflow or precision loss?)<br>
<br>
Yes, there is a chance of overflow and precision loss. <br>
<br>
&gt; or do I have to go with processor specific<br>
&gt; assembly optimizations?<br>
<br>
I don't see how this is an either/or situation. How did converting<br>
doubles to fixed-point and using assembly optimizations become your <br>
two options for text rendering improvement?<br>
<br>
I assume that your profiles show that floating-point emulation is the<br>
bottleneck? Can you share with us your data?<br>
<br>
Dan<br>
<br>
_______________________________________________ <br>
<st1:City w:st="on"><st1:place w:st="on">cairo</st1:place></st1:City> mailing
list<br>
<a href="mailto:cairo@cairographics.org">cairo@cairographics.org</a><br>
<a href="http://lists.cairographics.org/mailman/listinfo/cairo">http://lists.cairographics.org/mailman/listinfo/cairo</a><o:p></o:p></span></font></p>

</blockquote>

</div>

<p class=MsoNormal><font size=3 face="Times New Roman"><span style='font-size:
12.0pt'><o:p>&nbsp;</o:p></span></font></p>

</div>

</body>

</html>