<!DOCTYPE html>
<!--
Copyright (c) 2014 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.
-->
<link rel="import" href="/tracing/model/helpers/chrome_process_helper.html">

<script>
'use strict';

/**
 * @fileoverview Utilities for accessing trace data about the Chrome browser.
 */
tr.exportTo('tr.model.helpers', function() {
  function ChromeRendererHelper(modelHelper, process) {
    tr.model.helpers.ChromeProcessHelper.call(this, modelHelper, process);
    this.mainThread_ = process.findAtMostOneThreadNamed('CrRendererMain');
    this.compositorThread_ = process.findAtMostOneThreadNamed('Compositor');
    this.rasterWorkerThreads_ = process.findAllThreadsMatching(function(t) {
      if (t.name === undefined)
        return false;
      if (t.name.indexOf('CompositorTileWorker') === 0)
        return true;
      if (t.name.indexOf('CompositorRasterWorker') === 0)
        return true;
      return false;
    });
  };

  ChromeRendererHelper.isRenderProcess = function(process) {
    if (!process.findAtMostOneThreadNamed('CrRendererMain'))
      return false;
    if (!process.findAtMostOneThreadNamed('Compositor'))
      return false;
    return true;
  };

  ChromeRendererHelper.prototype = {
    __proto__: tr.model.helpers.ChromeProcessHelper.prototype,

    get mainThread() {
      return this.mainThread_;
    },

    get compositorThread() {
      return this.compositorThread_;
    },

    get rasterWorkerThreads() {
      return this.rasterWorkerThreads_;
    }
  };

  return {
    ChromeRendererHelper: ChromeRendererHelper
  };
});
</script>
