Fix display test and light sensor test to not using 100% CPU
BUG=chrome-os-partner:11675
TEST=Run tests. Check CPU usage is under 10%.
Change-Id: I1832477fe5402407b6ffc4f2c3c251f48f2126b8
Reviewed-on: https://gerrit.chromium.org/gerrit/28689
Reviewed-by: Jon Salz <jsalz@chromium.org>
Commit-Ready: Vic Yang <victoryang@chromium.org>
Tested-by: Vic Yang <victoryang@chromium.org>
diff --git a/client/site_tests/factory_Display/factory_Display.py b/client/site_tests/factory_Display/factory_Display.py
index 0ca9a60..094b4d9 100644
--- a/client/site_tests/factory_Display/factory_Display.py
+++ b/client/site_tests/factory_Display/factory_Display.py
@@ -149,7 +149,7 @@
return
self._current_pattern = self._pattern_queue.pop()
name, cb_fn = self._current_pattern
- self._status_map[name] = ful.ACTIVE
+ self.update_status(name, ful.ACTIVE)
self._current_pattern_shown = False
def key_press_callback(self, widget, event):
@@ -165,28 +165,29 @@
self._fs_window = None
self._current_pattern_shown = True
elif event.keyval == gtk.keysyms.Tab and self._current_pattern_shown:
- self._status_map[pattern_name] = ful.FAILED
+ self.update_status(pattern_name, ful.FAILED)
self.goto_next_pattern()
elif event.keyval == gtk.keysyms.Return and self._current_pattern_shown:
- self._status_map[pattern_name] = ful.PASSED
+ self.update_status(pattern_name, ful.PASSED)
self.goto_next_pattern()
elif event.keyval == ord('Q'):
gtk.main_quit()
self._test_widget.queue_draw()
return True
- def label_status_expose(self, widget, event, name=None):
- status = self._status_map[name]
- widget.set_text(status)
- widget.modify_fg(gtk.STATE_NORMAL, ful.LABEL_COLORS[status])
+ def update_status(self, name, status):
+ self._status_map[name] = status
+ self._label_status[name].set_text(status)
+ self._label_status[name].modify_fg(gtk.STATE_NORMAL,
+ ful.LABEL_COLORS[status])
+ self._label_status[name].queue_draw()
def make_pattern_label_box(self, name):
label_status = ful.make_label(
ful.UNTESTED, size=_LABEL_SIZE,
alignment=(0, 0.5), fg=_LABEL_UNTESTED_FG)
- expose_cb = lambda *x: self.label_status_expose(*x, **{'name':name})
- label_status.connect('expose_event', expose_cb)
+ self._label_status[name] = label_status
label_en = ful.make_label(name, size=_LABEL_SIZE, alignment=(1, 0.5))
label_sep = ful.make_label(' : ', alignment=(0.5, 0.5))
@@ -213,6 +214,7 @@
self._pattern_queue = [x for x in reversed(_PATTERN_LIST)]
self._status_map = dict((n, ful.UNTESTED) for n, f in _PATTERN_LIST)
+ self._label_status = dict()
self._prompt_label = ful.make_label(_MESSAGE_STR, alignment=(0.5, 0.5))
diff --git a/client/site_tests/factory_LightSensor/factory_LightSensor.py b/client/site_tests/factory_LightSensor/factory_LightSensor.py
index 0ceb5dd..8f0ae51 100644
--- a/client/site_tests/factory_LightSensor/factory_LightSensor.py
+++ b/client/site_tests/factory_LightSensor/factory_LightSensor.py
@@ -128,7 +128,7 @@
gtk.main_quit()
return False
self._active_subtest = self._subtest_list[self._tested]
- self._status_map[self._active_subtest] = ful.ACTIVE
+ self.update_status(self._active_subtest, ful.ACTIVE)
self._status_label[self._active_subtest].queue_draw()
self._deadline = time.time() + self._timeout_per_subtest
self._current_iter_remained = self._iter_req_per_subtest
@@ -138,7 +138,7 @@
def timer_event(self, countdown_label):
time_remaining = max(0, self._deadline - time.time())
if time_remaining is 0:
- self._status_map[self._active_subtest] = ful.FAILED
+ self.update_status(self._active_subtest, ful.FAILED)
self._status_label[self._active_subtest].queue_draw()
factory.log('Timeout on subtest "%s"' % self._active_subtest)
if not self.next_subtest():
@@ -155,7 +155,7 @@
if event.keyval == ord(' ') and not self._started:
self._started = True
self._active_subtest = self._subtest_list[0]
- self._status_map[self._active_subtest] = ful.ACTIVE
+ self.update_status(self._active_subtest, ful.ACTIVE)
self._status_label[self._active_subtest].queue_draw()
self._deadline = time.time() + self._timeout_per_subtest
gobject.timeout_add(1000, self.timer_event, self._countdown_label)
@@ -165,7 +165,7 @@
def pass_one_iter(self, name):
self._current_iter_remained -= 1
if self._current_iter_remained is 0:
- self._status_map[name] = ful.PASSED
+ self.update_status(name, ful.PASSED)
self._status_label[name].queue_draw()
self._current_iter_remained = self._iter_req_per_subtest
mean_val = self._cumulative_val / self._iter_req_per_subtest
@@ -210,11 +210,12 @@
sensor_value.queue_draw()
return True
- def label_status_expose(self, widget, event, name):
- status = self._status_map[name]
- widget.set_text(status)
- widget.modify_fg(gtk.STATE_NORMAL, ful.LABEL_COLORS[status])
- return False
+ def update_status(self, name, status):
+ self._status_map[name] = status
+ self._label_status[name].set_text(status)
+ self._label_status[name].modify_fg(gtk.STATE_NORMAL,
+ ful.LABEL_COLORS[status])
+ self._label_status[name].queue_draw()
def calc_cfg_description(self, cfg):
if 'above' in cfg:
@@ -232,7 +233,7 @@
label_status = ful.make_label(ful.UNTESTED, size=_LABEL_STATUS_SIZE,
alignment=(0, 0.5),
fg=ful.LABEL_COLORS[ful.UNTESTED])
- label_status.connect('expose_event', self.label_status_expose, name)
+ self._label_status[name] = label_status
label_desc = ful.make_label(self._subtest_instruction[name],
alignment=(0.5, 0.5), fg=ful.WHITE)
cfg_desc = self.calc_cfg_description(self._subtest_cfg[name])
@@ -292,6 +293,7 @@
self._cumulative_val = 0
self._status_map = dict((n, ful.UNTESTED) for n in self._subtest_list)
+ self._label_status = dict()
self._tested = 0
self._started = False