<!DOCTYPE html>
<!--
Copyright (c) 2013 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="/extras/chrome/cc/tile.html">
<link rel="import" href="/extras/chrome/cc/tile_view.html">
<link rel="import" href="/extras/chrome/cc/layer_tree_host_impl_view.html">
<script>
'use strict';

tr.exportTo('tr.e.cc', function() {

  var knownRasterTaskNames = [
      'TileManager::RunRasterTask',
      'RasterWorkerPoolTaskImpl::RunRasterOnThread',
      'RasterWorkerPoolTaskImpl::Raster',
      'RasterTaskImpl::Raster',
      'cc::RasterTask',
      'RasterTask'
  ];

  var knownAnalysisTaskNames = [
      'TileManager::RunAnalyzeTask',
      'RasterWorkerPoolTaskImpl::RunAnalysisOnThread',
      'RasterWorkerPoolTaskImpl::Analyze',
      'RasterTaskImpl::Analyze',
      'cc::AnalyzeTask',
      'AnalyzeTask'
  ];

  function getTileFromRasterTaskSlice(slice) {
    if (!(isSliceDoingRasterization(slice) || isSliceDoingAnalysis(slice)))
      return undefined;

    var tileData;
    if (slice.args.data)
      tileData = slice.args.data;
    else
      tileData = slice.args.tileData;
    if (tileData === undefined)
      return undefined;
    if (tileData.tile_id)
      return tileData.tile_id;

    var tile = tileData.tileId;
    if (!(tile instanceof tr.e.cc.TileSnapshot))
      return undefined;
    return tileData.tileId;
  }

  function isSliceDoingRasterization(slice) {
    if (knownRasterTaskNames.indexOf(slice.title) !== -1)
      return true;
    return false;
  }

  function isSliceDoingAnalysis(slice) {
    if (knownAnalysisTaskNames.indexOf(slice.title) !== -1)
      return true;
    return false;
  }

  return {
    getTileFromRasterTaskSlice: getTileFromRasterTaskSlice,
    isSliceDoingRasterization: isSliceDoingRasterization,
    isSliceDoingAnalysis: isSliceDoingAnalysis
  };
});
</script>
