<!DOCTYPE html>
<html>
<!--
Copyright (c) 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.
-->
<head>
<title>LinuxPerfI915Parser tests</title>
<script src="base.js"></script>
</head>
<body>
<script>
'use strict';

base.require('unittest');
base.require('test_utils');
base.require('linux_perf_importer');

function testi915Import() {
  var lines = [
    // NB: spliced from different traces; mismatched timestamps don't matter
    '          chrome-1223  [000]  2784.773556: i915_gem_object_pwrite: ' +
               'obj=ffff88013f13fc00, offset=0, len=2984',
    '          chrome-1539  [000] 18420.677750: ' +
               'i915_gem_object_change_domain: ' +
               'obj=ffff8800a88d1400, read=44=>40, write=00=>40',
    '          chrome-1539  [000] 18420.677759: i915_gem_object_fault: ' +
               'obj=ffff8800a88d1400, GTT index=0 , writable',
    '               X-964   [000]  2784.774864: i915_flip_request: ' +
               'plane=0, obj=ffff88013f0b9a00',
    '          <idle>-0     [000]  2784.788644: i915_flip_complete: ' +
               'plane=0, obj=ffff88013f0b9a00',
    '          chrome-1539  [001] 18420.681687: i915_gem_request_retire: ' +
               'dev=0, ring=1, seqno=1178152',
    '          chrome-1539  [000] 18422.955688: i915_gem_request_add: ' +
               'dev=0, ring=1, seqno=1178364',
    '             cat-21833 [000] 18422.956832: i915_gem_request_complete: ' +
               'dev=0, ring=1, seqno=1178364',
    '               X-1012  [001] 18420.682511: i915_gem_request_wait_begin: ' +
               'dev=0, ring=4, seqno=1178156',
    '               X-1012  [000] 18422.765707: i915_gem_request_wait_end: ' +
               'dev=0, ring=4, seqno=1178359',
    '          chrome-1539  [000] 18422.955655: i915_gem_ring_flush: ' +
               'dev=0, ring=1, invalidate=001e, flush=0040',
    '          chrome-1539  [000] 18422.955660: i915_gem_ring_dispatch: ' +
               'dev=0, ring=1, seqno=1178364',
    '          chrome-1539  [000] 18420.677772: i915_reg_rw: ' +
               'write reg=0x100030, len=8, val=(0xfca9001, 0xfce8007)'
  ];
  var m = new tracing.TimelineModel(lines.join('\n'), false);
  assertEquals(0, m.importErrors.length);

  var i915GemThread = undefined;
  var i915FlipThread = undefined;
  var i915GemRingThread = undefined;
  var i915RegThread = undefined;
  m.getAllThreads().forEach(function(t) {
    switch (t.name) {
    case 'i915_gem':
      i915GemThread = t;
      break;
    case 'i915_flip':
      i915FlipThread = t;
      break;
    case 'i915_gem_ring':
      i915GemRingThread = t;
      break;
    case 'i915_reg':
      i915RegThread = t;
      break;
    default:
      throw new unittest.TestError('Unexpected thread named ' + t.name);
    }
  });
  assertNotUndefined(i915GemThread);
  assertNotUndefined(i915FlipThread);
  assertNotUndefined(i915GemRingThread);
  assertNotUndefined(i915RegThread);

  assertEquals(3, i915GemThread.slices.length);

  assertEquals(1, i915FlipThread.slices.length);

  assertAlmostEquals(2784.774864 * 1000.0,
      i915FlipThread.slices[0].start);
  assertAlmostEquals((2784.788644 - 2784.774864) * 1000.0,
      i915FlipThread.slices[0].duration);

  assertEquals(7, i915GemRingThread.slices.length);

  assertEquals(1, i915RegThread.slices.length);
}

</script>
</body>
</html>
