Upstream version 9.38.198.0
[platform/framework/web/crosswalk.git] / src / tools / telemetry / telemetry / core / tab_unittest.py
index ede2520..2f5cb69 100644 (file)
@@ -1,11 +1,17 @@
-# Copyright (c) 2012 The Chromium Authors. All rights reserved.
+# Copyright 2012 The Chromium 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 logging
+import tempfile
 
-from telemetry.core import util
+from telemetry import benchmark
+from telemetry.core import bitmap
 from telemetry.core import exceptions
+from telemetry.core import util
+from telemetry.core import video
+from telemetry.core.platform import tracing_category_filter
+from telemetry.timeline import model
 from telemetry.unittest import tab_test_case
 
 
@@ -13,6 +19,17 @@ def _IsDocumentVisible(tab):
   return not tab.EvaluateJavaScript('document.hidden || document.webkitHidden')
 
 
+class FakePlatformBackend(object):
+  def __init__(self):
+    self.platform = FakePlatform()
+
+  def DidStartBrowser(self, _, _2):
+    pass
+
+  def WillCloseBrowser(self, _, _2):
+    pass
+
+
 class FakePlatform(object):
   def __init__(self):
     self._is_video_capture_running = False
@@ -23,10 +40,7 @@ class FakePlatform(object):
 
   def StopVideoCapture(self):
     self._is_video_capture_running = False
-    return []
-
-  def SetFullPerformanceModeEnabled(self, enabled):
-    pass
+    return video.Video(tempfile.NamedTemporaryFile())
 
   @property
   def is_video_capture_running(self):
@@ -34,14 +48,12 @@ class FakePlatform(object):
 
 
 class TabTest(tab_test_case.TabTestCase):
-  def testNavigateAndWaitToForCompleteState(self):
-    self._browser.SetHTTPServerDirectories(util.GetUnittestDataDir())
-    self._tab.Navigate(self._browser.http_server.UrlOf('blank.html'))
+  def testNavigateAndWaitForCompleteState(self):
+    self._tab.Navigate(self.UrlOfUnittestFile('blank.html'))
     self._tab.WaitForDocumentReadyStateToBeComplete()
 
-  def testNavigateAndWaitToForInteractiveState(self):
-    self._browser.SetHTTPServerDirectories(util.GetUnittestDataDir())
-    self._tab.Navigate(self._browser.http_server.UrlOf('blank.html'))
+  def testNavigateAndWaitForInteractiveState(self):
+    self._tab.Navigate(self.UrlOfUnittestFile('blank.html'))
     self._tab.WaitForDocumentReadyStateToBeInteractiveOrBetter()
 
   def testTabBrowserIsRightBrowser(self):
@@ -52,12 +64,9 @@ class TabTest(tab_test_case.TabTestCase):
                       lambda: self._tab.Navigate('chrome://crash',
                                                  timeout=5))
 
+  @benchmark.Enabled('has tabs')
   def testActivateTab(self):
-    if not self._browser.supports_tab_control:
-      logging.warning('Browser does not support tab control, skipping test.')
-      return
-
-    self.assertTrue(_IsDocumentVisible(self._tab))
+    util.WaitFor(lambda: _IsDocumentVisible(self._tab), timeout=5)
     new_tab = self._browser.tabs.New()
     new_tab.Navigate('about:blank')
     util.WaitFor(lambda: _IsDocumentVisible(new_tab), timeout=5)
@@ -66,6 +75,12 @@ class TabTest(tab_test_case.TabTestCase):
     util.WaitFor(lambda: _IsDocumentVisible(self._tab), timeout=5)
     self.assertFalse(_IsDocumentVisible(new_tab))
 
+  def testTabUrl(self):
+    self.assertEquals(self._tab.url, 'about:blank')
+    url = self.UrlOfUnittestFile('blank.html')
+    self._tab.Navigate(url)
+    self.assertEquals(self._tab.url, url)
+
   def testIsTimelineRecordingRunningTab(self):
     self.assertFalse(self._tab.is_timeline_recording_running)
     self._tab.StartTimelineRecording()
@@ -75,24 +90,84 @@ class TabTest(tab_test_case.TabTestCase):
 
   #pylint: disable=W0212
   def testIsVideoCaptureRunning(self):
-    original_platform = self._tab.browser._platform
-    self._tab.browser._platform = FakePlatform()
-    self.assertFalse(self._tab.is_video_capture_running)
-    self._tab.StartVideoCapture(min_bitrate_mbps=2)
-    self.assertTrue(self._tab.is_video_capture_running)
+    original_platform_backend = self._tab.browser._platform_backend
     try:
-      self._tab.StopVideoCapture().next()
-    except Exception:
-      pass
-    self.assertFalse(self._tab.is_video_capture_running)
-    self._tab.browser._platform = original_platform
+      self._tab.browser._platform_backend = FakePlatformBackend()
+      self.assertFalse(self._tab.is_video_capture_running)
+      self._tab.StartVideoCapture(min_bitrate_mbps=2)
+      self.assertTrue(self._tab.is_video_capture_running)
+      self.assertIsNotNone(self._tab.StopVideoCapture())
+      self.assertFalse(self._tab.is_video_capture_running)
+    finally:
+      self._tab.browser._platform_backend = original_platform_backend
+
+  def testHighlight(self):
+    self.assertEquals(self._tab.url, 'about:blank')
+    self._browser.StartTracing()
+    self._tab.Highlight(bitmap.WEB_PAGE_TEST_ORANGE)
+    self._tab.ClearHighlight(bitmap.WEB_PAGE_TEST_ORANGE)
+    trace_data = self._browser.StopTracing()
+    timeline_model = model.TimelineModel(trace_data)
+    renderer_thread = timeline_model.GetRendererThreadFromTabId(
+        self._tab.id)
+    found_video_start_event = False
+    for event in renderer_thread.async_slices:
+      if event.name == '__ClearHighlight.video_capture_start':
+        found_video_start_event = True
+        break
+    self.assertTrue(found_video_start_event)
+
+  @benchmark.Enabled('has tabs')
+  def testGetRendererThreadFromTabId(self):
+    self.assertEquals(self._tab.url, 'about:blank')
+    # Create 3 tabs. The third tab is closed before we call StartTracing.
+    first_tab = self._tab
+    second_tab = self._browser.tabs.New()
+    second_tab.Navigate('about:blank')
+    second_tab.WaitForDocumentReadyStateToBeInteractiveOrBetter()
+    third_tab = self._browser.tabs.New()
+    third_tab.Navigate('about:blank')
+    third_tab.WaitForDocumentReadyStateToBeInteractiveOrBetter()
+    third_tab.Close()
+
+    self._browser.StartTracing(
+        tracing_category_filter.CreateNoOverheadFilter())
+    first_tab.ExecuteJavaScript('console.time("first-tab-marker");')
+    first_tab.ExecuteJavaScript('console.timeEnd("first-tab-marker");')
+    second_tab.ExecuteJavaScript('console.time("second-tab-marker");')
+    second_tab.ExecuteJavaScript('console.timeEnd("second-tab-marker");')
+    trace_data = self._browser.StopTracing()
+    timeline_model = model.TimelineModel(trace_data)
+
+    # Assert that the renderer_thread of the first tab contains
+    # 'first-tab-marker'.
+    renderer_thread = timeline_model.GetRendererThreadFromTabId(
+        first_tab.id)
+    first_tab_markers = [
+        renderer_thread.IterAllSlicesOfName('first-tab-marker')]
+    self.assertEquals(1, len(first_tab_markers))
+
+    # Close second tab and assert that the renderer_thread of the second tab
+    # contains 'second-tab-marker'.
+    second_tab.Close()
+    renderer_thread = timeline_model.GetRendererThreadFromTabId(
+        second_tab.id)
+    second_tab_markers = [
+        renderer_thread.IterAllSlicesOfName('second-tab-marker')]
+    self.assertEquals(1, len(second_tab_markers))
+
+    # Third tab wasn't available when we start tracing, so there is no
+    # renderer_thread corresponding to it in the the trace.
+    self.assertIs(None, timeline_model.GetRendererThreadFromTabId(third_tab.id))
 
 
 class GpuTabTest(tab_test_case.TabTestCase):
-  def setUp(self):
-    self._extra_browser_args = ['--enable-gpu-benchmarking']
-    super(GpuTabTest, self).setUp()
+  @classmethod
+  def CustomizeBrowserOptions(cls, options):
+    options.AppendExtraBrowserArgs('--enable-gpu-benchmarking')
 
+  # Test flaky on mac: http://crbug.com/358664
+  @benchmark.Disabled('android', 'mac')
   def testScreenshot(self):
     if not self._tab.screenshot_supported:
       logging.warning('Browser does not support screenshots, skipping test.')