blob: 74fd4d6289911b9ea5dc151cb6d47d2c1b314e76 [file] [log] [blame]
<!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/base/guid.html">
<link rel="import" href="/tracing/base/iteration_helpers.html">
<link rel="import" href="/tracing/model/helpers/chrome_browser_helper.html">
<link rel="import" href="/tracing/model/helpers/chrome_gpu_helper.html">
<link rel="import" href="/tracing/model/helpers/chrome_renderer_helper.html">
<script>
'use strict';
/**
* @fileoverview Utilities for accessing trace data about the Chrome browser.
*/
tr.exportTo('tr.model.helpers', function() {
function findChromeBrowserProcess(model) {
var browserProcesses = [];
model.getAllProcesses().forEach(function(process) {
if (!tr.model.helpers.ChromeBrowserHelper.isBrowserProcess(process))
return;
browserProcesses.push(process);
}, this);
if (browserProcesses.length === 0)
return undefined;
if (browserProcesses.length > 1)
return undefined;
return browserProcesses[0];
}
function findChromeRenderProcesses(model) {
var rendererProcesses = [];
model.getAllProcesses().forEach(function(process) {
if (!tr.model.helpers.ChromeRendererHelper.isRenderProcess(process))
return;
rendererProcesses.push(process);
});
return rendererProcesses;
}
function findChromeGpuProcess(model) {
var gpuProcesses = model.getAllProcesses().filter(
tr.model.helpers.ChromeGpuHelper.isGpuProcess);
if (gpuProcesses.length != 1)
return undefined;
return gpuProcesses[0];
}
/**
* @constructor
*/
function ChromeModelHelper(model) {
this.model_ = model;
// Find browserHelper.
this.browserProcess_ = findChromeBrowserProcess(model);
if (this.browserProcess_) {
this.browserHelper_ = new tr.model.helpers.ChromeBrowserHelper(
this, this.browserProcess_);
} else {
this.browserHelper_ = undefined;
}
// Find gpuHelper.
var gpuProcess = findChromeGpuProcess(model);
if (gpuProcess) {
this.gpuHelper_ = new tr.model.helpers.ChromeGpuHelper(
this, gpuProcess);
} else {
this.gpuHelper_ = undefined;
}
// Find rendererHelpers.
var rendererProcesses_ = findChromeRenderProcesses(model);
this.rendererHelpers_ = {};
rendererProcesses_.forEach(function(renderProcess) {
var rendererHelper = new tr.model.helpers.ChromeRendererHelper(
this, renderProcess);
this.rendererHelpers_[rendererHelper.pid] = rendererHelper;
}, this);
}
ChromeModelHelper.guid = tr.b.GUID.allocate();
ChromeModelHelper.supportsModel = function(model) {
if (findChromeBrowserProcess(model) !== undefined)
return true;
if (findChromeRenderProcesses(model).length)
return true;
return false;
};
ChromeModelHelper.prototype = {
get pid() {
throw new Error('woah');
},
get process() {
throw new Error('woah');
},
get model() {
return this.model_;
},
get browserProcess() {
return this.browserProcess_;
},
get browserHelper() {
return this.browserHelper_;
},
get gpuHelper() {
return this.gpuHelper_;
},
get rendererHelpers() {
return this.rendererHelpers_;
}
};
return {
ChromeModelHelper: ChromeModelHelper
};
});
</script>