summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--tools/telemetry/telemetry/core/tab.py31
1 files changed, 18 insertions, 13 deletions
diff --git a/tools/telemetry/telemetry/core/tab.py b/tools/telemetry/telemetry/core/tab.py
index 22ce035..d44fc09 100644
--- a/tools/telemetry/telemetry/core/tab.py
+++ b/tools/telemetry/telemetry/core/tab.py
@@ -142,16 +142,18 @@ class Tab(web_contents.WebContents):
self.browser.platform.StartVideoCapture(min_bitrate_mbps)
self.ClearHighlight(bitmap.WEB_PAGE_TEST_ORANGE)
- def _FindHighlightBoundingBox(self, bmp, color):
+ def _FindHighlightBoundingBox(self, bmp, color, bounds_tolerance=4,
+ color_tolerance=8):
"""Returns the bounding box of the content highlight of the given color.
Raises:
BoundingBoxNotFoundException if the hightlight could not be found.
"""
- content_box, pixel_count = bmp.GetBoundingBox(color, tolerance=8)
+ content_box, pixel_count = bmp.GetBoundingBox(color,
+ tolerance=color_tolerance)
if not content_box:
- raise BoundingBoxNotFoundException('Failed to find tab contents.')
+ return None
# We assume arbitrarily that tabs are all larger than 200x200. If this
# fails it either means that assumption has changed or something is
@@ -173,8 +175,15 @@ class Tab(web_contents.WebContents):
# TODO(tonyg): This assert doesn't seem to work.
if (self._previous_tab_contents_bounding_box and
self._previous_tab_contents_bounding_box != content_box):
- raise BoundingBoxNotFoundException(
- 'Unexpected change in tab contents box.')
+ # Check if there's just a minor variation on the bounding box. If it's
+ # just a few pixels, we can assume it's probably due to
+ # compression artifacts.
+ for i in xrange(len(content_box)):
+ bounds_difference = abs(content_box[i] -
+ self._previous_tab_contents_bounding_box[i])
+ if bounds_difference > bounds_tolerance:
+ raise BoundingBoxNotFoundException(
+ 'Unexpected change in tab contents box.')
self._previous_tab_contents_bounding_box = content_box
return content_box
@@ -196,12 +205,10 @@ class Tab(web_contents.WebContents):
# Flip through frames until we find the initial tab contents flash.
content_box = None
for _, bmp in frame_generator:
- try:
- content_box = self._FindHighlightBoundingBox(
- bmp, bitmap.WEB_PAGE_TEST_ORANGE)
+ content_box = self._FindHighlightBoundingBox(
+ bmp, bitmap.WEB_PAGE_TEST_ORANGE)
+ if content_box:
break
- except BoundingBoxNotFoundException:
- pass
if not content_box:
raise BoundingBoxNotFoundException(
@@ -210,9 +217,7 @@ class Tab(web_contents.WebContents):
# Flip through frames until the flash goes away and emit that as frame 0.
timestamp = 0
for timestamp, bmp in frame_generator:
- try:
- self._FindHighlightBoundingBox(bmp, bitmap.WEB_PAGE_TEST_ORANGE)
- except BoundingBoxNotFoundException:
+ if not self._FindHighlightBoundingBox(bmp, bitmap.WEB_PAGE_TEST_ORANGE):
yield 0, bmp.Crop(*content_box)
break