Hi:

While I'm in favor of faster code, and I don't dispute that these changes make things faster, I'm curious if they result in any measurable or noticeable improvement.

See other comments inline below.

John

On Jun 6, 2007, at 9:45 AM, [EMAIL PROTECTED] wrote:

Revision
14591
Author
heikki
Date
2007-06-06 09:45:39 -0700 (Wed, 06 Jun 2007)
Log Message

Minor performance improvements:

* Removed some inappropriate usage of len() that showed in profiles
* x,y,w,h=rect.Get() is faster than x,y,w,h=rect (and faster than getting each value in a
separate wxPython call)
* Put some asserts that showed in profiles behind if __debug__: guards
Modified Paths

trunk/chandler/parcels/osaf/framework/attributeEditors/ AttributeEditors.py
trunk/chandler/parcels/osaf/framework/blocks/Block.py
trunk/chandler/parcels/osaf/framework/blocks/Table.py
trunk/chandler/parcels/osaf/framework/blocks/calendar/ CalendarBlocks.py trunk/chandler/parcels/osaf/framework/blocks/calendar/ CalendarCanvas.py
trunk/chandler/parcels/osaf/views/main/Sections.py
trunk/chandler/parcels/osaf/views/main/SideBar.py
trunk/chandler/util/divisions.py
Diff

Modified: trunk/chandler/parcels/osaf/framework/attributeEditors/ AttributeEditors.py (14590 => 14591)

--- trunk/chandler/parcels/osaf/framework/attributeEditors/ AttributeEditors.py 2007-06-06 16:14:16 UTC (rev 14590) +++ trunk/chandler/parcels/osaf/framework/attributeEditors/ AttributeEditors.py 2007-06-06 16:45:39 UTC (rev 14591)
@@ -1302,8 +1302,9 @@
         if image is None:
             logger.debug("Hey, missing image!")
         if image is not None:
- x = rect.GetLeft() + (rect.GetWidth() - image.GetWidth ()) / 2 - y = rect.GetTop() + (rect.GetHeight() - image.GetHeight ()) / 2
+            x, y, w, h = rect.Get()
+            x += (w - image.GetWidth()) / 2
+            y += (h - image.GetHeight()) / 2
             dc.DrawBitmap(image, x, y, True)

     def OnMouseChange(self, event):
Modified: trunk/chandler/parcels/osaf/framework/blocks/Block.py (14590 => 14591)

--- trunk/chandler/parcels/osaf/framework/blocks/Block.py 2007-06-06 16:14:16 UTC (rev 14590) +++ trunk/chandler/parcels/osaf/framework/blocks/Block.py 2007-06-06 16:45:39 UTC (rev 14591)
@@ -908,7 +908,7 @@
                 title = getattr(sender, 'title', None)
                 if title is not None:
                     accel = getattr(sender, 'accel', u'')
-                    if len(accel) > 0:
+                    if accel:
                         title += u'\t' + accel
# this isn't a real wx argument, but is used later # to re-attach the accelerator after the client has
@@ -1054,7 +1054,7 @@
#then the block is shown. If the attribute is missing then the block is shown.
         show = getattr (blockItem, "emptyContentsShow", None)
         if show is not None:
-            show = (len(blockItem.contents) != 0) ^ show
+            show = bool(blockItem.contents) ^ show
             if blockItem.isShown != show:
                 blockItem.isShown = show
                 self.Show (show)
Modified: trunk/chandler/parcels/osaf/framework/blocks/Table.py (14590 => 14591)

--- trunk/chandler/parcels/osaf/framework/blocks/Table.py 2007-06-06 16:14:16 UTC (rev 14590) +++ trunk/chandler/parcels/osaf/framework/blocks/Table.py 2007-06-06 16:45:39 UTC (rev 14591)
@@ -116,8 +116,9 @@
             delegate = AttributeEditors.getSingleton (type)
             attribute = self.defaultROAttribute
             grid = self.GetView()
-            assert (row < grid.GetTable().GetNumberRows() and
-                    column < grid.GetTable().GetNumberCols())
+            if __debug__:
+                assert (row < grid.GetTable().GetNumberRows() and
+                        column < grid.GetTable().GetNumberCols())
I think the if __debug__ can be removed, since asserts only happen when __debug__ is True.


             if (not grid.blockItem.columns[column].readOnly and
                 not grid.ReadOnly (row, column)[0] and
@@ -542,7 +543,7 @@
             # remember the first row in the old selection
             topLeftSelection = self.GetSelectionBlockTopLeft()

-            if len(topLeftSelection) > 0:
+            if topLeftSelection:
                 newRowSelection = topLeftSelection[0][0]
             else:
                 newRowSelection = -1
@@ -796,7 +797,8 @@
         """
DrawingUtilities.SetTextColorsAndFont (grid, attr, dc, isInSelection)
         value = grid.GetElementValue (row, column)
-        assert len(value) != 2 or not value[0].isDeleted()
+        if __debug__:
+            assert len(value) != 2 or not value[0].isDeleted()
Same here

         self.delegate.Draw(grid, dc, rect, value, isInSelection)

 class GridCellAttributeEditor (wxGrid.PyGridCellEditor):
Modified: trunk/chandler/parcels/osaf/framework/blocks/calendar/ CalendarBlocks.py (14590 => 14591)

--- trunk/chandler/parcels/osaf/framework/blocks/calendar/ CalendarBlocks.py 2007-06-06 16:14:16 UTC (rev 14590) +++ trunk/chandler/parcels/osaf/framework/blocks/calendar/ CalendarBlocks.py 2007-06-06 16:45:39 UTC (rev 14591)
@@ -669,7 +669,7 @@
         # Draw title if appropriate
         times = []
         timesCoords = []
-        if self.useToday and len(self.visibleEvents) > 0:
+        if self.useToday and self.visibleEvents:
             times.append(_(u"Today's events"))
             timesCoords.append((self.hMargin, y))
             y += self.lineHeight
Modified: trunk/chandler/parcels/osaf/framework/blocks/calendar/ CalendarCanvas.py (14590 => 14591)

--- trunk/chandler/parcels/osaf/framework/blocks/calendar/ CalendarCanvas.py 2007-06-06 16:14:16 UTC (rev 14590) +++ trunk/chandler/parcels/osaf/framework/blocks/calendar/ CalendarCanvas.py 2007-06-06 16:45:39 UTC (rev 14591)
@@ -802,7 +802,7 @@
         dc.DestroyClippingRegion()
         dc.SetClippingRect(rect)

-        (rectX,rectY,width,height) = rect
+        (rectX,rectY,width,height) = rect.Get()
         x = rectX
         y = rectY

@@ -1959,8 +1959,9 @@

changes = list(self.HandleRemoveAndYieldChanged (currentRange))

-            assert sorted(self.visibleEvents) == self.visibleEvents
-            assert not self.HasPendingEventChanges()
+            if __debug__:
+ assert sorted(self.visibleEvents) == self.visibleEvents
+                assert not self.HasPendingEventChanges()
and here


             def syncWidget(w):
                 w.wxHandleChanges(changes)
Modified: trunk/chandler/parcels/osaf/views/main/Sections.py (14590 => 14591)

--- trunk/chandler/parcels/osaf/views/main/Sections.py 2007-06-06 16:14:16 UTC (rev 14590) +++ trunk/chandler/parcels/osaf/views/main/Sections.py 2007-06-06 16:45:39 UTC (rev 14591)
@@ -94,7 +94,7 @@
             key=lambda x: getattr(x, self.attributeName))

# don't show section headers unless we have at least one section
-        if len(self.sectionIndexes) == 0:
+        if not self.sectionIndexes:
             return

         # now build the row-based sections - each entry in this array
@@ -137,9 +137,10 @@
             self.sectionLabels.append(label)

         # make sure we're sane
-        assert len(self.sectionRows) == len(self.sectionIndexes)
- assert sum([visible+1 for (row, visible, total) in self.sectionRows]) \
-               == self.totalRows
+        if __debug__:
+            assert len(self.sectionRows) == len(self.sectionIndexes)
+ assert sum([visible+1 for (row, visible, total) in self.sectionRows]) \
+                   == self.totalRows
and here


     def findCurrentColumn(self):
         # Find the column we're currently sorting by
@@ -165,7 +166,7 @@
         # temporary fix: when there are no sections (which is the
# condition under which the functional tests are running) then
         # use the original collection for row length
-        if len(self.sectionRows) == 0:
+        if not self.sectionRows:
             return len(self.blockItem.contents)
         else:
             return self.totalRows
@@ -214,7 +215,7 @@
         won't optimize this.
         """

-        if len(self.sectionRows) == 0:
+        if not self.sectionRows:
             return row

         sectionAdjust = len(self.sectionRows) - 1
@@ -248,7 +249,7 @@
         linear search through the sections. Generally there aren't a
         lot of sections though so this should be reasonably fast.
         """
-        if len(self.sectionIndexes) == 0:
+        if not self.sectionIndexes:
             return itemIndex

         sectionAdjust = len(self.sectionIndexes) - 1
@@ -395,8 +396,10 @@
# they're contracted together... so erase a one-pixel-high rectangle at
         # the bottom of our rect, then make ours a little smaller,
         dc.SetBrush(wx.WHITE_BRUSH)
+        x, y, w, h = rect.Get()
         rect.height -= 1
- dc.DrawRectangleRect((rect.x, rect.y + rect.height, rect.width, 1))
+        h -= 1
+        dc.DrawRectangleRect((x, y + h, w, 1))

         # Draw the background
         brush = wx.Brush(sectionBackgroundColor, wx.SOLID)
@@ -408,11 +411,11 @@
labelFont = Styles.getFont (grid.blockItem.sectionLabelCharacterStyle)
         dc.SetFont(labelFont)
(labelWidth, labelHeight, labelDescent, ignored) = dc.GetFullTextExtent(label)
-        labelTop = rect.y + ((rect.height - labelHeight) / 2)
+        labelTop = y + ((h - labelHeight) / 2)

         # Draw the expando triangle
(triBitmap, triWidth, triHeight) = self._getTriangle (expanded)
-        triTop = rect.y + ((rect.height - triHeight) / 2)
+        triTop = y + ((h - triHeight) / 2)
         dc.DrawBitmap(triBitmap, margin, triTop, True)

         # Draw the text label, if it overlaps the rect to be updated
@@ -440,8 +443,8 @@
             dc.SetPen(wx.WHITE_PEN)
             brush = wx.Brush(sectionSampleColor, wx.SOLID)
             dc.SetBrush(brush)
-            swatchX = rect.x + ((rect.width - swatchWidth) / 2)
-            swatchY = rect.y + ((rect.height - swatchHeight) / 2)
+            swatchX = x + ((w - swatchWidth) / 2)
+            swatchY = y + ((h - swatchHeight) / 2)
dc.DrawRectangleRect((swatchX, swatchY, swatchWidth, swatchHeight))

     def OnMouseChange(self, event):
Modified: trunk/chandler/parcels/osaf/views/main/SideBar.py (14590 => 14591)

--- trunk/chandler/parcels/osaf/views/main/SideBar.py 2007-06-06 16:14:16 UTC (rev 14590) +++ trunk/chandler/parcels/osaf/views/main/SideBar.py 2007-06-06 16:45:39 UTC (rev 14591)
@@ -1257,7 +1257,7 @@
             # Finally, create a UI wrapper collection to manage
             # things like selection and sorting
newKey = IndexedSelectionCollection (itsView=self.itsView, source=key)
-            if len (newKey) > 0:
+ if len(newKey) > 0: # XXX if newKey: does not work; other code depends on index being created here
                 newKey.addSelectionRange (0)
UserCollection(newKey).dontDisplayAsCalendar = UserCollection(key).dontDisplayAsCalendar
             return newKey
@@ -1298,7 +1298,7 @@
                              theItem not in collectionList):
                             collectionList.append (theItem)

-            if len (collectionList) > 0:
+            if collectionList:
                 """
tupleList is sorted so we always end up with one collection
                 for any order of collections in the source
@@ -1330,7 +1330,7 @@
                     key = None

                 if (key is not None and
- len ([c for c in collectionList if c.itsUUID not in key.collectionList]) != 0): + [c for c in collectionList if c.itsUUID not in key.collectionList]): # See bug #6793: If a subscribed collection has been deleted, then resubscribed # our cached key will be stale because the subscribed collection will have # been removed but not added when resubscribed. In this case, the removed
Modified: trunk/chandler/util/divisions.py (14590 => 14591)

--- trunk/chandler/util/divisions.py 2007-06-06 16:14:16 UTC (rev 14590) +++ trunk/chandler/util/divisions.py 2007-06-06 16:45:39 UTC (rev 14591)
@@ -101,11 +101,11 @@
                 division_stack.append((i,j))

     # this saves time
-    if len(l) == 0:
+    if not l:
         return []

     # the meat of it - the binary search
-    while len(division_stack) != 0:
+    while division_stack:

         # pop the next range off the stack
         index1, index2 = division_stack.pop()

_______________________________________________
Commits mailing list
[EMAIL PROTECTED]
http://lists.osafoundation.org/mailman/listinfo/commits

_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

Open Source Applications Foundation "chandler-dev" mailing list
http://lists.osafoundation.org/mailman/listinfo/chandler-dev

Reply via email to