# Copyright 2015 The Chromium OS Authors. All rights reserved. # Use of this source code is governed by a BSD-style license that can be # found in the LICENSE file. import re from autotest_lib.client.bin import utils from autotest_lib.client.common_lib import error def verify(cr, histogram_name, histogram_bucket_value): """ Verifies histogram string and success rate in a parsed histogram bucket. Full histogram URL is used to load histogram. Example Histogram URL is : chrome://histograms/Media.GpuVideoDecoderInitializeStatus @param cr: object, the Chrome instance @param histogram_name: string, name of the histogram @param histogram_bucket_value: int, required bucket number to look for @raises error.TestError if histogram is not successful """ bucket_pattern = '\n'+ str(histogram_bucket_value) +'.*100\.0%.*' error_msg_format = ('{} not loaded or bucket not found ' 'or bucket found at < 100%') tab = cr.browser.tabs.New() def loaded(): """ Checks if the histogram page has been fully loaded. """ docEle = 'document.documentElement' tab.Navigate('chrome://histograms/%s' % histogram_name) tab.WaitForDocumentReadyStateToBeComplete() raw_text = tab.EvaluateJavaScript( "{0} && {0}.innerText".format(docEle)) return re.search(bucket_pattern, raw_text) msg = error_msg_format.format(histogram_name) utils.poll_for_condition(loaded, exception=error.TestError(msg), sleep_interval=1) def is_bucket_present(cr,histogram_name, histogram_bucket_value): """ This returns histogram succes or fail to called function @param cr: object, the Chrome instance @param histogram_name: string, name of the histogram @param histogram_bucket_value: int, required bucket number to look for @returns True if histogram page was loaded and the bucket was found. False otherwise """ try: verify(cr,histogram_name, histogram_bucket_value) except error.TestError: return False else: return True