John,
The number eventually does get converted to an integer (a 8-bit
byte actually) when I insert it into the image buffer. So that rounding
is happening automatically later.. this is done using string formatting:
imageBuffer[bufferX:bufferX+3] = '%c%c%c' % color
(color is a tuple)
Even in release builds, there was an internal function, 'warn' that was
popping up in the profiler results. I narrowed it down to the fact that
color was a tuple of floats (With values like 255.0, 122.999999,
12.33333) and so the string formatting code was upset that I was trying
to jam a floating point number into an 8-bit slot. When I manually
coerced them to integers, 'warn' stopped popping up in the profiler,
and the cost of rgb2color didn't seem to go up by anything significant.
So anyway, the point is that the floating point numbers should have
been 8-bit integers anyway, and yes I saw an improvement in the
profiler.
Alec
John Anderson wrote:
Alecf:
Given the current processor designs, not to mention the overhead of
Python, I would be very surprised if you see benefit from moving a
float to an int. Did you measure any perfromance improvement from that
change?
John
[email protected]
wrote:
[commits] (alecf) [7659] more optimization in calendar
drawing:
- Revision
- 7659
- Author
- alecf
- Date
- 2005-10-06 11:44:06 -0700 (Thu, 06 Oct 2005)
Log Message
more optimization in calendar drawing:
- calculate the locale-specific hour strings for the legend once,
rather than on every paint
- use Freeze/Thaw on the header while changing the widths of all the
columns
- round the 255-based colors to integers early, so that folks dealing
with rgb2color results are not bogged down with floats
Modified Paths
Diff
Modified:
trunk/chandler/parcels/osaf/framework/blocks/DrawingUtilities.py (7658
=> 7659)
--- trunk/chandler/parcels/osaf/framework/blocks/DrawingUtilities.py 2005-10-06 17:44:23 UTC (rev 7658)
+++ trunk/chandler/parcels/osaf/framework/blocks/DrawingUtilities.py 2005-10-06 18:44:06 UTC (rev 7659)
@@ -12,7 +12,7 @@
return red/255.0, green/255.0, blue/255.0
def rgb2color(r, g, b):
- return r*255, g*255, b*255
+ return int(r*255), int(g*255), int(b*255)
def SetTextColorsAndFont(grid, attr, dc, isSelected):
"""
Modified:
trunk/chandler/parcels/osaf/framework/blocks/calendar/CalendarCanvas.py
(7658 => 7659)
--- trunk/chandler/parcels/osaf/framework/blocks/calendar/CalendarCanvas.py 2005-10-06 17:44:23 UTC (rev 7658)
+++ trunk/chandler/parcels/osaf/framework/blocks/calendar/CalendarCanvas.py 2005-10-06 18:44:06 UTC (rev 7659)
@@ -1,4 +1,4 @@
-"""
+""
Canvas for calendaring blocks
"""
@@ -603,7 +603,7 @@
if item in collections:
widget.Refresh()
-
+
def onSelectWeekEvent(self, event):
self.dayMode = not event.arguments['doSelectWeek']
if self.dayMode:
@@ -769,7 +769,6 @@
else:
date = date.astimezone(defaultTzinfo)
- defaultTzinfo = ICUtzinfo.getDefault()
if nextDate.tzinfo is None:
nextDate = nextDate.replace(tzinfo=defaultTzinfo)
else:
@@ -1294,7 +1293,7 @@
def onSelectedDateChangedEvent(self, event):
super(CalendarControl, self).onSelectedDateChangedEvent(event)
-
+
def onSelectWeekEvent(self, event):
"""
I believe, as of now only calctrl sends SelectWeek events anyways.. but just in case...
@@ -1466,8 +1465,10 @@
def ResizeHeader(self):
drawInfo = self
+ self.weekColumnHeader.Freeze()
for (i,width) in enumerate(drawInfo.columnWidths):
self.weekColumnHeader.SetUIExtent(i, (0,width))
+ self.weekColumnHeader.Thaw()
def OnSize(self, event):
self._doDrawingCalculations()
Modified:
trunk/chandler/parcels/osaf/framework/blocks/calendar/TimedCanvas.py
(7658 => 7659)
--- trunk/chandler/parcels/osaf/framework/blocks/calendar/TimedCanvas.py 2005-10-06 17:44:23 UTC (rev 7658)
+++ trunk/chandler/parcels/osaf/framework/blocks/calendar/TimedCanvas.py 2005-10-06 18:44:06 UTC (rev 7659)
@@ -61,7 +61,6 @@
self.Refresh()
event.Skip()
-
def OnInit(self):
super (wxTimedEventsCanvas, self).OnInit()
@@ -71,6 +70,8 @@
self.Bind(wx.EVT_SIZE, self.OnSize)
self.Bind(wx.EVT_KEY_DOWN, self.OnKeyPressed)
+ self.localeHourStrings = list(self.GetLocaleHourStrings(range(24)))
+
def ScaledScroll(self, dx, dy):
(scrollX, scrollY) = self.CalcUnscrolledPosition(0,0)
scrollX += dx
@@ -114,10 +115,9 @@
timeFormatter = DateFormat.createTimeInstance()
hourFP = FieldPosition(DateFormat.HOUR1_FIELD)
dummyDate = date.today()
- defaultTzinfo = TimeZoneInfo.get(view=self.blockItem.itsView).default
-
+
for hour in hourrange:
- timedate = time(hour=hour, tzinfo=defaultTzinfo)
+ timedate = time(hour=hour)
hourdate = datetime.combine(dummyDate, timedate)
timeString = timeFormatter.format(hourdate, hourFP)
(start, end) = (hourFP.getBeginIndex(),hourFP.getEndIndex())
@@ -146,7 +146,7 @@
halfHourHeight = self.hourHeight/2
# we'll need these for hour formatting
- for hour,hourString in self.GetLocaleHourStrings(range(24)):
+ for hour,hourString in self.localeHourStrings:
if hour > 0:
# Draw the hour legend
@@ -194,7 +194,7 @@
rects = \
TimedCanvasItem.GenerateBoundsRects(self,
self._bgSelectionStartTime,
- self._bgSelectionEndTime,
+ self._bgSelectionEndTime,
self.dayWidth)
for rect in rects:
dc.DrawRectangleRect(rect)
@@ -263,7 +263,7 @@
# sorted by startTime. If no conflicts, this is an O(n) operation
# (note that as of Python 2.4, sorts are stable, so this remains safe)
self.canvasItemList.sort(key=TimedCanvasItem.GetIndentLevel)
-
+
def DrawCells(self, dc):
styles = self.blockItem.calendarContainer
_______________________________________________
Commits mailing list
[email protected]
http://lists.osafoundation.org/mailman/listinfo/commits
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
Open Source Applications Foundation "Dev" mailing list
http://lists.osafoundation.org/mailman/listinfo/dev
|